l Request / Response Protocol (請(qǐng)求/應(yīng)答協(xié)議)
IPMB使用“請(qǐng)求——應(yīng)答”協(xié)議,發(fā)送一條請(qǐng)求消息給一個(gè)智能設(shè)備,該設(shè)備會(huì)返回一個(gè)獨(dú)立的應(yīng)答消息。任何傳輸協(xié)議都是有限制的,IPMB總線(xiàn)直接支持有15個(gè)內(nèi)部節(jié)點(diǎn)的系統(tǒng),系統(tǒng)應(yīng)用應(yīng)該努力減輕總線(xiàn)的占用時(shí)間,例如,每秒鐘少于6條消息,這樣做,可以確保節(jié)點(diǎn)可以成功在要求的重試次數(shù)內(nèi)搶占總線(xiàn)。
請(qǐng)求消息和應(yīng)答消息都是通過(guò)I2C總線(xiàn)的“主寫(xiě)”(Master Write)模式傳輸?shù)模簿褪钦f(shuō),一條請(qǐng)求消息是從一個(gè)作為I2C主端(Master)的節(jié)點(diǎn)發(fā)出,被一個(gè)作為I2C從端(slave)的節(jié)點(diǎn)接收;對(duì)應(yīng)的應(yīng)答消息是從一個(gè)作為I2C主端的應(yīng)答設(shè)備( responding intelligent device)發(fā)出,被一個(gè)作為I2C從端的請(qǐng)求發(fā)起者接收。
請(qǐng)求消息的一個(gè)重要性質(zhì)是要能夠指導(dǎo)應(yīng)答消息能夠準(zhǔn)確返回給請(qǐng)求者,請(qǐng)求者在請(qǐng)求消息里提供它的Requester‘s Slave Address (rqSA)和Requester’s LUN (rqLUN)來(lái)引導(dǎo)應(yīng)答返回請(qǐng)求者。
每個(gè)應(yīng)答者的接口協(xié)議都定義了一些支持的命令字,應(yīng)答者在這個(gè)特定的域位置必須提供至少一個(gè)命令字,任何其他和命令域相關(guān)的參數(shù)字節(jié)必須緊跟著第一個(gè)字節(jié)。應(yīng)用程序向一個(gè)節(jié)點(diǎn)發(fā)送請(qǐng)求消息,必須能夠通過(guò)解析命令域來(lái)識(shí)別應(yīng)答。
有效的請(qǐng)求是指使用節(jié)點(diǎn)支持的命令的cmd號(hào)、netFn號(hào)和LUN并且能夠通過(guò)數(shù)據(jù)完整性計(jì)算的請(qǐng)求消息,所有有效請(qǐng)求必須提供相應(yīng)的應(yīng)答。對(duì)這一要求的例外就是當(dāng)節(jié)點(diǎn)接收到請(qǐng)求時(shí)正在處理一個(gè)命令,或者在等待另一個(gè)節(jié)點(diǎn)的應(yīng)答。這時(shí)候節(jié)點(diǎn)可以選擇用NAK通知請(qǐng)求方,也可以封裝一個(gè)包含C0h完成碼的應(yīng)答消息來(lái)告訴請(qǐng)求方節(jié)點(diǎn)忙。
IPMB不要求對(duì)消息進(jìn)行列隊(duì)處理,也就是說(shuō)接口是單線(xiàn)的,節(jié)點(diǎn)一旦接到某個(gè)節(jié)點(diǎn)的請(qǐng)求會(huì)清除所有等待發(fā)送到該節(jié)點(diǎn)的應(yīng)答消息。但是橋節(jié)點(diǎn)除外。如果節(jié)點(diǎn)接收到請(qǐng)求包的數(shù)據(jù)checksum不對(duì),將直接丟棄該數(shù)據(jù)包。
1、如何區(qū)分請(qǐng)求消息和應(yīng)答消息:
請(qǐng)求消息和應(yīng)答消息的網(wǎng)絡(luò)功能號(hào)(network functions)不同,請(qǐng)求消息使用的是偶數(shù),應(yīng)答消息用的是奇數(shù)的網(wǎng)絡(luò)功能號(hào)。由于有可能同時(shí)存在不止一條請(qǐng)求消息,那么區(qū)分一個(gè)應(yīng)答消息到底是對(duì)應(yīng)那一個(gè)請(qǐng)求就非常重要了。這是通過(guò)下列機(jī)制來(lái)實(shí)現(xiàn)的:
1、應(yīng)答消息中包含Responder’s Slave Address (rsSA) 和 Responder’s LUN (rsLUN),這回告訴請(qǐng)求者(Requester)應(yīng)答是從哪里來(lái)的。
2、請(qǐng)求消息中的命令域(Command (cmd) field)也包含在應(yīng)答消息里面,這可以讓請(qǐng)求者核實(shí)應(yīng)答是針對(duì)具體那一個(gè)請(qǐng)求的。
3、請(qǐng)求消息中的序列號(hào)(Seq)也會(huì)包含在應(yīng)答消息中,這可以使請(qǐng)求者核實(shí)應(yīng)答是針對(duì)那一次請(qǐng)求的。
2、丟失應(yīng)答消息由下面的機(jī)制來(lái)處理:
1、請(qǐng)求方超時(shí)等待應(yīng)答。
2、請(qǐng)求方重試并超時(shí)等待知道超過(guò)超時(shí)次數(shù)限制。
3、請(qǐng)求方可以發(fā)送“Get Device ID”命令來(lái)看看應(yīng)答方是否仍在工作,如果有應(yīng)答,則發(fā)送“Warm Reset”命令來(lái)將其IPMB通信接口返回到一個(gè)可知的狀態(tài),如果沒(méi)有應(yīng)答,則可以認(rèn)為應(yīng)答方已經(jīng)死掉。
IPMB接口使用序列號(hào)域來(lái)區(qū)分從發(fā)的請(qǐng)求消息,但是當(dāng)請(qǐng)求方重啟,就有可能產(chǎn)生和上一次發(fā)送的序列號(hào)相同的請(qǐng)求消息來(lái),例如序列號(hào)剛超界,或者是剛剛只發(fā)送了一條消息。為了避免這些,我們使用序列號(hào)期滿(mǎn)機(jī)制,當(dāng)接收端接收到同一個(gè)節(jié)點(diǎn)的序列號(hào)相同但超過(guò)了序列號(hào)期滿(mǎn)間隔就被看做是一條新的請(qǐng)求消息。
3、 Response Time-outs(應(yīng)答超時(shí))
請(qǐng)求方不可能認(rèn)為所有的請(qǐng)求都會(huì)有應(yīng)答,有可能在某種情況下應(yīng)答方可能不會(huì)提供應(yīng)答消息。這時(shí)候,請(qǐng)求方就要實(shí)現(xiàn)超時(shí)等待機(jī)制。
4、 Unexpected Request Messages(不希望的請(qǐng)求消息)
請(qǐng)求消息和應(yīng)答消息不是自動(dòng)成對(duì)傳輸?shù)?,在一個(gè)請(qǐng)求消息和應(yīng)答消息的間隔,允許其他的總線(xiàn)傳輸,因此,節(jié)點(diǎn)必須容忍意外請(qǐng)求發(fā)生。例如,節(jié)點(diǎn)A發(fā)送請(qǐng)求消息給節(jié)點(diǎn)B,A正在等待應(yīng)答的時(shí)候,自己可能會(huì)接到來(lái)自節(jié)點(diǎn)C的請(qǐng)求,節(jié)點(diǎn)A有多種方式來(lái)處理,第一,節(jié)點(diǎn)A可以接受并處理它,這是最可取的方法;如果不可以做到這一點(diǎn),節(jié)點(diǎn)可以選擇丟棄這個(gè)意外消息。
另外,任何應(yīng)答消息如果沒(méi)等待的請(qǐng)求有與之匹配的話(huà),將被丟棄。任何希望得到的應(yīng)答消息如果corrupted或者不遵從協(xié)議的話(huà),也將被丟棄。
l Link Layer Addressing(鏈路層處理)
1、Connection Header(鏈路數(shù)據(jù)頭)
這是一種鏈路層和網(wǎng)絡(luò)層結(jié)合的數(shù)據(jù)頭,成功傳輸該數(shù)據(jù)頭就會(huì)在節(jié)點(diǎn)間建立連接,為傳輸后面的消息主體的字節(jié)準(zhǔn)備好通路,下圖為鏈路數(shù)據(jù)頭的格式:
鏈路數(shù)據(jù)頭包含一個(gè)7位的從地址,之后的一位是I2C讀寫(xiě)位,由于IPMB協(xié)議只使用I2C的主寫(xiě)模式,所以這個(gè)讀寫(xiě)位一直是0。這個(gè)字節(jié)之后的是網(wǎng)絡(luò)功能號(hào)()和LUN字節(jié),和一個(gè)checksum字節(jié)。如果這個(gè)checksum不對(duì),節(jié)點(diǎn)可以拒絕接收后面的數(shù)據(jù)。
2、Message Transaction Formats(消息傳輸格式)
IPMB點(diǎn)對(duì)點(diǎn)傳輸,數(shù)據(jù)包包含IPMB connection headers、command、和data字節(jié)。如下圖所示:
3、除此之外,鏈路層還要處理一下對(duì)非智能設(shè)備的讀寫(xiě)問(wèn)題。
l Design Objectives(設(shè)計(jì)目標(biāo))
協(xié)議的基本設(shè)計(jì)符合下列目標(biāo)和原則:
(1)、設(shè)計(jì)能在處理能力有限和RAM和ROM資源有限的微處理器運(yùn)行的應(yīng)用。
(2)、展現(xiàn)高度對(duì)稱(chēng)性,例如:對(duì)節(jié)點(diǎn)的訪(fǎng)問(wèn)方法要和節(jié)點(diǎn)的具體應(yīng)用相獨(dú)立。
(3)、展現(xiàn)高度的相似性,例如機(jī)架尋址自然要和基本的I2C尋址一致。
(4)、橋接功能的處理和存儲(chǔ)負(fù)擔(dān)最小化。
(5)、展現(xiàn)清晰的功能層次,例如:消息數(shù)據(jù)不要差雜有協(xié)議數(shù)據(jù),不同方面的協(xié)議數(shù)據(jù)也要相應(yīng)的保持獨(dú)立。
l Protocol Use of I2C Services(協(xié)議對(duì)I2C服務(wù)的使用)
IPMB總線(xiàn)協(xié)議中I2C是用作媒介和物理層的。協(xié)議嚴(yán)格按照下列條件使用I2C服務(wù):
1、只使用主寫(xiě)模式(Master Write)(I2C從地址的R/W位一直是0)。
2、不使用10_bit尋址。
3、每次傳輸只用一個(gè)從地址。
4、不使用repeated starts,repeated starts是I2C協(xié)議為了在傳輸?shù)倪^(guò)程中改變總線(xiàn)方向而定義的。由于IPMB協(xié)議只用到主寫(xiě)模式,所以就不需要repeated starts 了,不過(guò)在非IPMB協(xié)議的設(shè)備中還是要繼續(xù)使用repeated starts 的。
5、I2C的通知機(jī)制(ACK bit)只表示字節(jié)被從端接收,不能保證接收的數(shù)據(jù)的完整性和正確性。
評(píng)論
查看更多