CAN总线格式
IDENTIFIER
The IDENTIFIER’s length is 11 bits. These bits are transmitted in the order from ID-10 to
ID-0. The least significant bit is ID-0.
DATA FIELD
The DATA FIELD consists of the data to be transferred within a DATA FRAME. It can
contain from 0 to 8 bytes, which each contain 8 bits which are transferred MSB first.
从CAN总线的规范可以看出,总线的位序(bit order)msb first,大端模式,也称为递减位序(Decreasing bit order)。
msb | … | … | … | … | … | … | lsb |
但是总线没有规定DATA FIELD的字节序,这是上层协议的范畴。
Motorola格式与Intel格式
在进行CAN总线通信设计时,对CAN总线信号有两种编码格式:Motorola与Intel格式。
两者并无优劣之分,只是设计者的习惯选择。
一般情况下,主机厂在定义CAN总线信号时,会明确定义字节的发送顺序,LSB(byte)先发,还是MSB先发。
Motolora格式(big endian)
MSB | … | … | LSB |
Intel格式(little endian)
LSB | … | … | MSB |
位计数的方法
锯齿(Sawtooth)法
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
发送一个8字节的数据到总线上,bit7(msb of Byte0)最先发送,接着是bit6,bit56(lsb of Byte7)最后发送。
顺序(Sequential)法
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
发送一个8字节的数据到总线上,bit0(msb of Byte0)最先发送,接着是bit2,bit63(lsb of Byte7)最后发送。
CANoe中一般用锯齿法。
而对于跨字节的数据,CANoe表示格式(这两种格式只针对字节序,位序总是msb first的):
- Intel格式(LSB first)的lsb从低字节地址的低位地址开始,向左排布,msb在高字节地址的高位地址
- Motorola格式(MSB first)的lsb从高字节地址的低位地址开始,向左排布,msb在低字节地址的高位地址。
实际总线传输按照msb first,从Byte0的bit7开始,bit6, …, 到Byte1的bit15,bit14, … , 到Byte7的bit63, … , bit62, …, bit56.
start bit总是指lsb的位置,然后向左排布,需要跨字节时:Intel格式从Byte0向Byte7的方向排布,Motorola格式从Byte7向Byte0的方向排布。
缩写:
msb:most significant bit
lsb:most significant bit
MSB:Most Significant Byte
LSB:Least Significant Byte