SocketCAN 请求 CRC 和 ACK

SocketCAN asks for CRC and ACK

我可以使用 C 语言的 socket 库接收、读取和修改 CRC 和 ACK 吗?

有什么方法可以使用吗?我使用 Raspberry Pi 和 PiCan2.

我假设你问的是 TCP/IP,因为 UDP 数据包没有附加 ACK。

AFAIK,您唯一的解决方案是使用 Linux's raw sockets and implement your own TCP layer (see WireShark),因为 CRC 和 ACK 不应该对用户级代码可用。

CRC:您可能有足够的数据来计算 CRC,因为任何 CRC 错误都意味着消息永远不会到达用户应用程序(内核将抛出数据包).因此您可以安全地重新计算 CRC。至于写CRC,

ACK: 您的应用程序未收到有关 ACK 数据包的通知,因此您无法提取数据。


编辑:(因为问题是在我发布答案后编辑的)

请注意,原始套接字无法移植到所有 OS 风格,因此您的代码将无法移植(这是 QUIC 协议使用 UDP 而不是原始套接字的原因之一)。

如果您 运行 Linux 在您的 Pi 上,您可以使用 WireShark 查看流量。虽然它不能用于您的 C 程序,但它可以成为一个很好的调试工具。