[CAN Bus]有關 CAN 總線 通訊可靠性的 N個問題

目錄

 

第1問:總線中有若干節點,若某節點發送一幀報文且被ACK,那麼能保證總線上所有節點都收到了這幀報文嗎?

第2問:當總線中一節點接收到一幀報文,且這幀的仲裁域(ID)與接收節點的過濾器不匹配。也就是說接收節點並不會將這幀數據放入接收fifo或者rx mail box。那麼這個接收節點會在這幀的ACK slot發送顯性位嗎?

第3問:設置爲只聽模式(listening only or silent mode)的節點,在接收到報文後,會發送ACK或錯誤幀嗎?

第4問:如何在CAN總線中跑滿理論最大負載?


第1問:總線中有若干節點,若某節點發送一幀報文且被ACK,那麼能保證總線上所有節點都收到了這幀報文嗎?

答:不能,只能保證至少一個節點應答了這幀報文。

 

第2問:當總線中一節點接收到一幀報文,且這幀的仲裁域(ID)與接收節點的過濾器不匹配。也就是說接收節點並不會將這幀數據放入接收fifo或者rx mail box。那麼這個接收節點會在這幀的ACK slot發送顯性位嗎?

答:會的,只要接收節點計算這幀crc正確,那就會發送ACK的,即使軟件層面不會收到這一幀。

 

PS: 第1問和第2問可以說明,在CAN總線上發送報文,沒有辦法在鏈路層保證報文一定被所有節點可靠接收,必須通過上層協議設計應答機制。

 

第3問:設置爲只聽模式(listening only or silent mode)的節點,在接收到報文後,會發送ACK或錯誤幀嗎?

答:不會。(理論上,只聽模式下CAN控制器可以認爲它的TX與收發器的TX已經被斷開,只有RX可以接收總線上的信號)

NOTE:作爲監控記錄或抓包設備(CAN分析儀記錄儀等)的節點一定要處於只聽模式,否則會引入監控設備的發送信號(ACK或錯誤幀等)。

 

第4問:如何在CAN總線中跑滿理論最大負載?

答:利用CAN控制器發送的重發機制。除了發送節點以外,將所有其他節點設置爲只聽模式。再用發送節點發送一幀遠程幀(遠程幀最短,每秒發送幀數可以達到最大),將不會有節點應答ACK,CAN控制器將啓用重發機制,在鏈路層持續重發該報文。每秒報文數可以達到該波特率下最大值。(硬件重發機制,相鄰報文波形之間幾乎不存在延時)

PS: 可以用這個方式測試CAN設備的最大接收能力。在1M波特率下大部分USB-CAN設備在這種負載下都會丟包,可以用邏輯分析儀進行抓波形並統計每秒實際發生的報文數量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章