CAN通信矩陣(CAN Communication Matrix)通常由整車廠完成定義,車輛網(wǎng)絡(luò)中的各個節(jié)點需要遵循該通訊矩陣才能完成信息的交互和共享。
我們知道CAN總線是一種通信形式,ISO 11898協(xié)議僅僅規(guī)定了數(shù)據(jù)鏈路層和物理層,也就是說傳什么ID、傳什么數(shù)據(jù)是沒有定義的,這留給了大家很多遐想空間。對于乘用車來說,滿足UDS和尾氣排放協(xié)議之后,還剩余了絕大部分的ID段。這些ID段由主機廠自主來進行分配,分配好之后會形成一個.xls格式的表格。有了CAN通信矩陣,開發(fā)人員就知道他設(shè)計的零部件應(yīng)該接收什么ID的數(shù)據(jù),需要發(fā)出什么ID的數(shù)據(jù)。
2.如何閱讀CAN通信矩陣
下面我們詳細(xì)介紹下怎么閱讀一份通信矩陣。
信號名稱:一般是以發(fā)送節(jié)點的名字開頭,“_”后面是具體指代的內(nèi)容。如BMS_GeneralStatus。
信號長度:該信號的長度,單位是bit,位。
精度/偏移量:描述信號值如何轉(zhuǎn)變成信號物理值。比如精度是2,偏移量是5,那么信號的真實物理值 = 信號值 * 2 + 5。
物理值范圍:經(jīng)過物理值轉(zhuǎn)換后的最大最小值。
其他的一些矩陣中還會有這樣的表述。
起始字節(jié):起始位所在的字節(jié)序號。Byte0-Byte7。
起始位:信號LSB(least significant bit)所在的位置。通常這個位置是按照下面這個圖來說明的。
CAN矩陣的核心圖
信號類型:Boolean 還是 Unsigned。
以上是CAN數(shù)據(jù)矩陣的基本內(nèi)容??梢钥闯鰜?,如何通過起始字節(jié)、起始位、數(shù)據(jù)長度,將數(shù)據(jù)矩陣中的內(nèi)容對應(yīng)到這64個小格子中是理解CAN數(shù)據(jù)矩陣的關(guān)鍵。
3.如何填格子
我們可以用Vector的CAN db++打開ZLG送的j1939.dbc文件。我們在Signals和Layout面板中看到,對于EEC1這個Message來說,它有8個Signal,填充時是從右向左填充的,比方說EngStarterMode這個信號,初始是第48位,長度是4,它的LSB自然就應(yīng)該在Byte6的第48個位,之后向左填充,MSB是第51位。大家自行填充一下。
j1939.dbc
j1939.dbc矩陣中的EEC1信號
下面說下EngSpeed這個奇葩信號,它跨行了,即跨字節(jié)了,這就產(chǎn)生了先后的問題。
注意我們填格子的方式分為Intel和Motorola兩種。如果你的Signals都沒有跨字節(jié)的問題,那么Intel和Motorola格式出來的效果是一樣的。當(dāng)然這不可能,你無法確保不跨字節(jié)。
Intel格式也即小端,MSB存放在高字節(jié)單元,反映到矩陣圖中就是以起始位為原點,自上而下填充。
Intel格式,MSB在LSB下面
Motorola格式也即大端,MSB存放在低字節(jié)單元,反映到矩陣圖中就是以起始位為原點,自下而上填充。
Motorola格式,MSB在LSB上面
New_Signal_5自下而上填充,Motorola
具體采用哪種格式,聽主機廠的,這個無絕對,兩種格式都需要理解。但從經(jīng)驗上來看以Motorola格式為主。我們回看下EngSpeed這個信號,起始位是24bit,先填充Byte3,之后向下填充Byte4,MSB在39bit上。因此是Intel格式。
EEC1中的EngSpeed是Intel格式,Byte3是低有效,Byte4是高有效
名詞解釋:什么是信號的高位?什么是信號的低位?什么是信號的起始位?
信號的高位(most significant bit),即最能表達信號特性的因子。比如轉(zhuǎn)速2000rpm,0x7D0,即011111010000b。最左側(cè)的位,數(shù)量級最大,牽一發(fā)動全身,即高位。
信號的低位(least significant bit),即最不能表達信號特性的因子。剛才轉(zhuǎn)速中,最右側(cè)的0,即低位。就好像老板說給你每個月漲薪5元,你毫不在乎。
信號的起始位其實就是信號的最低位。主機廠在定義整車CAN總線通信矩陣時,每一個信號都從其最低位開始填寫。
4.報文封裝原則
1.同一個報文的所有信號須由同一個節(jié)點提供。
2.同一個報文所有信號的發(fā)送時機盡可能相同。
3.小于或等于8位的信號,不應(yīng)跨越字節(jié)邊界。
不大于8位,不應(yīng)跨越字節(jié)邊界
4.小于或等于16位的信號,不應(yīng)跨越字邊界。
5.信號從每個字節(jié)的起始位開始排列。
要從每個字節(jié)的起始位開始排列
6.信號排列應(yīng)當(dāng)緊湊。
編輯:黃飛
?
評論
查看更多