CAN報文定義
CAN報文是指發(fā)送單元向接受單元傳送數(shù)據(jù)的幀。我們通常所說的CAN報文是指在CAN線(內(nèi)部CAN、整車CAN、充電CAN)上利用ECU和CAN卡接收到的十六進制報文。
CAN編碼格式(Intel、Motorola)
CAN總線數(shù)據(jù)傳輸規(guī)則
對于單個Byte,CAN總線在進行數(shù)據(jù)傳輸時,首先傳輸一個字節(jié)的高位(MSB),最后傳輸該字節(jié)的低位(LSB)。
一般情況下,主機廠在定義CAN總線信號的時候,都會明確定義字節(jié)的發(fā)送順序,總共有兩種順序:1.首先發(fā)送byte0(LSB),然后byte1,byte2,…,最后byte7(MSB)。
2.首先發(fā)送byte7(MSB),然后byte6,byte5,…,最后byte0(LSB)。
其中前者發(fā)送順序(先LSB,后MSB)是目前主機廠的主流。
下面以CAN總線報文的發(fā)送順序為首先發(fā)送LSB,最后發(fā)送MSB的方式為前提,介紹Intel格式和Motorola格式這兩種編碼方式的不同。
Intel格式編碼
當(dāng)一個信號的數(shù)據(jù)長度不超過1 Byte,并且信號在一個字節(jié)內(nèi)實現(xiàn)時,該信號的高位(S_msb)將被放在該字節(jié)的高位,信號的低位(S_lsb)將被放在該字節(jié)的低位。
當(dāng)一個信號的數(shù)據(jù)長度超過1 Byte或者數(shù)據(jù)長度不超過1 Byte,但是采用跨字節(jié)的方式實現(xiàn)時,該信號的高位(S_msb)將被放在高字節(jié)(MSB)的高位,信號的低位(S_lsb)將被放在低字節(jié)(LSB)的低位,這樣信號的起始位就是低字節(jié)的低位。
Motorola格式編碼
當(dāng)一個信號的數(shù)據(jù)長度不超過1 Byte并且信號在一個字節(jié)內(nèi)實現(xiàn)時,信號的高位(S_msb)將被放在該字節(jié)的高位,信號的低位(S_lsb)將被放在該字節(jié)的低位,這樣,信號的起始位就是該字節(jié)的低位。
當(dāng)一個信號的數(shù)據(jù)長度超過1 Byte或者數(shù)據(jù)長度不超過一個字節(jié)但是采用跨字節(jié)方式實現(xiàn)時,該信號的高位(S_msb)將被放在低字節(jié)(MSB)的高位,信號的低位(S_lsb)將被放在高字節(jié)(LSB)的低位,這樣信號的起始位就是高字節(jié)的低位。
注意
當(dāng)一個信號的數(shù)據(jù)長度不超過1 Byte時,Intel和Motorola兩種格式的編碼結(jié)果完全一致,但是當(dāng)數(shù)據(jù)長度超過1 Byte時,兩者的編碼結(jié)果出現(xiàn)了明顯的不同。
CAN協(xié)議中CAN報文種類
報文傳輸過程中有:數(shù)據(jù)幀、遠(yuǎn)程幀、錯誤幀、過載幀和幀間隔。
CAN報文的組成
通常接收到的CAN報文由很多部分(圖1)組成,解析報文時用到的主要是幀ID和數(shù)據(jù)兩部分。
幀ID的組成
接收到的十六進制的ID實際上是由 29 位標(biāo)識符轉(zhuǎn)換而來,目前大多數(shù)的通信協(xié)議中都直接給出了相應(yīng)的幀ID,不需要換算。如表 1 所示。
表1中,P為優(yōu)先級,有3位,可以有8個優(yōu)先級( 0 ~ 7 );R為保留位,有 1位,固定為0 ;DP為數(shù)據(jù)頁,有1位,固定為0;PF為報文的代碼,有8 位;PS為報文的目標(biāo)地址(也就是報文的接收方),有8位;SA為報文的源地址(也就是報文的接收方),有8位。
數(shù)據(jù)段的組成
數(shù)據(jù)段一般由1 ~ 8個字節(jié)(Byte)組成,來代表通信協(xié)議中相應(yīng)的含義。每個字節(jié)有2個字符,分為高4位和低4位。有的數(shù)據(jù)需要相鄰的2個字節(jié)組合才能表示,則需要分為高字節(jié)和低字節(jié)。
例如 ,通信協(xié)議中需要的報文(ID:0000060B ): 0000060B 57 4e 01 7d 00 6d 11 00 。
第 1 個字節(jié)57中的5為高 4 位,7為低 4 位。第 1 、 2字節(jié)表示橫向距離,而且注明Byte 1 為低字節(jié),Byte 2 為高字節(jié),那么解析時就應(yīng)該為: 4e57。
CAN報文的解析
根據(jù)需要收到CAN報文之后,需要根據(jù)具體的通信協(xié)議解析,然后分析解析出的數(shù)據(jù)是否正確。下面進行報文實例解析。數(shù)據(jù)類型定義如表 所示。
解析實例:
我們看到有8個signal。分別是ID、縱向距離、橫向距離、縱向速度、橫向速度、動態(tài)屬性、RCS、class(在這里沒用)。
拿縱向距離跟橫向距離解釋一下:
目標(biāo)縱向距離:
這個signal有13個位組成,字節(jié)1為 0x4E*32的意思是向左移動5位,(2的5次冪是32),0xc4<<3是右移三位,跟上面的字節(jié)對齊,相加形成一個13位的信號。
目標(biāo)橫向距離:文章來源:http://www.zghlxwxcb.cn/news/detail-401194.html
0xc4與上0x70是保留后三位。乘以256(2的8次冪是256)是左移8位,給下面的8為字節(jié)留地方(補0)。文章來源地址http://www.zghlxwxcb.cn/news/detail-401194.html
到了這里,關(guān)于CAN報文解析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!