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