You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在CAN总线发送端能否读取自身通过CAN socket发送的字节数据?

CAN Socket自发自收问题解答

核心结论

默认情况下无法从同一个CAN Socket读取到自身写入的数据,可通过配置开启该功能。

原理说明

  • CAN总线硬件层面本身支持获取自身发送的有效数据:CAN协议要求发送节点在发送过程中实时采样总线电平,和自身发送的比特做校验,因此源节点可以感知到自己成功发到总线上的报文。
  • Linux SocketCAN默认关闭了本地回环的上报逻辑,避免上层应用收到冗余的自发报文,因此默认配置下自发报文不会被同一个Socket读取到。

开启自发自收的方法

如果需要读取自身发送的报文,可通过setsockopt配置CAN_RAW_RECV_OWN_MSGS参数开启,示例代码如下:

int recv_own_enable = 1;
setsockopt(can_socket, SOL_CAN_RAW, CAN_RAW_RECV_OWN_MSGS, &recv_own_enable, sizeof(recv_own_enable));

配置开启后,只要报文成功发送到CAN总线(无发送错误、仲裁丢失、总线离线等异常),就能从同一个Socket读取到和写入内容完全一致的CAN报文。

注意事项

  • 回环上报的报文和其他节点发送的报文格式完全一致,没有特殊标识,上层应用需要自行区分来源。
  • 若没有读取自发报文的需求,建议保持默认关闭状态,减少不必要的报文处理开销。

内容的提问来源于stack exchange,提问作者juggler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:15:01