開發平臺介紹: NUC970 + 內置CAN控制器(雙通道CAN1\CAN2) + 官方Linux_Kernel(少量修改) 名詞: 終端,使用NUC970的硬體 異常表現: 1、當CAN收發器(VP251)斷電時,此時再恢復CAN外部通訊,終端表現為能收到全部的CAN數據,發送函數返回成功,但CA ...
開發平臺介紹:
NUC970 + 內置CAN控制器(雙通道CAN1\CAN2) + 官方Linux_Kernel(少量修改)
名詞:
終端,使用NUC970的硬體
異常表現:
1、當CAN收發器(VP251)斷電時,此時再恢復CAN外部通訊,終端表現為能收到全部的CAN數據,發送函數返回成功,但CAN匯流排上沒有任何發送的數據顯示。
2、同樣條件使用舊的CAN內核驅動時,竟然可以恢復通訊。
分析問題:
1、查詢CAN資料顯示,當CAN收發器(VP251)斷電時,CAN匯流排會進入BUSOFF的狀態,在此狀態下,接收成功發送失敗是正常的表現。
2、舊驅動之所以能恢復通訊,是因為舊驅動有BUG,BUSOFF後,收發都異常,應用程式重啟了CAN匯流排,所以才能恢復正常。
解決辦法:
1、對於斷電這種情況,應用程式可以監測到,可以增加補丁程式,當斷電恢復時,強制重啟CAN匯流排;
2、嘗試使用CAN匯流排狀態指示,經過測試發現驅動中的狀態指示不正常,無法正確顯示BUSOFF\WARNING等狀態,因此暫時無法判斷。
3、CAN匯流排寄存器中有一個自動重啟的設置項,目前設置是禁止,如果設置為使能,CAN驅動會在BUSOFF後自動恢復正常。
以上3個辦法,目前使用1對應,2、3都需要修改和評審驅動程式後再做打算。