Can-bus数据的某些位始终设置为0

问题描述 投票:0回答:1

我正在新的自定义板上设置CAN总线。它使用通过SPI总线连接的mcp2515控制器。当使用“ candump”接收时,数据中的一位总是0(具体来说,数据的第一位)。总线上的其他两个设备运行正常。可能相关,硬件中存在时序问题,我必须将波特率设置为20%更高,才能为其他设备获得正确的波特率。

如果我断开总线电缆并启用环回,甚至会发生这种情况!

#ip link set can0 type can bitrate 600000 loopback on
#ifconfig can0 up
#candump can0 &
# cansend can0 0FF#AABBCCDDEEFFFFFF
  can0  4FB   [8]  2A BB CC DD EE FF FF FF
  can0  0FF   [8]  AA BB CC DD EE FF FF FF
# cansend can0 0AB#AABBCCDDEEFFFFFF
  can0  4AB   [8]  2A BB CC DD EE FF FF FF
  can0  0AB   [8]  AA BB CC DD EE FF FF FF
# cansend can0 000#0000CCDDEEFFFFFF
  can0  400   [8]  00 00 4C DD EE FF FF FF
  can0  000   [8]  00 00 CC DD EE FF FF FF

是否有明显的原因导致这种情况发生?即使在环回模式下,硬件中的定时错误是否也可能导致此问题?

编辑删除了错误的CAN_ID'FFF'的示例,以减少混乱]

embedded-linux loopback can-bus
1个回答
0
投票

我设法找到两个问题的解决方案:

  • 晶体被定义为24 MHz,但是内置了20 MHz。这解释了为什么我需要将波特率提高20%进行通信。
  • SPI总线的最大频率错误。读取总线时,某些第一个收到的消息以某种方式为零。通过正确的设置,can-bus现在可以正常运行。
© www.soinside.com 2019 - 2024. All rights reserved.