我想验证嵌入式系统上的 CAN 接口。它有两个 CAN 端口:can0
和can1
。
我按照以下顺序将它们都提出来:
# 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
<-> CANH
、CANL
<->CANL
和GND
<-> 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 节点控制总线)
但没有显示任何内容candump
。上述消息显示在dmesg
.但我仍然可以看到 CAN 线路上的数据(使用示波器)。
这些错误意味着什么,如何解决它们以及如何实际查看数据candump
?