CAN 报文Intel格式和Motorola格式

CAN总线数据传输规则

  • 对于单个Byte,CAN总线在进行数据传输时,首先传输一个字节的高位(MSB),最后传输该字节的低位(LSB)。
  • 一般情况下,主机厂在定义CAN总线信号的时候,都会明确定义字节的发送顺序,总共有两种顺序:
       首先发送byte0(LSB),然后byte1,byte2,...,最后byte7(MSB)。
    或者
      首先发送byte7(MSB),然后byte6,byte5,...,最后byte0(LSB)。
    其中前者发送顺序(先LSB,后MSB)是目前主机厂的主流。下面以CAN总线报文的发送顺序为首先发送LSB,最后发送MSB的方式为前提,介绍Intel格式和Motorola格式这两种编码方式的不同。

Intel格式编码

  • 当一个信号的数据长度不超过1 Byte,并且信号在一个字节内实现时,该信号的高位(S_msb)将被放在该字节的高位,信号的低位(S_lsb)将被放在该字节的低位
    *当一个信号的数据长度超过1 Byte或者数据长度不超过1 Byte,但是采用跨字节的方式实现时,该信号的高位(S_msb)将被放在高字节(MSB)的高位,信号的低位(S_lsb)将被放在低字节(LSB)的低位,这样信号的起始位就是低字节的低位。

Motorola格式编码

  • 当一个信号的数据长度不超过1 Byte并且信号在一个字节内实现时,信号的高位(S_msb)将被放在该字节的高位,信号的低位(S_lsb)将被放在该字节的低位,这样,信号的起始位就是该字节的低位。
  • 当一个信号的数据长度超过1 Byte或者数据长度不超过一个字节但是采用跨字节方式实现时,该信号的高位(S_msb)将被放在低字节(MSB)的高位,信号的低位(S_lsb)将被放在高字节(LSB)的低位,这样信号的起始位就是高字节的低位。

总结

  当一个信号的数据长度不超过1 Byte时,Intel和Motorola两种格式的编码结果完全一致,但是当数据长度超过1 Byte时,两者的编码结果出现了明显的不同。

参考

  • https://wenku.baidu.com/view/32a79d75866fb84ae55c8d31.html
  • https://wenku.baidu.com/view/3fe9a7a4dd3383c4bb4cd293.html

你可能感兴趣的:(CAN 报文Intel格式和Motorola格式)