前言:
can匯流排上出現錯誤會導致can控制器進入bus off狀態,具體的可以參考can的規範。
can控制器提供自動恢復和手動恢復功能。
1.自動恢復
自動恢復比較簡單,初始化的時候開啟自動恢復功能。要求不高的話建議開啟,否則can bus off一直無法恢復通訊。
can->mcr |= can_masterctrl_autobusoffmanagement;/*atuo bus off recovery */
2.手動恢復
一般車廠要求ecu不能自動恢復,而是先快恢復後慢恢復。
常用的就是:先100ms恢復5次,然後是1000ms恢復一次。
具體的就是:
(1)發生bus off後,立即關閉tx,然後重置can控制器
(2)快恢復次數+1
(3)快恢復次數<5則設定恢復時間為100ms,否則,恢復時間設定1000ms
(4)恢復時間到了,就開啟tx
(5)成功傳送報文則清零快恢復次數
初始化時開啟相關中斷
can_itconfig(can_it_fmp,enable);
can_itconfig(can_it_bof,enable);
can_itconfig(can_it_err,enable);
中斷裡這樣寫
interrupt_handler(can_tx_irqhandler, 9){
/* in order to detect unexpected events during development,
it is recommended to se
CAN網路中的路由
現在汽車快速發展,車上的ecu數目已經達到幾十個,乘用車可能會更多,商用車雖然少些,但是也有二三十個之多,雖然sae j1939協議中對定了使用遮蔽雙絞線最多一路can上可以使用30個ecu,但是在實際使用過程中考慮網路負載和報文延時,一路can上並不會使用太多的節點,一般一路can網路最多也就十個...
can網路管理(osek中的NM)
1 協調各 ecu 同時進入網路睡眠模式 2 檢測和監控網路的配置 3 提供系統狀態。所有參與直接網路管理的 ecu,根據 oseknm 中的演算法建立邏輯環的通訊機制 4 每個參與直接 nm 的 ecu 都有乙個特定的網路管理位址 5 每個 ecu 傳送特定的 nm 報文,nm 報文由優先順序較高...
CAN匯流排網路「負載率」計算
can匯流排負載率 表徵的是單位時間內匯流排上的 位流 相對於匯流排頻寬的佔比。換就話說,匯流排實際資料傳輸速率與理論上能達到的資料傳輸速率的比值。以景區的負載率為例,每個景區都有乙個容納遊客負荷上限人數 比如說10000人 如果此時景區內只有1000人,則此時景區負載率是10 景區負載率是乙個空間...