北京赛车挂机方案|北京赛车挂机方案
datasheet

技術文章—淺談CAN發送仲裁機制

2019-04-03來源: 互聯網關鍵字:CAN

隨著工業技術不斷發展,CAN總線已廣泛應用于,車輛、航空、醫療等高安全要求領域。高頻發送CAN報文也成為安全測試的必要組成部分。在信號正常的網絡上高負載率發送測試時,總線上偶然會出現許多意想不到的問題,例如出現大量錯誤報文、被測設備報文周期出現異常、甚至總線鎖死等。這個時候我們則需要考慮一下CAN網絡上的仲裁是否發生了異常。

 

首先我們來了解一下CAN總線仲裁機制。

 

一、 CAN總線仲裁機制

 

CAN總線作為現場總線,每個節點可以同時偵測到網絡上正在發送的數據,當總線空閑時每個節點均可以發起自身報文發送。如果多個節點同時發起報文發送請求,由哪個節點占用總線就是仲裁機制的主要用途。

 

首先CAN總線物理層通常是雙絞線。當邏輯“1” 被寫進總線時,CANH和CANL的電平都是2.5V,這種狀態并被定義為“隱性”位;當邏輯“0”被寫進總線時CANH會上拉到為5V,CANL被下拉到地0V,這種狀態被定義為“顯性”位。如果顯性位和隱性位被不同的節點同時寫進總線時,總線會表現為“顯性”位。“顯性位覆蓋隱性位”是CAN總線沖突檢測的基礎。

 

當節點開始傳送它們各自的報文時,如果一個節點寫進了隱性位而讀回顯性位,節點會知道另一個高優先權節點正在占用總線,該節點會停止傳送報文并繼續接收總線報文。這種技術叫做“非破壞性逐位”仲裁。

 

說明: 圖1.png

 

圖1 CAN仲裁機制

 

如圖1所示,在多個節點同時發送報文時,首次出現不同,且發送顯性位的節點占用總線。由于CAN報文首先發送的為ID段且顯性位為邏輯“0”,因此ID越小該幀的優先級越高。

 

二、 仲裁場

 

似乎按照“非破壞性逐位”仲裁機制,就可以從ID一直仲裁到CRC段,可是CAN傳輸標準并不是這樣, CAN標準要求,仲裁僅從基本ID第一位開始,到標準幀的IDE位或擴展幀的RTR位結束。這個區域被定義為仲裁場。如圖2所示。

 

說明: 圖2.png

 

圖2 CAN仲裁場區域

 

依據仲裁場范圍,CAN總線仲裁流程如圖3所示。

 

說明: E:\基礎儀器\技術支持\CANDT\share\技術支持\CAN一致性\微信文章\CANScope\淺談CAN發送仲裁機制\圖3.png

 

圖3 CAN仲裁場區域

 

三、 仲裁異常的影響

 

在CAN仲裁機制中,理論上仲裁必須在仲裁場完成。不過CAN總線配置錯誤或者測試時發送CAN幀疏忽,也存在仲裁場數據完全相同的情況,在這樣的情況下會對總線造成什么后果呢?下面我們按照CAN通訊原則分析一下仲裁異常時CAN總線可能出現什么表現。

 

1、仲裁場后數據傳輸不一致

 

在仲裁場結束后CAN節點需要對發送的數據進行一致性對比,如果發送的數據與讀取回得數據不一致,收發器則需要發送CAN錯誤幀,以通知總線各個節點自身發送數據錯誤,停止接收并快速進入總線空閑,以便再次數據發送。

 

說明: 圖3.png

 

圖4 仲裁場后數據傳輸不一致

 

如圖4所示當兩個節點發送的仲裁場相同,在仲裁場后DLC段發生數據不同情況。發送單元1發現自己本身需要發送的隱性電平而收到的是顯性電平,識別到數據不一致現象后立即發出錯誤幀信息(6個顯性位)。發送單元1發送錯誤信息過程中,發送單元2也將捕獲到自己某個隱性位發送與收取的不一致,從而也發出主動錯誤幀。最終造成類似圖4總線電平特征。

 

需要注意,大部分CAN收發器在發送過程中因為沒有占用到總線或者發送失敗,會在下一次總線空閑到來時再次占用總線發送相同的數據。因此當出現仲裁場數據相同,后續數據不同時,有極大的可能造成總線錯誤后兩個節點再次同時占用總線,再次進行仲裁并總線錯誤,甚至反復進入錯誤造成網絡鎖死等嚴重情況。

 

2、仲裁場后數據相同

 

如果兩個CAN節點,發送CAN幀完全相同,兩個發送單元均認為占用了總線,并成功發送完數據。雖然數據發送完成,不過需要注意CAN節點在發送數據幀時,是不能夠對自己發送的CAN幀進行應答,這個時候則會出現不同的情況。

 

a、不存在多余的應答節點

 

說明: 圖4.png

 

圖5 傳輸數據相同無應答

 

當所有的總線節點發送的數據均相同,那么所有節點認為自己成功發送了數據,而等待總線其他節點應答。此時發送節點會因為沒有得到應答而被CAN節點識別為發送失敗,從而重新占用總線再次發送。

 

(注:此現象與應用層有很大的關系,節點也可以被識別為發送成功而不再重發。)

 

b、存在多余應答節點

 

說明: 圖5.png

 

圖6 傳輸數據相同有應答

 

在多個節點同時發送相同數據到總線,并存在其他節點不處于發送狀態,其他節點則會對總線進行應答,發送節點會認為CAN數據成功發送。從而隱藏了這種仲裁異常現象。

 

三、仲裁的其他特性與測試建議

 

1、CAN總線中的節點在仲裁失敗、發送失敗或者請求發送時總線被其他節點占用,一般會在下一次空閑到來時請求發送,總線負載率越高,遇到上面的情況概率也就越大,因此仲裁事件的發生常出現在高負載率的總線環境下,如果可以控制總線負載率在合理范圍內,可以大大減少仲裁事件的發生。

 

2、每個CAN節點在發送報文時,顯性電平都存在一定的驅動能力,在仲裁事件發生時,由于多個節點同時驅動總線,會造成CAN總線顯性電平電壓與平時高一點(驅動點越多,電壓越高)。同時由于每個節點同步性可能存在微小的差異,其脈寬也可能發生改變。

 

3、當需要測試指定節點長時間占用不到總線的表現時,應該使用高優先級測試報文進行高負載率發送(盡可能達到100%)。高優先級報文一直占用總線,低優先級報文永遠占用不到總線。當需要部分允許部分禁止,應設置測試報文優先級在允許報文與不允許報文之間。

 

4、如果需要測試指定節點高負載率情況下報文周期特性,發送的報文優先級不能高于被測節點周期特性報文的優先級。如果被測節點滿足周期性,周期到來后的第一個空閑后報文發送就可以仲裁成功將該周期報文成功發送。

 

5、在某些CAN高層總線協議中,存在可變優先級字段,(依據請求發送等待時間變化優先級)。如果需要驗證報文優先級變化特性,所發送的報文優先級,需要使用高于初次請求優先級,低于最高優先級的報文。

 

CAN總線中,無論節點還是測試設備發送報文仲裁場應該不同,這樣可以避免因仲裁異常造成的錯誤出現。同樣在CAN測試時,應依據測試目的選擇合理的CAN報文ID,避免仲裁特性影響測試效果。

 


關鍵字:CAN

編輯:muyan 引用地址:http://www.bp0.com.cn/qcdz/2019/ic-news040325475.html
本網站轉載的所有的文章、圖片、音頻視頻文件等資料的版權歸版權所有人所有,本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如果本網所選內容的文章作者及編輯認為其作品不宜公開自由傳播,或不應無償使用,請及時通過電子郵件或電話通知我們,以迅速采取適當措施,避免給雙方造成不必要的經濟損失。

上一篇:沉寂之聲——揭秘電動車虛擬引擎聲響系統
下一篇:Denso為下一代汽車選用賽普拉斯Semper無故障存儲器

關注eeworld公眾號 快捷獲取更多信息
關注eeworld公眾號
快捷獲取更多信息
關注eeworld服務號 享受更多官方福利
關注eeworld服務號
享受更多官方福利

推薦閱讀

CAN通信波特率與每秒收發幀數

波特率:上兩圖來自STM32F4XX中文參考手冊波特率與幀時間計算
發表于 2019-04-12
CAN通信波特率與每秒收發幀數

STM32的CAN總線使用

本次調試使用的是珠海鼎芯科技(D-Chip)的STM32核心板。這塊核心板上包含了一個CAN總線驅動器。可以很方便的同時與多個種工業設備連接通訊。STM32處理器的CAN總線有多種工作模式,本次測試的是正常模式。要在正常模式下使用首先需要初始化寄存器和使能相關的功能部件。第一步是初始化GPIO和時鐘,STM32F103C的CAN總線GPIO是GPIOA_PIN_11和GPIOA_PIN_12。RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能PORTA時鐘                
發表于 2019-04-12

使用STM32F1xx_HAL庫實現CAN通信的問題

硬件平臺:處理器為STM32F103R8,板子為自設計電路板,數碼管顯示+CAN通信。軟件開發平臺:Keil V5操作系統:FreeRTOS問題描述:使用HAL硬件庫實現CAN通信時,CAN中斷無法進入,不能夠使用中斷方式進行數據的接收。CAN的發送是沒有問題,寄存器也接收到了響應的數據,就是中斷沒有被觸發。研究了一天沒有搞定,現把問題放下,先改用輪訓讀取的方式實現。主要的代碼如下:1、接收中斷/*** @brief  This function handles CAN1 RX0 interrupt request.* @param  None* @retval None*/void
發表于 2019-04-12

cubemx+stm32f407+雙Can通信

最近幾天在用CUBEMX實現stm32f407zgt6的雙can通訊,中間走了一些彎路,記錄下來供需要的人參考借鑒,希望可以幫助大家節省開發周期。準備工作:一、硬件使用啟明高配版開發板,因為啟明的板子上有兩個can可以使用,在調試之前,需要先將can1_H連接can2_H,can1_L連接can2_L,并且需要將P15和P21跳線帽連接好。二、軟件工具1.我使用的軟件版本是CUBEMX4.27,使用的庫為fw_f4_v1210。2.keil版本程序編寫can在網上有很多介紹,可以在網上搜索一些基礎介紹,之前調試can主要是卡在了新的庫包里對濾波器以及FIFO和回調函數的設置上出現一些問題。一、cubemx設置1.Pinout部分
發表于 2019-04-12
cubemx+stm32f407+雙Can通信

stm32之CAN發送、接收詳解

CAN接收報文并過濾之標識符過濾:(重點、難點)  在CAN協議里,報文的標識符不代表節點的地址,而是跟報文的內容相關的。因此,發送者以廣播的形式把報文發送給所有的接收者。節點在接收報文時-根據標識符的值-決定軟件是否需要該報文;如果需要,就拷貝到SRAM里;如果不需要,報文就被丟棄且無需軟件的干預。  為滿足這一需求,bxCAN為應用程序提供了14個位寬可變的、可配置的過濾器組(13~0),以便只接收那些軟件需要的報文。硬件過濾的做法節省了CPU開銷,否則就必須由軟件過濾從而占用一定的CPU開銷。每個過濾器組x由2個32位寄存器,CAN_FxR0和CAN_FxR1組成。這兩個寄存器用途在下面有大用處;可變的位寬:   每個過濾器
發表于 2019-04-12
stm32之CAN發送、接收詳解

小廣播

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號 電信業務審批[2006]字第258號函 京公海網安備110108001534 Copyright ? 2005-2019 EEWORLD.com.cn, Inc. All rights reserved
北京赛车挂机方案