2013-02-18 55 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