彻底搞懂CAN报文字节序Intel和Motorola的区别


CAN报文的数据库中能够看到byte order字段,可以选择Intel或者Motorola两种格式。林林总总的也大概了解到一下LSB、MSB等概念以及两者的传输过程。通过数字顺序、符合阅读顺序或者正读反读之类的去解释大端和小端,当时看可能了解了,但到了实际数据库中又理不清到底怎么正读反读,特别是跨字节信号。因此,本文通过实际的DBC分析和项目应用相结合,系统性的梳理清楚CAN信号排布方式Intel(小端)和Motorola(大端)格式的区别。

一、基本概念

LSB:Least Significant Bit最低有效位,MSB:Most Significant Bit最高有效位,两者并不代表传输顺序,只是二进制数的两个bit位。从标准UART 数据传输格式的字节域中可以明显看到LSB和MSB仅代表两个bit,至于具体的信号传输方式,就是接下来要讲的Intel和Motorola格式,又称小端和大端格式。
在这里插入图片描述

二、Intel小端传输

要点LSB在低字节的低位,MSB在高字节的高位。

1.信号不跨字节

如下图框选区域,Intel小端按照LSB在低字节的低位:Byte3的Bit0; MSB在高字节的高位:Byte3的Bit7。读取信号二进制值为11110000。
在这里插入图片描述

2.信号跨字节

信号跨字节的情况,往往认为信号长度大于8个bit,这个不一定。为了讲解清楚这一点,下图制作的数据库信号长度为4bit且跨字节。如下图框选区域,Intel小端按照LSB在低字节的低位:Byte3的Bit6; MSB在高字节的高位:Byte4的Bit1。读取信号二进制值为1100。
在这里插入图片描述

三、Motorola大端传输

要点LSB在高字节的低位,MSB在低字节的高位。

1.信号不跨字节

如下图框选区域,Motorola大端按照LSB在高字节的低位:Byte3的Bit0; MSB在低字节的高位:Byte3的Bit7。读取信号二进制值为11110000。
在这里插入图片描述

2.信号跨字节

如下图框选区域,Motorola大端按照LSB在高字节的低位:Byte4的Bit6; MSB在低字节的高位:Byte3的Bit1。读取信号二进制值为0011。
在这里插入图片描述

从上面的介绍可以得出几点结论:
1、不管是Intel模式,还是Motorola模式,起始位都是该信号的LSB。
2、信号不跨字节的情况下,Intel和Motorola格式编码结果没有区别。注意是不跨字节,而不是小于8个bit。即使信号只有2个bit,也可能存在跨字节的情况。

延伸
1.一个DBC数据库中信号排布方式只能选择一种。要么全是Intel,要么全是Motorola,一般不会出现两者并存在一个数据库中。
2.LIN的数据库LDF中信号排布方式默认为Intel,不可修改。

四、项目场景

在实际项目上,如果需要进行仿真数据加解密的过程(比如仿真数字钥匙解闭锁车辆),那么掌握大端和小端传输将有助于仿真实现。根据输入数据的大端or小端格式进行对应格式的解密才能读取到正确的信息。而如果数据传输格式不匹配,将无法实现。包括在HIL仿真建模的过程中若涉及数据传输也应该在了解信号排布方式的前提下进行建模。


总结

结合大端小端的定义,在DBC数据库中新建信号来梳理Intel和Motorola传输格式的区别不失为一种好的了解方式。理清了LSB、MSB、Intel和Motorola,能够举一反三的理解其他的字节序和位序的数据传输的具体实现。

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值