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)...