假设我们正在传输一条标识符为0x03E的消息。
它的 11 位二进制形式是 000 0011 1110。那么在传输时它将如何被填充?
发送前五个零后,会有一个填充位 -> 000001。然后在标识符中存在 5 个连续的 0,所以我怀疑它是否会发送 5 个连续的 1,然后添加一个相反极性位(这将使发送的比特流 0000011111100)或发送 4 个连续的 1,然后添加一个填充位(发送的比特流 0000011111010)。
提前致谢!
其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 侦听器要方便得多无论如何。
了解填充位在计算总线负载和传输时间时确实很重要,因此从实时设计方面来看,您应该了解它们。