前面一個章節中我們和大家一起學習了CAN的物理層和鏈路層的一致性測試項,本章節我們將和大家一起了解CAN的應用層一致性測試。
應用層一致性測試
該測試項主要為了驗證 ECU 在網絡中通信的完整性,一般還包括上層應用層協議的測試,網絡管理功能的測試以及故障診斷等方面。
1.1 發送報文測試
報文的發送一般分為周期性的、緊急事件觸發型的以及軟件使能型,周期性的報文需要測驗周期時長的偏差是否滿足規約,另外 2 種類型的報文需要在干擾條件下進行看是否會造成發送失敗情況。一般以固定 ID 發送至 CAN 工具(一個 CAN 網絡至少需要有 2 個節點),通過上位機的時間戳功能查驗。
報文發送周期測試主要是測試 DUT 期性報文的間隔時間是否小于允許誤差。在DS301通訊規范中,要求由測試設備觸發 DUT 進入周期性發送狀態,測試設備接收 1 分鐘報文后,進行統計,查看是否有間隔超過 20% 的誤差的報文。
另外,一般需要 CAN 具備自動重發功能,可以通過 CAN_MCR.AEN 位實現,官方庫例程中默認不使能 CAN_MCR.AEN位。
在發送時還有一點需要注意,FlexCAN具有接收自己發出的報文功能,且庫例程中是默認開啟該功能的,具體可參見 CAN_CTRL1.SRXDIS 寄存器描述,視情況決定是否禁止啟用該功能。
1.2 CAN_H/L 對電源/對地短路容錯性測試
測試 ECU 在不同錯誤狀態下的容錯性能,看錯誤條件解除后是否能夠自動恢復通訊。一般測試時需要使 ECU 處于周期性發送報文的狀態,且 CAN_H 或者 CAN_L 對電源/對地短路和自己與總線斷路的維持時間要超過 1 min 鐘保證錯誤的積累數致使 ECU 處于被動錯誤狀態。
依據 GMW3122 定義,可分為7 種物理錯誤類型,包括地線漂移、地線丟失、電源丟失、CAN 線中斷、CAN 線各短接到地、CAN 線各短接到電源、CAN 線短路等錯誤狀態。如果恢復后,都可以恢復通訊,則通過測試。
實際測試發現,這幾種短路和斷路條件只會使 FlexCAN 的 Tx error 計數器增加到超過 127 ,進入被動錯誤狀態而不會發生 Busoff ,期間會一直嘗試重發,在恢復總線正常后,計數器的值會逐一遞減同時由于能夠收到正確的 ACK 響應而恢復正常通訊了,恢復的時長也符合標準。下圖展示的是 2s 周期發送報文直到恢復正常通訊的實測圖:
CAN_H 與 CAN_L 短接會導致 FlexCAN 進入 Busoff 狀態,由于官方庫例程中默認設置開啟了自動從總線關閉狀態中恢復的功能,所以在解除總線短路后的一段時間內,ECU 重新恢復正常通訊,自動恢復時長 = 128 x 11 x 位時間(即檢測到 128次11個連續空閑狀態位電平則恢復,符合 CAN2.0B 標準)。
1.3 BusOff快恢復/慢恢復策略測試
當 CAN 通信出現故障時,CAN 控制器會讓故障節點從主動錯誤狀態進入被動錯誤狀態,甚至進入總線關閉(BusOff)狀態,使故障節點脫離總線的通信,使其不影響正常節點的通信,但該控制方案將導致在系統重新上電之前,進入總線關閉狀態的節點會持續無法與其他節點做數據的交互,如若節點只是暫時的故障,那讓節點實現自恢復的功能,則是更為上乘的控制方法。所以 CAN 總線設計規范對于 CAN 節點的 BusOff 自恢復方式做了嚴格的規定,充分考慮了偶發故障與持續故障的處理。
為了避免某個設備因為自身原因(例如硬件損壞)導致無法正常收發數據而不斷地破壞數據幀,從而影響其他正常節點通訊,CAN-bus規范中規定每個CAN控制器都有一個發送錯誤計數器和一個接收錯誤計數器。根據計數值不同CAN節點會處于不同的設備狀態。根據計數值的變化進行狀態轉換,狀態轉換如下圖所示:
接收、發送錯誤計數器對應的變動條件及數值變動情況:
1
接收單元檢測出錯誤時,檢測到錯誤標識符或過載標志的“位錯誤”除外,此時REC+1、TEC不變;
2
接收單元在發送完錯誤標志后檢測到第一位為顯性電平,此時REC+8、TEC不變;
3
發送單元輸出錯誤標志,此時REC不變、TEC+8;
4
發送單元發送主動錯誤標志或過載標志,檢測出位錯誤,REC不變、TEC+8;
5
接收單元發送主動錯誤標志或過載標志,檢測出位錯誤,REC+8、TEC不變;
6
各單元從主動錯誤標志、過載標志的開始檢測出連續14個顯性位,之后每檢測出連續8個顯性位,發送時REC+8、接收時TEC+8;
7
檢測出被動錯誤標志后追加連續8個位的顯性位,發送時REC+8、接收時TEC+8;
8
發送單元正常接收數據結束時(返回ACK且到幀結束位檢測到錯誤),REC不變、TEC-1;
9
接收單元正常接收數據結束時(到CRC未檢測出錯誤且正常返回ACK),REC《127時,rec-1,rec》127時,REC=127;TEC不變;
10
處于總線關閉的單元,檢測到128次連續11個位的隱形位,錯誤計數器歸零,REC、TEC=0;CAN總線錯誤處理功能屬于是鏈路層功能,此功能由CAN控制器決定。
汽車內部掛有很多的 ECU 節點,當其中一個節點發生故障進入總線關閉狀態時,會很大程度上影響整車 CAN 網絡的通訊。所以一方面需要迅速找到引發節點總線關閉的物理故障,另一方面需要遵循一定準則合理設計恢復策略,主要為了控制節點從總線關閉狀態恢復到錯誤主動狀態的等待時間,太快或者太慢地恢復都將可能影響到網絡其它節點的正常通訊,快恢復和慢恢復兩種策略一般同時應用。
整車廠對其系統供應商的設備也都提出了相應的 BusOff 后恢復時間的控制策略要求,對總線關閉狀態的節點需要實現“快恢復”和“慢恢復”策略。
制定策略大致思路是:將默認配置的自動從總線關閉狀態中恢復的功能關閉(CAN_CTRL1.BOFFREC = 1),再實時檢查 CAN_ESR1.BOFFINT 寄存器的值來判斷是否進入 BusOff狀態,當檢測到總線關閉后,開啟快恢復計時,時間到達后進行一次 CAN 控制器的時鐘、驅動及相關寄存器進行初始化操作,初始化完成后如果物理條件恢復正常那么即可完成快恢復,反之循環 10 次前面操作,如果仍舊無法消除 d BusOff 狀態,那進入慢恢復策略,同樣在開啟慢恢復計時并且到達后進行復位 FlexCAN操作, 此時 CAN 總線關閉故障如果解除了,為了避免該節點在 CAN 網絡中頻繁發生總線關閉問題,此時不立即對外發送 CAN 報文。
大致流程圖如下:
至于自定義的 BusOff后的恢復時間策略,可以根據 CAN_CTRL1.BOFFREC 的寄存器描述來控制關閉自動恢復機制,然后根據自己需要的時間間隔完成后開啟自動恢復,官方例程默認為開啟了BusOff 自動恢復功能,自動恢復時長 = 128 x 11 x 位時間(即檢測到 128次11個連續空閑狀態位電平則恢復,符合 CAN2.0B 標準)。
在BusOff 恢復策略制定時,是需要通過軟件流程去實施實現控制時長,IP 層面不能設置恢復的時長。至于如何判斷是主動錯誤還是被動錯誤,可以根據 CAN_ESR1.FLTCONF 寄存器以及結合CAN_ECR 寄存器來分析。
我們通過CANScope總線綜合分析儀對上述的測試項一一進行測試,MM32F0140的FlexCAN 能夠滿足相關的測試標準,能夠滿足汽車領域對通信總線的要求,保障整車CAN總線安全穩定。
-
寄存器
+關注
關注
31文章
5317瀏覽量
120002 -
CAN
+關注
關注
57文章
2715瀏覽量
463365 -
網絡管理
+關注
關注
0文章
118瀏覽量
27655
原文標題:靈動微課堂 (第224講) | MM32F0140 FlexCAN一致性測試 (2)
文章出處:【微信號:MindMotion-MMCU,微信公眾號:靈動MM32MCU】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論