CAN网络矩阵详解,摩托罗拉(Motorala)大端序,英特尔(Intel)小端序

CAN网络矩阵详解,摩托罗拉(Motorala)大端序,英特尔(Intel)小端序

一、从单片机角度讲解(CAN报文发送端)

UDS诊断需求PDF截图

 此图是客户的诊断需求规范,其字节表就是Motorala字节序,关键点讲解:

1. #1代表第一个字节,在程序中存放时,就是在CAN数组的0下标内存中,ECU发送数据给上位机时就会首先发送字节31(且从0x31的高位bit到低位bit进行发送),再发送0x01\0xFF……

2. 该#1#8字节,ECU开发人员会以#5#8这4个字节代表内存地址这个数据,MSB代表地址内存的高字节端,LSB代表低字节端,很明显,在该段字节串中,很明显,MSB在前,LSB在后,所以属于大端序(motorala),MSB端的字节会最早被ECU发送至上位机,发送每个字节的每个bit时,高位bit会被首先ECU发送至上位机。

二、从上位机角度讲解(CAN报文接收端)

CAN矩阵核心图

 此图是CAN网络CAN矩阵核心图,上位机接收后的每个bit数据都有在图中占据一个坑位,以接收前8个字节为例子,接收本章节图一中诊断需求规范表的#1~#8,关键点讲解:

1. 申明:VECTOR工具接收到该8个字节后,如上图的字节及位排列核心图是VECTOR工具的一种常用配置

2. 解释核心图:Byte0就相当于,客户需求文档截图中的#1,Byte1即#2,依次类推。Bit0代表#1字节,即SID的第0bit,位序号排为0

3. 解释核心图:ECU通信与VCTOR工具通信时,始终位序号7是在Byte0字节中最先被接受的,然后接收位序号6,直至位序号0,然后接收位序号15,始终位序号15也是在Byte1字节中最先被接受的,然后接收位序号14,直至位序号8;Byte0最先被接收,然后接收Byte1,依次直至接收Byte7

4. 对于数据[memoryAddress],可以网络矩阵的方式描述,VECTOR解读数据时会这样解读:数据长度31个bit,起始字节为Byte7,起始位为56,因为[memoryAddress]是按照motorala字节序排列,所以,其数据在核心矩阵图中的范围是从下至上,从起始位56至32,即LSB至MSB

5. 虚构一个数据xxx,若网络矩阵表注明了xxx数据的条件是:数据长度12bit,motorala序,起始位为19>>>>那么得出分析结果,该数据在矩阵图中的位置是19~14,从LSB到MSB,位序号依次为19、20、21、22、23、8、9、10、11、12、13、14,这12个bit(第0bit为矩阵序号19,第11bit为矩阵序号14)即组成xxx数据的值

6. 虚构一个数据xxx,若网络矩阵表注明了xxx数据的条件是:数据长度14bit,intel序,起始位为19》》那么得出分析结果,该数据在矩阵图中的位置是19~38,从LSB到MSB,位序号依次为19、18、17、16、31、30、29、28、27、26、25、24、39、38,这12个bit(第0bit为矩阵序号19,第13bit为矩阵序号38)即组成xxx数据的值

7. 不要受矩阵图中的矩阵序号所干扰,该矩阵序号是按照每个字节的0bit位到7bit位依次递增的,而不是按照VECTOR所接收bit的先后顺序进行排序的,实际上VECTOR接收的bit先后顺序是:7、6、5、4、3、2、1、15、14、13、12、11、10、9、8、23、22……

8. 按照矩阵图读取数据包的真实数据时,是按照VECTOR接收bit的先后顺序进行数据组包,得到的数据包真实值,ECU发送时始终是首先发送高字节,且首先发送高字节中的高位(因为在嵌入式ECU中总是motorala序,低地址存放高字节,高地址存放低字节,发送数据时,高位总是被先发送,高位的权值更大,更重要)

  • 9
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值