位填充将如何应用于标识符字段0x03E? (CAN 协议)

问题描述 投票:0回答:1

假设我们正在传输一条标识符为0x03E的消息。

它的 11 位二进制形式是 000 0011 1110。那么在传输时它将如何被填充?

发送前五个零后,会有一个填充位 -> 000001。然后在标识符中存在 5 个连续的 0,所以我怀疑它是否会发送 5 个连续的 1,然后添加一个相反极性位(这将使发送的比特流 0000011111100)或发送 4 个连续的 1,然后添加一个填充位(发送的比特流 0000011111010)。

提前致谢!

embedded protocols can-bus bitstuffing
1个回答
0
投票

其11位形式的二进制为000 0011 1110

这是无关紧要的,因为位填充发生在帧级别。所有 CAN 帧都以称为帧起始的显性 0 位开始。因此,如果 11 位 CAN ID 为 0x03E,则未填充的帧将如下所示:

0 000 0011 1110

(CAN 帧始终使用大端编码。)

第一个填充位插入在前 5 个连续零之后:

00000>1<0111110

下一个填充位将插入到连续 5 个填充位之后:

000001011111>0<0

因此比特流将变成:

00000101111100

程序员需要了解和关心这个吗?并非如此 - 填充位是由 CAN 控制器添加/删除的,您永远不会在软件方面看到它们。

您唯一需要了解它们的时候是使用示波器手动解码 CAN 帧,这是毫无意义的做法,因为 1) 现在大多数示波器都有内置协议解码,2) 使用 CAN 侦听器要方便得多无论如何。

了解填充位在计算总线负载和传输时间时确实很重要,因此从实时设计方面来看,您应该了解它们。

© www.soinside.com 2019 - 2024. All rights reserved.