2013-02-18 56 views
1

我知道,如果CAN傳輸中有錯誤,系統將生成一個特定的錯誤幀。但我無法想象如何使這個工作。Linux CAN插座 - 處理錯誤幀

設置我的CAN插座,然後我寫數據:

write(s, (struct sockaddr *)&addr, sizeof(addr)) 

沒有什麼連接到總線上的,所以我希望一個CAN_ERR_ACK,但沒有到達。

PS:錯誤接收已啓用。

怎麼了?

回答

0

您可能需要啓用錯誤接收

can_err_mask_t err_mask = CAN_ERR_ACK ; 
setsockopt(skt, SOL_CAN_RAW, CAN_RAW_ERR_FILTER,&err_mask, sizeof(err_mask)); 
+0

我忘了寫錯誤接收已啓用,但我不能收到錯誤幀。 我hava沒有連接線上的設備..可能這是一個問題? – rPulvi 2013-02-18 11:53:05

+0

在這種情況下,我的硬件會生成CAN_ERR_CRTL(在can_id中)和CAN_ERR_CRTL_RX_WARNING。檢查什麼是使用candump – 2013-02-18 12:26:18

+0

這是情況要:在其他終端 './cansend CAN0 55 55 55' ,candump與 '<0x001> [3] 37 37 37' 沒有錯誤幀響應... – rPulvi 2013-02-18 14:19:01