昨天,一位關系比較好的前公司同事打來電話尋求幫助,他在解讀整車廠(東風汽車)發來的CAN協議時遇到了困擾:完全看不懂——因為他以前接觸的是CAN擴展幀協議。鑒于經常有朋友也遇到相似的問題,現在就這個問題我有針對性的解釋一下。
一、CAN通信的基礎知識
(1)為什麼要采用CAN通信:CAN通信因為其通信速率快,抗幹擾性好,目前廣泛應用于車載電子設備上,比如電動汽車及燃油汽車等。CAN物理接口兼容規範2.0A和2.0B(主動),位速率高達1兆位/秒。它可以接收和發送11位标識符的标準幀,也可以接收和發送29位标識符的擴展幀。
(2)标準幀和擴展幀的區别:其一,擴展幀的仲裁域有29位,可以出現2^29種報文,幀ID的範圍是0000 0000-1FFF FFFF;标準幀的仲裁域是連續的11位,可以出現2^11種報文,幀ID的範圍是000-7FF;其二,控制幀中的DLC(數據長度)完全相同,但保留位不同,标準幀IDE、R0,擴展幀R1、R0,必須以顯性電平發送(由數據鍊路層操作)。因此,CAN标準幀和擴展幀除了在幀ID的長度上不一樣,其它的基本上一模一樣。
(3)Intel格式與Motorola格式的區别:CAN報文中字節和數據位的編碼及擺放是有順序的,分為Intel與Motorola兩種格式。當一個信号的數據長度不超過 1 個字節(8 位)時,Intel 與 Motorola 兩種格式的編碼結果沒有什麼不同,完全一樣;而當信号的數據長度超過 1 個字節(8 位)時,兩者的編碼結果出現了明顯的不同,簡單來說就是:Intel格式高字節在後,低字節在前;而Motorola格式則相反,高字節在前,低字節在後,如圖1所示。
圖1 采用Intel格式編碼十六進制數值“0x36A5”示例
圖2 采用Motorola格式編碼十六進制數值“0x36A5”示例
(4)關于報文解析中涉及到的分辨率(或稱精度)和偏移量,如何轉換為物理值(或實際值):換算關系為——物理值(實際值)=總線值*分辨率 偏移量。示例如下:
圖3 報文解析中分辨率和偏移量的換算關系
(5)CAN報文ID标識符的分配表及說明
(下表可以向左或向右拖拉,以顯示全部信息)
IDENTIFIER 11BITS(标準幀隻有此11位) |
SRR |
IDE |
IDENTIFIER EXTENSION 18BITS(擴展幀另外包含此18位) | |||||||||||||||||||||||||||
R |
DP |
PDU FORMAT(PF) |
SRR |
IDE |
PF |
PDU SPECIFIC(PS) |
SOURCE ADDRESS(SA) | |||||||||||||||||||||||
3 |
2 |
1 |
1 |
1 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 | ||
此3位代表優先級,可以有8 個優先級 |
一般固定為0 |
固定為0 |
PF為報文的代碼 (标準幀隻有6位) |
PF為報文的代碼 (擴展幀還要包含這2位,共有8位) |
PS為發送此報文去的目标地址 |
SA為發送此報文的源地址 |
顯而易見,标準幀隻有11位,而擴展幀擴展了18位,共有29位标識符。
二、解疑答惑
學習了解了上面(1)到(5)的基礎知識,我們再來看一下東風汽車公司某一款車型的整車CAN标準幀協議,截取一段如下圖4所示(為了顯示清晰,分為2段截取):
圖4 截取報文段1
圖4 截取報文段2
整車上通信互聯的控制器有很多,比如VCU、MCU、TBOX、BMS等等,我上面展開的是BMS對OBC的報文幀(BMS_OBC),解析如下:
1、首先,可以看出該幀報文(BMS_OBC)是由BMS發給OBC的,“S”代表英文send,“r”代表英文“receive”,幀ID為0x330,發送周期為100ms,包含8個字節的有效數據,數據編碼格式采用Motorola格式;
圖5 CAN報文收發關系
2、該幀報文包含有4個有效物理量,分别是:BMS_最高允許充電端電壓、BMS_最高允許充電電流、BMS_充電機使能控制、BMS_充電樁類型;
3、我先解析“BMS_最高允許充電端電壓”這個物理量,這個物理量信号長度(Bit Length)為16Bit,占用兩個字節,起始字節(Start Byte)是1,即從第1字節到0字節;該字節為無符号數(Unsigned),分辨率(Resolution)為0.1,偏移量(Offset)為0,它的實際取值範圍是從0—750,單位為“V”,總線上發送的十六進制數值範圍為0x0—0x1D47,如果接收到數值為0xFFFF就代表數值無效;
4、ID标識符0x330采用11位二進制可表示為:011 0011 0000,根據上節标準幀ID分配表套用可知其代表含義:優先級為3,報文代碼(報文名)PF為0x30;
5、假如接收到的報文為:
圖6 模拟CAN報文
那麼,它代表的物理量“BMS_最高允許充電端電壓”, 其數值=0x1A90 * 0.1 0,轉換為十進制等于680V,即BMS最高允許充電端電壓為680V,其餘物理量以此類推可知,BMS_最高允許充電電流為56.2A,充電機關閉輸出,BMS處于非充電狀态。
現在,我們可以将該幀報文換成另一種格式進行表述:
圖7 報文幀ID-0x330另一種通俗表述方式
如上圖這樣表述,相信我那位朋友就一定能夠看懂了,大家看懂了嗎?
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!