我正在尝试从Ubuntu 16.04.3 LTS上的can-utils包中通过cansend发送一个16位十六进制数。
我试过的命令:
cansend can0 100#000a000b000c000d
cansend can0 100#000a.000b.000c.000d
但是我的canbus记录器向我显示了 cansend 发送的8位值。
所以我的问题:是否有可能每个 cansend发送16位十六进制值或有人知道解决方法吗?
答案 0 :(得分:1)
CAN标准不允许传输超过8个字节的有效负载。这就是为什么cansend仅发送16个中的8个字节。
有一些解决问题的方法:
-使用两个cansend命令发送有效载荷
-使用ISO-TP(一种协议,该协议允许通过CAN发送大于8字节的数据包)内核模块,该模块允许您使用SocketCAN(how to)进行ISO-TP。
-使用CAN FD,无需安装任何内容即可支持该协议,但是如果您的总线仅支持CAN,则不能使用此解决方案
答案 1 :(得分:0)
您可以尝试一个接一个地发送到两个ID,在这种情况下,端点应同时收听这两个ID并重建消息。
另一种解决方案是使用CANOpen,它允许在CAN总线上进行更复杂的消息传递。基本上,它的作用与我上面所说的一样,但是当然要更复杂。