我正在编写一个CAN驱动程序,并想为它设置一些测试。我有一个简单的回显程序(接受一个can帧并回显它)。为此,我使用can-utils
,并使用cangen
生成随机数据,将其记录下来,然后确保帧被接收并回显。
一切似乎都在正常运行,但来自candump的一些恼人的行为。当发送非FD帧时,它不会打印DLC的前导零。请看这里(发送消息,然后回显消息-是的,我知道它不应该使用相同的节点id回显这只是为了测试目的):
candump can0
#can FD frames (11 and 29 bit ids)
can0 033FABCD [04] DE AD BE EF #sent
can0 033FABCD [04] DE AD BE EF #echoed
can0 277 [04] DE AD BE EF
can0 277 [04] DE AD BE EF
#non-FD frames sent (11 and 29 bit ids)
can0 277 [4] DE AD BE EF #sent
can0 277 [04] DE AD BE EF #echoed
can0 077AFFFF [4] DE AD BE EF
can0 077AFFFF [04] DE AD BE EF
FD和非FD帧都有一个4位的DLC,所以我不确定为什么会有不同的打印。我们只发送FD,所以回显的帧是FD格式的,并打印出前导零。
显然,我可以解决这个问题,但其行为有点烦人。有人知道这里可能出了什么问题吗?
发布于 2019-08-26 16:03:57
不,这是为了在人类可读的输出中区分Classic CAN x和CAN FD xx帧。这不是DLC (物理层上的4比特)是否相同的问题,因为我们总是使用实际长度信息而不是套接字级别的DLC进行操作。当两者都是5个字节时,你将无法区分它们。
顺便说一句。当回声帧始终是CAN FD类型时,您的CAN驱动程序似乎有问题-无论发送的是什么(经典CAN / CAN FD) ...
https://stackoverflow.com/questions/57630731
复制相似问题