candump 实用程序不打印非 FD 帧上数据长度的前导零?
candump utility not printing leading zeros for data length on non-FD frames?
我正在编写 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 格式并打印前导零。
显然我可以解决这个问题,但这种行为有点烦人。有谁知道这里可能出了什么问题?
不,这是为了在人类可读输出中区分经典 CAN [x] 和 CAN FD [xx] 帧。 DLC(物理层上的 4 位)是否相同不是问题,因为我们始终使用真实长度信息而不是套接字级别的 DLC 进行操作。当两者都是 5 个字节时,您将无法区分它们。
顺便说一句。您的 CAN 驱动程序似乎有问题,当回显帧始终是 CAN FD 类型时 - 无论发送了什么(经典 CAN / CAN FD)...
我正在编写 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 格式并打印前导零。
显然我可以解决这个问题,但这种行为有点烦人。有谁知道这里可能出了什么问题?
不,这是为了在人类可读输出中区分经典 CAN [x] 和 CAN FD [xx] 帧。 DLC(物理层上的 4 位)是否相同不是问题,因为我们始终使用真实长度信息而不是套接字级别的 DLC 进行操作。当两者都是 5 个字节时,您将无法区分它们。
顺便说一句。您的 CAN 驱动程序似乎有问题,当回显帧始终是 CAN FD 类型时 - 无论发送了什么(经典 CAN / CAN FD)...