藺春明,王守勝,高美芹,俞燚
(安徽江淮汽車集團(tuán)股份有限公司,安徽 合肥 230601)
CAN數(shù)據(jù)包的長(zhǎng)度不超過(guò)8個(gè)字節(jié),在診斷等場(chǎng)合下會(huì)需要傳輸幾十甚至上百字節(jié)的數(shù)據(jù),為了解決這種情形下的應(yīng)用矛盾,目前有兩種較好的方案:一是ISO 15765-2標(biāo)準(zhǔn)中在網(wǎng)絡(luò)層定義的多幀數(shù)據(jù)通訊;二是SAE J1939-21標(biāo)準(zhǔn)在數(shù)據(jù)鏈路層中也定義了多幀數(shù)據(jù)通訊,二者雖然都是對(duì)于多幀數(shù)據(jù)通訊的實(shí)現(xiàn),但是在實(shí)現(xiàn)方式、最大通訊數(shù)據(jù)量、超時(shí)、錯(cuò)誤處理等上存在較大的差異,下面分別分析兩種多幀數(shù)據(jù)通訊以及二者之間的差異、優(yōu)劣、應(yīng)用趨勢(shì)、發(fā)展前景等。
ISO15765協(xié)議在傳輸多幀數(shù)據(jù)的過(guò)程中需要對(duì)報(bào)文進(jìn)行組包、分包和流控制(FC),ISO15765協(xié)議是通過(guò)一個(gè)控制信息來(lái)實(shí)現(xiàn)的。
ISO15765定義了一個(gè)協(xié)議控制信息(PCI)來(lái)完成數(shù)據(jù)的通訊,通過(guò)PCI將數(shù)據(jù)分為單幀(SF)、第一幀(FF)、連續(xù)幀(CF)和流控制幀(FC)4種類型的消息幀,通過(guò)數(shù)據(jù)域的PCI區(qū)別幀功能類型(本文僅對(duì)常規(guī)尋址、常規(guī)固定尋址進(jìn)行說(shuō)明,其他尋址方式的 PCI填充信息會(huì)稍有差異)。表1描述了這幾種幀的數(shù)據(jù)域結(jié)構(gòu)。
表1 數(shù)據(jù)域結(jié)構(gòu)
表2~表4描述了實(shí)現(xiàn)多幀數(shù)據(jù)通訊的四種PDU類型及數(shù)據(jù)域結(jié)構(gòu)信息含義:
第一幀的0字節(jié)的高4位填充1,表示PDU的類型為第一幀,0字節(jié)和1字節(jié)共同組成數(shù)據(jù)包的長(zhǎng)度,共12位,所以ISO 15765-2定義的多幀數(shù)據(jù)通訊的最大數(shù)據(jù)量為4095字節(jié);2~7字節(jié)填充第一幀數(shù)據(jù)。
表2 第一幀的數(shù)據(jù)域結(jié)構(gòu)描述
表3 流控制幀的數(shù)據(jù)域結(jié)構(gòu)描述
表4 連續(xù)幀的數(shù)據(jù)域結(jié)構(gòu)描述
圖1描述了一個(gè)完整的基于ISO 15765-2協(xié)議定義的多幀數(shù)據(jù)通訊過(guò)程。
圖1 多幀數(shù)據(jù)通訊過(guò)程
發(fā)送節(jié)點(diǎn)從應(yīng)用層接收數(shù)據(jù)后,來(lái)判斷是屬于長(zhǎng)數(shù)據(jù)還是短數(shù)據(jù)。如果數(shù)據(jù)長(zhǎng)度≤7時(shí),數(shù)據(jù)就會(huì)以單幀的形式通訊。生成的單幀PCI(1個(gè)字節(jié))、數(shù)據(jù)和CAN標(biāo)識(shí)符一起組成網(wǎng)絡(luò)層PDU傳輸?shù)綌?shù)據(jù)鏈路層。
當(dāng)數(shù)據(jù)長(zhǎng)度>7時(shí),就會(huì)對(duì)數(shù)據(jù)進(jìn)行打包,將前6個(gè)字節(jié)的數(shù)據(jù)放在 FF幀(第一幀)中,在第一幀的前兩個(gè)字節(jié)是PCI,包含消息幀的長(zhǎng)度。隨后接收數(shù)據(jù)的節(jié)點(diǎn)會(huì)發(fā)送流控制幀(FC),流控制幀就是告訴發(fā)送節(jié)點(diǎn)接下來(lái)怎么樣發(fā)送剩下的數(shù)據(jù)。流控制幀包含BS(Block Size)和STmin。其中 BS決定了接收節(jié)點(diǎn)一次可以接收連續(xù)幀的個(gè)數(shù)。STmin為連續(xù)發(fā)送連續(xù)幀的最小時(shí)間間隔。每次發(fā)送過(guò)程均收到FC,再根據(jù)FC發(fā)送剩余數(shù)據(jù),直至全部數(shù)據(jù)發(fā)送完。
當(dāng)SF和CF的最后一幀加上PCI的信息不夠8個(gè)字節(jié)時(shí),即數(shù)據(jù)域沒(méi)有全部使用時(shí),協(xié)議規(guī)定要填充,具體填充1或0可由OEM定義,目的是在CAN總線上傳輸?shù)臄?shù)據(jù)都是8個(gè)字節(jié),省去數(shù)據(jù)鏈路層去計(jì)算DLC。
以上是在發(fā)送時(shí)的拆裝過(guò)程,相反,如果接收來(lái)自電控單元的數(shù)據(jù)時(shí)則要完成組裝過(guò)程,這時(shí)需要一個(gè)具有足夠空間的緩存區(qū)以存放接收的數(shù)據(jù)。
1.3.1 連接超時(shí)
在 4種消息幀通訊的過(guò)程中,會(huì)有 As、Ar、Bs、Br、Cs和Cr六種定時(shí)參數(shù)約束這四種消息幀的通訊時(shí)間和通訊的間隔等。
圖2 時(shí)間參數(shù)定義
表5 超時(shí)定義
1.3.2 錯(cuò)誤識(shí)別與處理
SF_DL錯(cuò)誤:SF_DL=0 或者SF_DL>7(常規(guī)尋址)接收方網(wǎng)絡(luò)層應(yīng)忽略接收到的單幀,且接收方無(wú) indication;FF_DL>接收方的緩存,那么接收方網(wǎng)絡(luò)層應(yīng)中斷報(bào)文接收,接收方發(fā)送 FC,其中 FS=Overflow,接收方無(wú) indication;FF_DL<=7/6(常規(guī)尋址模式為7,擴(kuò)展或混合尋址為6),網(wǎng)絡(luò)層忽略FF,接收方無(wú)indication,且不發(fā)送FC;SN錯(cuò)誤:CF N_PDU中的SN錯(cuò)誤,報(bào)文接收應(yīng)被中斷,接收方網(wǎng)絡(luò)層應(yīng)指示上層<Result>=N_WRONG_SN;SN 錯(cuò)誤:CF N_PDU中的SN錯(cuò)誤,報(bào)文接收應(yīng)被中斷,接收方網(wǎng)絡(luò)層應(yīng)指示上層<Result>=N_WRONG_SN;FS錯(cuò)誤:如果發(fā)送方網(wǎng)絡(luò)層發(fā)現(xiàn)接收到的FC N_PDU中的FS錯(cuò)誤,那么報(bào)文發(fā)送應(yīng)被中斷,發(fā)送方網(wǎng)絡(luò)層應(yīng)確認(rèn)上層<Result>=N_INVALID_FS;N_WFTmax:接收方最多連續(xù)發(fā)送多少個(gè)等待FC幀個(gè)數(shù),本地變量,僅可以在多幀報(bào)文發(fā)送過(guò)程中接收方網(wǎng)絡(luò)實(shí)體中定義,系統(tǒng)初始化時(shí)應(yīng)設(shè)置正確,使用這個(gè)變量用于避免發(fā)送方節(jié)點(diǎn)一直處于等待FC狀態(tài);ST錯(cuò)誤:發(fā)送方接收到的FC中的STmin設(shè)置為保留值時(shí),發(fā)送方繼續(xù)發(fā)送 CF,只是各個(gè)CF之間的間隔時(shí)間為協(xié)議最大值(7F-127ms),發(fā)送方和接收方?jīng)]有錯(cuò)誤向各自上層報(bào)告。
非預(yù)期幀的處理:在多幀報(bào)文通訊過(guò)程中,任何一方接收到的非期望報(bào)文(同一個(gè)N_AI),總線設(shè)計(jì)者確定總線采用全雙工或半雙工,然后依據(jù)節(jié)點(diǎn)處于接收狀態(tài),發(fā)送狀態(tài)及空閑狀態(tài)時(shí),接收到非預(yù)期報(bào)文,網(wǎng)絡(luò)層的處理方法不同:①半雙工狀態(tài),網(wǎng)絡(luò)層處于發(fā)送狀態(tài),收到任何數(shù)據(jù)報(bào)文,均忽略;②全雙工狀態(tài),除SF和物理尋址的FF外,包括功能尋址FF均作忽略處理,且不向上層報(bào)告。
表6 STmin定義
多幀報(bào)文的發(fā)送必須使用物理尋址,如果多幀報(bào)文的發(fā)送是功能尋址則需忽略功能尋址第一幀。
1個(gè)SAE J1939消息幀的數(shù)據(jù)場(chǎng)不超過(guò)8個(gè)字節(jié),因此,如果要發(fā)送的數(shù)據(jù)長(zhǎng)度超過(guò)8個(gè)字節(jié),就需要將消息幀分成幾個(gè)不超過(guò)8個(gè)字節(jié)的消息幀分包發(fā)送。
表7~表14描述了實(shí)現(xiàn)連接管理及數(shù)據(jù)通訊的數(shù)據(jù)結(jié)構(gòu)。
SAE J1939-21數(shù)據(jù)數(shù)據(jù)通訊中對(duì)于TP.DT(數(shù)據(jù)傳送)數(shù)據(jù)域的結(jié)構(gòu)定義見(jiàn)表7,數(shù)據(jù)場(chǎng)的第1個(gè)字節(jié)從1開(kāi)始作為消息幀的序號(hào),后7個(gè)字節(jié)用來(lái)存放數(shù)據(jù),所以可發(fā)送255×7=1785個(gè)字節(jié)的數(shù)據(jù)(255表示最大能夠發(fā)送的包數(shù),范圍1~255包;7表示每包消息幀的字節(jié)數(shù),2~8位為存放數(shù)據(jù)位)。數(shù)據(jù)包按照包編號(hào)順序發(fā)送,最后一個(gè)數(shù)據(jù)包未用的字節(jié)以0xFF填充。
表7 TP.DT數(shù)據(jù)域結(jié)構(gòu)
表8 TP.DT參數(shù)組描述
表9 TP.CM參數(shù)組描述
表10 TP.CM_RTS參數(shù)描述
表11 TP.CM_CTS參數(shù)描述
表12 TP.CM_EndofMsgAck參數(shù)描述
表13 TP.CM_Abort參數(shù)描述
表14 TP.CM_BAM參數(shù)描述
消息幀被接收以后按序號(hào)重新組合成原來(lái)的數(shù)據(jù),消息幀的重組過(guò)程正好是拆分包的逆向過(guò)程。
連接管理主要對(duì)節(jié)點(diǎn)之間連接的建立和關(guān)閉、數(shù)據(jù)的傳送進(jìn)行管理,其中定義了發(fā)送請(qǐng)求幀、發(fā)送清除幀、結(jié)束應(yīng)答幀、連接失敗幀及用來(lái)全局接收的廣播幀5種幀結(jié)構(gòu)。節(jié)點(diǎn)之間的連接通過(guò)1個(gè)節(jié)點(diǎn)向目的地址發(fā)送1個(gè)發(fā)送請(qǐng)求幀而建立。在接收發(fā)送請(qǐng)求幀以后,節(jié)點(diǎn)如果有足夠的空間來(lái)接收數(shù)據(jù)并且數(shù)據(jù)有效,則發(fā)送1個(gè)發(fā)送清除幀,開(kāi)始數(shù)據(jù)的傳送;如果存儲(chǔ)空間不夠或數(shù)據(jù)無(wú)效等原因而節(jié)點(diǎn)需要拒絕連接,則發(fā)送連接失敗幀,連接關(guān)閉;如果數(shù)據(jù)接收全部完成,則節(jié)點(diǎn)發(fā)送1個(gè)結(jié)束應(yīng)答幀,連接關(guān)閉。
2.2.1 點(diǎn)對(duì)點(diǎn)會(huì)話
一般會(huì)話的通訊過(guò)程參考圖3:圖3描述了基于請(qǐng)求、應(yīng)答模式的連接管理及數(shù)據(jù)通訊過(guò)程,發(fā)送節(jié)點(diǎn)請(qǐng)求傳輸一個(gè)PGN為65259的數(shù)據(jù)包,字節(jié)長(zhǎng)度為23字節(jié),包長(zhǎng)度為4包,接收節(jié)點(diǎn)允許單次連續(xù)發(fā)送不超過(guò)2包的數(shù)據(jù),通訊過(guò)程按照一般正常過(guò)程完成連接管理及數(shù)據(jù)通訊。
圖3 點(diǎn)對(duì)點(diǎn)會(huì)話過(guò)程
要求某一個(gè)數(shù)據(jù)包重發(fā):參考圖4虛線框內(nèi),接收節(jié)點(diǎn)要求把PGN65259的第2包數(shù)據(jù)重發(fā),發(fā)送節(jié)點(diǎn)下一幀把第2包數(shù)據(jù)重新發(fā)送一遍。
圖4 數(shù)據(jù)包重發(fā)過(guò)程
利用RTS的最大數(shù)據(jù)包能力:參考圖5虛線框內(nèi),發(fā)送節(jié)點(diǎn)單次連續(xù)發(fā)送5包數(shù)據(jù)。
圖5 RTS的最大數(shù)據(jù)包通訊
2.2.2 廣播會(huì)話
圖6描述了基于廣播模式的數(shù)據(jù)通訊過(guò)程:發(fā)送節(jié)點(diǎn)廣播請(qǐng)求傳輸一個(gè)PGN為65260的數(shù)據(jù)包,字節(jié)長(zhǎng)度為17字節(jié),包長(zhǎng)度為3包,通訊過(guò)程按照一般正常過(guò)程完成數(shù)據(jù)通訊。
圖6 廣播會(huì)話通訊過(guò)程
2.3.1 連接超時(shí)
超時(shí)功能:控制報(bào)文的發(fā)送速率,留給對(duì)方足夠的處理時(shí)間,防止長(zhǎng)時(shí)間等待。
超時(shí)處理:點(diǎn)對(duì)點(diǎn)會(huì)話中,等待方發(fā)送放棄連接報(bào)文,退出通訊過(guò)程;廣播公告中,直接退出通訊過(guò)程。
表15 超時(shí)的時(shí)間參數(shù)設(shè)定
2.3.2 錯(cuò)誤識(shí)別與處理
1)連接關(guān)閉的情形:
①BAM 報(bào)文的連接關(guān)閉情形:發(fā)送節(jié)點(diǎn)發(fā)送最后一包DT;響應(yīng)節(jié)點(diǎn)接收到最后一包DT,出現(xiàn)一次T1連接超時(shí)。
②RTS/CTS報(bào)文連接關(guān)閉情形:發(fā)送節(jié)點(diǎn)完成數(shù)據(jù)通訊后接收到 TP.CM_EndOfMsgAck;發(fā)送了放棄連接報(bào)文;接收到放棄連接報(bào)文。響應(yīng)節(jié)點(diǎn)完成數(shù)據(jù)通訊后發(fā)送TP.CM_EndOfMsgAck;接收到放棄連接報(bào)文;發(fā)送了放棄連接報(bào)文。
2)連接限制的情形:
①同一時(shí)刻,發(fā)送節(jié)點(diǎn)對(duì)一個(gè)節(jié)點(diǎn)只能發(fā)起一個(gè)點(diǎn)對(duì)點(diǎn)會(huì)話。
②發(fā)送節(jié)點(diǎn)同一時(shí)刻只能發(fā)起一個(gè)廣播公告。
③連接狀態(tài)下,如果接收節(jié)點(diǎn)不支持另一個(gè)連接,必須發(fā)送放棄連接報(bào)文進(jìn)行拒絕。
④接收節(jié)點(diǎn)必須能夠同時(shí)接收來(lái)自多個(gè)不同節(jié)點(diǎn)的連接(包括點(diǎn)對(duì)點(diǎn)會(huì)話和廣播公告)。
⑤接收節(jié)點(diǎn)能夠同時(shí)支持由同一個(gè)發(fā)送節(jié)點(diǎn)發(fā)起的一個(gè)點(diǎn)對(duì)點(diǎn)會(huì)話和一個(gè)廣播公告。
CAN數(shù)據(jù)包的長(zhǎng)度不超過(guò)8個(gè)字節(jié),在診斷等場(chǎng)合下會(huì)需要傳輸幾十甚至上百字節(jié)的數(shù)據(jù),無(wú)論ISO 15765-2還是SAE J1939-21均能很好的解決多幀數(shù)據(jù)通訊的功能,只是二者在實(shí)現(xiàn)思想及細(xì)節(jié)上存在一定差異。
ISO15765-2定義了一個(gè)PCI來(lái)完成連接管理及數(shù)據(jù)的通訊,PCI放置在數(shù)據(jù)域的第1~3字節(jié),通過(guò)PCI將數(shù)據(jù)分為SF、FF、CF和FC 4種類型的消息幀及對(duì)應(yīng)的控制信息,4種數(shù)據(jù)幀共用一個(gè)ID,通過(guò)PCI來(lái)區(qū)別幀的功能類型及對(duì)應(yīng)的控制信息。節(jié)點(diǎn)之間的連接管理及數(shù)據(jù)通訊控制信息均是通過(guò)PCI來(lái)體現(xiàn)。
而SAE J1939-21則是通過(guò)PGN TP.CM來(lái)實(shí)現(xiàn)節(jié)點(diǎn)之間的連接管理,包括:發(fā)送請(qǐng)求、發(fā)送允許、結(jié)束應(yīng)答、連接失敗及用來(lái)全局接收的廣播功能的實(shí)現(xiàn),5種功能的控制信息則是填充到對(duì)應(yīng)數(shù)據(jù)域的第1字節(jié)內(nèi)。SAE J1939-21實(shí)現(xiàn)數(shù)據(jù)通訊則是通過(guò)PGNTP.DT來(lái)實(shí)現(xiàn),數(shù)據(jù)域第1字節(jié)填充數(shù)據(jù)包的編號(hào),第2~7字節(jié)填充具體數(shù)據(jù)。節(jié)點(diǎn)之間的連接管理及數(shù)據(jù)通訊控制信息是通過(guò)兩個(gè) PGN及對(duì)應(yīng)的控制字節(jié)來(lái)實(shí)現(xiàn)的。
由于二者在通訊模式、實(shí)現(xiàn)策略上的差異性,二者的數(shù)據(jù)域結(jié)構(gòu)也存在一定的差異,第2、3章節(jié)已詳細(xì)說(shuō)明,此章節(jié)就不再詳述,但是二者基于對(duì)報(bào)文組包、拆包及連接控制的核心思想都是相通的,都是為了實(shí)現(xiàn)多幀通訊的功能。
由于二者數(shù)據(jù)格式定義的差異性,所以二者在最大數(shù)據(jù)傳輸長(zhǎng)度上也不同,其中ISO15765-2的為4095字節(jié),SAE J1939-21的為1785字節(jié)。
為了控制數(shù)據(jù)的發(fā)送速率,留給控制器足夠的處理時(shí)間,防止長(zhǎng)時(shí)間等待,應(yīng)對(duì)總線異常狀況,超時(shí)處理和故障處理策略的定義是非常必要的。二者為了數(shù)據(jù)通訊功能的實(shí)現(xiàn)均提供了完善的超時(shí)功能及故障處理策略。二者在超時(shí)參數(shù)的定義及故障處理策略上根據(jù)自身通訊機(jī)制的差異分別作了詳細(xì)的定義,差異較大。
從二者的差異性可以看出,SAE J1939-21數(shù)據(jù)通訊在通訊模式、實(shí)現(xiàn)策略上更為復(fù)雜,對(duì)于主機(jī)廠、供應(yīng)商等開(kāi)發(fā)應(yīng)用者來(lái)說(shuō)更難理解和應(yīng)用。ISO15765-2定義的數(shù)據(jù)結(jié)構(gòu)上相較更為緊湊,對(duì)數(shù)據(jù)域的利用率也更高,在傳輸同等數(shù)據(jù)量的情況下,通訊效率也更高。ISO15765-2支持的最大數(shù)據(jù)長(zhǎng)度為4095字節(jié),SAE J1939-21為1785字節(jié)。從技術(shù)角度分析,ISO15765-2的數(shù)據(jù)通訊略優(yōu)于SAE J1939-21定義的數(shù)據(jù)通訊。
另外,多幀數(shù)據(jù)通訊一般應(yīng)用于診斷場(chǎng)合,依附于診斷協(xié)議的推廣而被推廣,所以診斷協(xié)議的應(yīng)用推廣狀況代表著兩種多幀數(shù)據(jù)通訊的推廣情況。ISO 15765-2屬于ISO的體系,一般和ISO 11898、ISO 14229等協(xié)議規(guī)范共同組成整車的總線協(xié)議,一般應(yīng)用在乘用車領(lǐng)域。SAEJ1939-21由于屬于SAE J1939系列協(xié)議的體系,所以在SAE J1939通訊協(xié)議的場(chǎng)合中應(yīng)用廣泛,應(yīng)用車型主要包含中大型卡車和客車等。IS0 15765診斷協(xié)議是全球統(tǒng)一診斷協(xié)議IS014229基于CAN總線的具體應(yīng)用,IS0 15765和IS014229的組合形成的診斷協(xié)議標(biāo)準(zhǔn)經(jīng)過(guò)多年的發(fā)展和應(yīng)用已非常完善與成熟,適用于電控單元的在線配置、開(kāi)發(fā)標(biāo)定、售后維修和軟件升級(jí)等,在乘用車及中小型的商用車上得到非常廣泛的應(yīng)用。SAE J1939是美國(guó)汽車工程師協(xié)會(huì)制定的專門針對(duì)重型車應(yīng)用的通訊、診斷協(xié)議,由于SAE J1939起步稍晚,其定義的增強(qiáng)型診斷實(shí)現(xiàn)機(jī)制異常復(fù)雜,尤其是診斷服務(wù)不夠完善,所以若想進(jìn)一步推廣還需做大量的完善工作。
目前無(wú)論從技術(shù)的角度還是從各自所從屬的診斷協(xié)議的推廣狀況來(lái)看,ISO15765-2的多幀數(shù)據(jù)通訊都要優(yōu)于 SAE J1939-21定義的多幀數(shù)據(jù)通訊。所以筆者大膽預(yù)測(cè),未來(lái)ISO15765-2的多幀數(shù)據(jù)通訊憑借自身的技術(shù)優(yōu)勢(shì)及和 ISO 14229、ISO 15765的依附關(guān)系會(huì)進(jìn)一步擴(kuò)大應(yīng)用范圍,包括乘用車,中小型商用車,甚至是采用SAE J1939系統(tǒng)通訊的控制器,SAEJ1939-21多幀數(shù)據(jù)通訊的應(yīng)用范圍可能將進(jìn)一步被蠶食,局限于DM1、DM2(SAE J1939定義的當(dāng)前故障、歷史故障診斷服務(wù))等有限的診斷服務(wù)中。
兩種多幀數(shù)據(jù)多幀數(shù)據(jù)通訊雖在通訊原理、機(jī)制、實(shí)現(xiàn)手段、細(xì)節(jié)等方面存在較大的差異,但是二者基于對(duì)報(bào)文組包、拆包及連接控制的核心思想都是相通的,都是為了實(shí)現(xiàn)多幀通訊的功能。只有充分理解和掌握這些協(xié)議的原理、機(jī)制等,才能更加方便、精準(zhǔn)地指導(dǎo)汽車總線設(shè)計(jì)、驗(yàn)證,了解汽車的故障,準(zhǔn)確快速地分析、解決汽車出現(xiàn)的問(wèn)題。而主機(jī)廠也應(yīng)根據(jù)自身及外界發(fā)展趨勢(shì)合理選擇適合自身的多幀數(shù)據(jù)通訊,通過(guò)長(zhǎng)遠(yuǎn)的平臺(tái)規(guī)劃,以提高整車的系統(tǒng)兼容性。
[1] SAEJ1939-21:DataLinkLayer,2006.
[2] SAEJ1939-71:VehicleApplicationLayer,2010.
[3] SAEJ1939-73:ApplicationLayerDiagnostics,2010.
[4] IS015765-2:Roadvehicles Diagnosticson ControllerArea Networks(CAN),Part2:Networklayerservices,2004.