在之前已经对dbc的格式进行了详细的分析,在该文里也提到了报文格式Motorola或Intel,接下来来理一理报文格式。 总线上数据的传输规则:字节的高位先发送,字节的低位最后发送,如图1所示。对于字节的发送而言,也可以选择高字节(MSB)先发(Byte 7先发),或低字节(LSB)先发(Byte 0先发),通常来说是用低字节先发,这样在CANdb++软件中比较直观。 图1 bit的发送顺序 Motorola格式 当信号的数据长度超过 1 个字节或者数据长度不超过一个字节但是采用跨字节方式实现时,该信号的高位将被放在低字节的高位,信号的低位(将被放在高字节的低位。这样,信号的起始位就是高字节的低位. 上面的表述读起来有点拗口,下面通过一个例子来说明一下。如图2中信号DCU_Id,其长度为11bit,那么在motorola格式下,是怎么组合成信号的呢? 图2 Motorola格式的CAN消息 DCU_Id = Byte5>>1+Byte4<<7。 其中Byte5>>1为低字节,Byte4<<7为高字节。 Intel格式 当信号的数据长度超过1 个字节或者不超过一个字节但是采用跨字节方式实现时,该信号的高位将被放在高字节的高位,信号的低位将被放在低字节的低位。因此信号的起始位就是低字节的低位。 同样,通过一个具体的例子来说明,CAN消息里放置的数据与图1是一样的,只不过编码格式采用了intel格式,如图3所示。那intel格式下DCU_Id应该怎么算呢? 图3 Intel格式的CAN消息 DCU_Id = Byte4>>3+Byte5<<5; |
|