如何使用Linux验证CAN接口?

如何使用Linux验证CAN接口?

我想验证嵌入式系统上的 CAN 接口。它有两个 CAN 端口:can0can1

我按照以下顺序将它们都提出来:

# ip link set can0 type can bitrate 1000000 dbitrate 2000000 fd on
# ip link set can0 up
# ip link set can1 type can bitrate 1000000 dbitrate 2000000 fd on
# ip link set can1 up

我将它们相互连接起来(CANH<-> CANHCANL<->CANLGND<-> GND),并在 trabnsceivers 之后的每一侧都使用终端电阻。现在,当我想在 上发送流量can0并将传入流量转储到can1.

我开始candump -c -a any调用:

# cansend can0 01a#11223344AABBCCDD

但在此之后,我收到一堆内核错误,如下所示:

[ 1506.337694] rcar_canfd 10050000.can can0: ch erfl 401 txerr 128 rxerr 0
[ 1506.337702] rcar_canfd 10050000.can can0: Bus error
[ 1506.337707] rcar_canfd 10050000.can can0: ACK Error

看起来像128代表CAN_ERROR_PASSIVE_THRESHOLD这表明我读到的内容:

错误被动:在此状态下,CAN 节点仍然能够传输数据,但现在在检测到错误时会引发“被动错误标志”。此外,除了 3 位间歇时间之外,CAN 节点现在还必须等待额外的 8 位(也称为暂停传输时间)才能恢复数据传输(以允许其他 CAN 节点控制总线)

来源:https://www.css electronics.com/pages/can-bus-errors-intro-tutorial#:~:text=A%20CAN%20node%20进入%20the,if%20the%20TEC%20exceeds%20255

但没有显示任何内容candump。上述消息显示在dmesg.但我仍然可以看到 CAN 线路上的数据(使用示波器)。

这些错误意味着什么,如何解决它们以及如何实际查看数据candump

相关内容