【问题标题】:Linux CAN socket - handle error framesLinux CAN 套接字 - 处理错误帧
【发布时间】:2013-02-18 10:50:25
【问题描述】:

我知道如果CAN 传输出现错误,系统会生成一个特定的错误帧。但我不知道如何使它工作。

我设置了我的 CAN 套接字,然后我写入数据:

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

总线上没有任何连接,所以我预计 CAN_ERR_ACK,但什么都没有到达。

PS:启用错误接收。

怎么了?

【问题讨论】:

    标签: linux can-bus


    【解决方案1】:

    您可能必须启用错误接收

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

    【讨论】:

    • 我忘了写错误接收已启用,但我无法接收错误帧。我没有连接任何设备。这可能是个问题吗?
    • 在这种情况下,我的硬件生成 CAN_ERR_CRTL(在 can_id 中)和 CAN_ERR_CRTL_RX_WARNING 。使用 candump 检查发生了什么
    • 情况是这样的:./cansend can0 55 55 55 在另一个终端,candump 响应 <0x001> [3] 37 37 37 没有错误帧...
    • @rPulvi 您是否启用了对 candump 中所有帧的过滤? candump -tA any,0:0,#FFFFFFF 。如果您没有看到错误,则可能是启用了环回,或者驱动程序问题,或者有人正在确认数据包。
    • 无事可做.. 我只能看到我发送的帧,没有错误帧。过滤开启,环回关闭。
    猜你喜欢
    • 1970-01-01
    • 2020-02-07
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多