CAN總線(xiàn)中節點(diǎn)ID相同會(huì )怎樣?
CAN-bus網(wǎng)絡(luò )中原則上不允許兩個(gè)節點(diǎn)具有相同的ID段,但如果兩個(gè)節點(diǎn)ID段相同會(huì )怎樣呢?
本文引用地址:http://dyxdggzs.com/article/201709/363785.htm實(shí)驗前,我們首先要對CAN報文的結構組成、仲裁原理有清晰的認識。

一、CAN報文結構
目前使用最廣泛的CAN-bus網(wǎng)絡(luò )標準是V2.0版本,該標準又分為A、B兩部分,它們主要的區別在仲裁區域的ID碼長(cháng)度。其中CAN2.0A(標準幀)為11位ID,CAN2.0B(擴展幀)為29位ID。下表1為CAN報文結構:

表1 CAN報文結構
二、仲裁原理
CAN總線(xiàn)的仲裁是基于“線(xiàn)與原理”,如圖1所示。當個(gè)收發(fā)器同時(shí)發(fā)出不同電平信號時(shí),隱性電平總是被顯性電平覆蓋。CAN控制器在發(fā)送報文的同時(shí)會(huì )監聽(tīng)總線(xiàn)狀態(tài)與自己發(fā)送的電平是否一致,如果不一致發(fā)生在ID段則會(huì )發(fā)生仲裁,如果發(fā)生在其他區域則會(huì )觸發(fā)相應錯誤。

圖1 線(xiàn)“與”示意圖
下面進(jìn)入重點(diǎn),如果兩個(gè)節點(diǎn)ID段相同會(huì )怎樣?我們用兩個(gè)CAN卡 和一臺CANScope開(kāi)始實(shí)驗,CAN卡模擬CAN標準節點(diǎn)收發(fā)報文,CANScope做通信監控,如圖2所示。(注:CAN卡為USB轉CAN工具,CANScope為CAN總線(xiàn)分析儀,產(chǎn)品詳見(jiàn)ZLG致遠電子官網(wǎng))

圖2 實(shí)驗平臺搭建
三、實(shí)驗一“ID段相同但數據不同”
使用一個(gè)CAN卡發(fā)送ID為000H數據為01020304050607H的CAN幀,使用另一個(gè)CAN卡發(fā)送ID為000H數據為02020304050607H的CAN幀。CANScope監聽(tīng)的數據如圖3所示,可以觀(guān)察到有大量的數據場(chǎng)填充錯誤。

圖3 數據場(chǎng)填充錯誤
為什么會(huì )這樣呢?我們首先分別獲取兩個(gè)CAN卡發(fā)送報文對應的波形,如圖4。因為兩針報文同為標準數據幀,且每幀包含8個(gè)字節數據,所以?xún)蓭瑘笪膶牟ㄐ卧贗D段、RTR、IDE、R0以及DLC段完全一致。因此,仲裁作用失效,兩節點(diǎn)都認為自己獲得了優(yōu)先權,繼續發(fā)送數據。

圖4 報文對應波形對比
現在我們聚焦數據段,第一個(gè)字節數據相同,均為為00H;第二個(gè)字節數據不同,分別為01H、02H。圖5箭頭標示處可以看到兩者對應位的邏輯分別為0和1。前面我們提到CAN節點(diǎn)在發(fā)送報文的同時(shí)會(huì )檢測總線(xiàn)電平是否與自己發(fā)送的電平一致,若不一致發(fā)生在非仲裁區域則觸發(fā)相應錯誤,因此若這兩幀報文同時(shí)發(fā)送到總線(xiàn)上必將發(fā)生位發(fā)送錯誤。因為位發(fā)送錯誤會(huì )引起節點(diǎn)發(fā)送違反填充規則的6個(gè)顯性位(主動(dòng)錯誤破壞該幀數據),故出現數據場(chǎng)填充錯誤,如圖3。

圖5 數據場(chǎng)沖突
四、實(shí)驗二“ID相同數據也相同”
同時(shí)使用兩個(gè)CAN卡發(fā)送ID為000H數據為01020304050607H的CAN幀,CANScope做通信監控。首先,我們不勾選“總線(xiàn)應答”選項,使CANScope工作在僅監聽(tīng)模式。實(shí)驗結果如圖6所示,出現的是應答定界符格式錯誤。

圖6 應答界定符格式錯誤
為什么會(huì )發(fā)生這種錯誤呢?發(fā)送報文的節點(diǎn)會(huì )在A(yíng)CK段發(fā)送兩個(gè)隱性位,若在第一個(gè)位期間接收到顯性電平則認為該幀被正確接收。由于仲裁段相同時(shí)兩節點(diǎn)都認為自己取得仲裁權,在A(yíng)CK段等待應答,但該網(wǎng)絡(luò )中僅存在兩個(gè)節點(diǎn),因此在A(yíng)CK段不能收到應答,進(jìn)而發(fā)生應答定界符錯誤。簡(jiǎn)單說(shuō)來(lái)這種情形就類(lèi)似于總線(xiàn)中只有一個(gè)節點(diǎn)將不能實(shí)現數據發(fā)送。圖7是在A(yíng)CK段有無(wú)應答時(shí)的波形對比。

圖7 ACK應答
我們勾選上總線(xiàn)應答,再次開(kāi)始實(shí)驗(此時(shí)總線(xiàn)中相當于有3個(gè)節點(diǎn))。這時(shí)如圖8所示,總線(xiàn)數據收發(fā)正常。

圖8 啟動(dòng)總線(xiàn)應答
總結:當兩節點(diǎn)同時(shí)發(fā)送ID相同數據不同的報文時(shí),將發(fā)生數據場(chǎng)填充錯誤;當兩節點(diǎn)同時(shí)發(fā)送ID相同數據也相同的報文時(shí),若有其他節點(diǎn)應答則不發(fā)生錯誤,若無(wú)其他節點(diǎn)應答則發(fā)生應答錯誤。因此,我們在設計CAN總線(xiàn)時(shí)應避免ID段相同的情況出現。
評論