大傻师 发表于 2016-11-8 19:01:57

关于CAN协议文档中的起始字节与起始位

本帖最后由 大傻师 于 2016-11-8 19:03 编辑


在搞一个电动汽车充电相关的东西,这是别人发给我的CAN通信协议文档的一部分。
以第一个数据包为例:第一个数据起始字节位置是1,起始位是8,然后数据长度16。第二个数据起始字节3,起始位24,数据长度16。然后第三个数据起始字节4,起始位32,长度2。
问题1:为什么从第8位开始存放数据?前面的一个字节就空着不用了?
问题2:第二个数据从24位开始,长16位,第三个字节应该从第40位开始啊,为什么是从第32位开始?
然后我问了一下写文档那个人,他说这是Motorola格式的,算数据位置的时候起始位前后都要算进去。比如第一个数据起始字节1,起始位8,长16。意思就是说从第8位开始,0-7位高字节,8-15位低字节。数据的实际位置是第0个字节跟第1个字节这两个字节,而不是第1个字节跟第二哥字节。这么一看倒也说得通。
搜了一下Motorola格式跟Intel格式的区别,其实就是所谓的大端跟小端而已,感觉跟他这标注方法完全没什么关系。

CAN接触的不多,之前接触的一个CAN的文档没这个问题,感觉写的很清晰,也很符合我的习惯。

这个文档看起来十分别扭。是我对CAN理解的问题,还是他这个写法的问题?

q457344370 发表于 2016-11-9 00:39:04

没错的,汽车上can一般用的都是Motorola格式

q457344370 发表于 2016-11-9 00:42:59

64bit按照从右往左,从上往下的顺序排列后,Motorola格式是从起始位开始往左数,跨字节往上数。Intel是跨字节后往下数

大傻师 发表于 2016-11-9 14:14:39

q457344370 发表于 2016-11-9 00:42
64bit按照从右往左,从上往下的顺序排列后,Motorola格式是从起始位开始往左数,跨字节往上数。Intel是跨字 ...

也就是说如果有一个32位的数据,标注的时候是起始字节3,起始位24,数据长度32。然后数据最高的1字节在第0字节,最低的1字节在第3字节?

q457344370 发表于 2016-11-13 20:31:47

大傻师 发表于 2016-11-9 14:14
也就是说如果有一个32位的数据,标注的时候是起始字节3,起始位24,数据长度32。然后数据最高的1字节在第 ...

zzjjhh250 发表于 2016-11-13 22:24:43

用EXCEL 把8个byte 框画出来 怎样连贯怎样弄

WM_CH 发表于 2017-7-3 20:01:19

Motorola式的信号有4种表示方法,分别是:Motorola Forward LSB, Motorola Forward MSB, Motorola Sequential, Motorola Backward。
这里是第一种Motorola Forward LSB咯,比较尬
页: [1]
查看完整版本: 关于CAN协议文档中的起始字节与起始位