首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >socketcan中总线状态的检测

socketcan中总线状态的检测
EN

Stack Overflow用户
提问于 2018-12-20 14:22:37
回答 1查看 8.5K关注 0票数 5

我在嵌入式linux上使用挠曲式驱动器,我有控制can消息的C程序。在我的C程序中,我需要检查can总线的状态,例如buss-offerror-active。我可以像ip -details -statistics link show can0一样使用linux命令,结果如下:

代码语言:javascript
复制
2: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP mode DEFAULT group default qlen 10
    link/can  promiscuity 0 
    can state *ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 100 
          bitrate 250000 sample-point 0.866 
          tq 266 prop-seg 6 phase-seg1 6 phase-seg2 2 sjw 1
          flexcan: tseg1 4..16 tseg2 2..8 sjw 1..4 brp 1..256 brp-inc 1
          clock 30000000
          re-started bus-errors arbit-lost error-warn error-pass bus-off
          31594      0          0          7686       25577      33258     
    RX: bytes  packets  errors  dropped overrun mcast   
    5784560    723230   0       1       0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    157896     19742    0       33269   0       0       

如何在我的C程序中获得can state ERROR-ACTIVE?另外,我可以在挠性罐头驱动器中看到一些寄存器,它们可以用来查看状态,但我也不知道如何将这些值包括在我的程序中。像FLEXCAN_ESR_BOFF_INT这样的寄存器包含我需要的值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-27 09:32:54

您可以将套接字设置为以消息形式返回can错误。

正如网络问题通知中所描述的那样,CAN接口驱动程序可以生成所谓的错误消息帧,这些消息帧可以与其他can帧一样可选地传递给用户应用程序。可能的错误被分成不同的错误类,这些错误类可以使用适当的错误掩码进行过滤。要注册每个可能的错误条件,可以使用CAN_ERR_MASK作为错误掩码的值。错误掩码的值在linux/can/error.h中定义。

代码语言:javascript
复制
can_err_mask_t err_mask = ( CAN_ERR_TX_TIMEOUT | CAN_ERR_BUSOFF );

setsockopt(s, SOL_CAN_RAW, CAN_RAW_ERR_FILTER,
           &err_mask, sizeof(err_mask));

有关更多信息,请参见内核文档

更新

看看libsocketcan和例程状态

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53870499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档