Intel低字节在前

Motorola高字节在前

  

在进行CAN总线通信设计或者测试过程中,经常看到CAN总线信号的编码格式有两种定义:Intel格式与Motorola格式。究竟两种编码格式有什么样的区别呢?设计者、dbc文件编辑者或者测试人员又该如何判断两种格式,并进行有效正确的配置和解析呢?下面作者给出自己在设计和测试过程中的一点体会和见解,希望能够总结出来加深一下印象和理解。

在编码优缺点上,Motorola格式与Intel格式并没有孰优孰劣之分,只不过根据设计者的习惯,由用户自主选择罢了。当时,对于使用者来讲,在进行解析之前,就必须要知道编码的格式是哪一种,否则,就不能保证正确地解析信号的含义。以下就以8位字节编码方式的CAN总线信号为例,详细分析一下两者之间的区别。

首先,介绍一下CAN总线的数据传输规则,首先传输一个字节的高位(msb),最后传输该字节的低位(lsb)。如下图所示。

一般情况下,主机厂在定义CAN总线信号定义时,都会明确定义字节的发送顺序,即:以首先发送byte0(LSB),然后byte1,byte2,……(MSB)的发送顺序;还是以首先发送byte7(MSB),然后byte6,byte5,……(LSB)的发送顺序。据作者了解到的多个主机厂定义的CAN总线字节发送顺序均为前者(即:首先发送LSB,最后发送MSB)。这一点可以从目前主流的CAN总线信号数据库编辑器德国verctor公司的CANoe软件工具的定义上看出,CANoe中的CANdb++编辑器中默认定义的CAN数据场的字节结构及每一位的排布入下图所示。

在这种情况下,如果主机厂采用的是首先发送LSB,最后发送MSB的发送顺序,则在上表中可直接按照从左至右,从上至下的顺序依次对信号进行排布即可;但是,如果主机厂采用的是首先发送MSB,最后发送LSB的发送顺序,则在上表中需要从下至上,从右至左的顺序依次对信号进行排布,这样就比较难以对应,而且信号与数据场各字节之间的映射关系也不太直观。所以,一般来讲,主机厂会采用首先发送LSB,最后发送MSB的发送顺序。

下面就以CAN总线报文的发送顺序为首先发送LSB,最后发送MSB的方式为前提,介绍Intel格式与Motorola格式这两种编码方式的不同之处。

一、 采用Intel格式编码

当一个信号的数据长度不超过1个字节(8位)并且信号在一个字节内实现(即,该信号没有跨字节实现)时,该信号的高位(S_msb)1将被放在该字节的高位,信号的低位(S_lsb)2将被放在该字节的低位。这样,信号的起始位3就是该字节的低位。下图分别以4位和8位数据长度的两种信号为例进行了说明,并给出了某一车型的通信矩阵CANoe中的CAN数据库实现的图片说明。

当一个信号的数据长度超过1个字节(8位)或者数据长度不超过一个字节但是采用跨字节方式实现时,该信号的高位(S_msb)将被放在高字节(MSB)的高位,信号的低位(S_lsb)将被放在低字节(LSB)的低位。这样,信号的起始位就是低字节的低位。对于一个信号的数据长度不超过一个字节,但是采用跨字节方式实现的这种情况,因其对信号解析和编码以及信号完整性都存在不利因素,所以主机厂在定义某一车型(系)的整车通信矩阵时,不太可能设计出这种编码结构。本文就不再考虑和分析这种较为特殊的情况,但其原理与本文讨论的其他情况是相同的。下图分别以12位和16位数据长度的两种信号为例进行了说明,并给出了CANoe中的某一车型的通信矩阵的CAN数据库的图片说明。

二、 采用Motorola格式编码

当一个信号的数据长度不超过1个字节(8位)并且信号在一个字节内实现(即,该信号没有跨字节实现)时,信号的高位(S_msb)将被放在该字节的高位,信号的低位(S_lsb)将被放在该字节的低位。这样,信号的起始位就是该字节的低位。下图分别以4位和8位数据长度的两种信号为例进行了说明,并给出了某一车型的通信矩阵在CANoe中CAN数据库实现的图片说明。

当一个信号的数据长度超过1个字节(8位)或者数据长度不超过一个字节但是采用跨字节方式实现时,该信号的高位(S_msb)将被放在低字节(MSB)的高位,信号的低位(S_lsb)将被放在高字节(LSB)的低位。这样,信号的起始位就是高字节的低位。对于一个信号的数据长度不超过一个字节,但是采用跨字节方式实现的这种情况,因其对信号解析和编码以及信号完整性都存在不利因素,所以主机厂在定义某一车型(系)的整车通信矩阵时,不太可能设计出这种编码结构。本文就不再考虑和分析这种较为特殊的情况,但其原理与本文讨论的其他情况是相同的。下图分别以12位和16位数据长度的两种信号为例进行了说明,并给出了CANoe中的某一车型的通信矩阵的CAN数据库的图片说明。

由上,可以看出,当一个信号的数据长度不超过1个字节(8位)时,Intel与Motorola两种格式的编码结果没有什么不同,完全一样。当信号的数据长度超过1个字节(8位)时,两者的编码结果出现了明显的不同。

文中术语解释及定义:

1. 信号的高位,即最能表达信号特性的因子,比如:车速信号500km/h按照给定的公

式,转换成十六进制数为0x6A5,因为6代表的数量级最大(162),那么其中6就是其信号的高位。

2. 信号的低位,即最不能表达信号特性的因子,比如:车速信号500km/h按照给定的

公式,转换成十六进制数为0x6A5,因为5代表的数量级最小(160),那么其中5就是其信号的低位。

3. 信号的起始位,一般来讲,主机厂在定义整车CAN总线通信矩阵时,其每一个信

号都从其最低位开始填写,这样也符合使用习惯。所以信号的起始位就是信号的最

低位。这也与CANoe中CANdb++的定义Startbit含义一致。

Intel格式与Motorola格式的区别的更多相关文章

  1. CAN报文 Intel 格式与Motorola 格式的区别

    当一个信号的数据长度不超过 1 个字节(8 位)时,Intel 与 Motorola 两种格式的 编码结果没有什么不同,完全一样.当信号的数据长度超过 1 个字节(8 位)时,两者的编码结果出现 了明 ...

  2. YUV格式与RGB格式

    YUV420介绍: YUV420格式是指,每个像素都保留一个Y(亮度)分量,而在水平方向上,不是每行都取U和V分量,而是一行只取U分量,则其接着一行就只取V分量,以此重复(即4:2:0, 4:0:2, ...

  3. VIA格式转COCO格式

    VIA是一款很好用的标注软件,基于网页,不过现在开源的大多数目标检测器都是基于COCO训练和测试的,我们如果想要训练自己的数据集,要么修改源代码,要么将自己的标注格式改成COCO格式,采用第一种方法很 ...

  4. Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基础文件配置,Web框架的本质,服务器程序和应用程序(wsgiref服务端模块,jinja2模板渲染模块)的使用

    Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基 ...

  5. STM32——CAN协议帧的标准格式和扩展格式与优先级的关系

    一.CAN数据帧的标准格式和扩展格式 我们知道CAN总线上的数据帧都可以配置一个ID号,其可以为11位(标准ID格式)或者29位(扩展ID格式),这也是数据帧的标准格式和扩展格式的区别所在. 这个ID ...

  6. AngularJS过滤器filter-时间日期格式-渲染日期格式-$filter

    今天遇到了这些问题索性就 写篇文章吧 话不多说直接上栗子 不管任何是HTML格式还是JS格式必须要在  controller 里面写 // new Date() 获取当前时间 yyyy-MM-ddd ...

  7. C#RSA算法实现+如何将公钥为XML格式转为PEM格式,给object-C使用

    .net中,处于安全的考虑,RSACryptoServiceProvider类,解密时只有同时拥有公钥和私钥才可以.原因是公钥是公开的,会被多人持有.这样的数据传输是不安全的.C#RSA私钥加密,公钥 ...

  8. RSA密钥之C#格式与Java格式转换

    前言 最近由于项目需求,服务端由c#编写,客户端由java编写.通信数据使用RSA非对称加密.但是java和c#生成的密钥格式是不一样的,所以需要转换格式才可以正常使用.网上搜到使用java进行格式转 ...

  9. Linux下如何将数据库脚本文件从sh格式变为sql格式

    在从事软件开发的过程中,经常会涉及到在Linux下将数据库脚本文件从sh格式变为sql格式的问题.本文以一个实际的脚本文件为例,说明格式转换的过程.        1. sh文件内容 本文中的文件名为 ...

随机推荐

  1. 学习笔记—XML

    XML XML简介 XML指可扩展标记语言(EXtensible Markup Language),是一种标记语言. XML是一种灵活的语言,标签没有被预定义,需要自行定义标签. 通常,XML被用于信 ...

  2. GridContrl 通用类

    using DevExpress.Data; using DevExpress.Utils; using DevExpress.XtraGrid.Views.Grid; using System; u ...

  3. align-content 与 align-items 区别

    align-content 和 align-items  : 1:共同点:它们对齐方向为交叉轴 2:不同点:align-content 应用于为 多行   而 align-items:应用于单行. 单 ...

  4. 亿级流量场景下,大型架构设计实现【2】---storm篇

    承接之前的博:亿级流量场景下,大型缓存架构设计实现 续写本博客: ****************** start: 接下来,我们是要讲解商品详情页缓存架构,缓存预热和解决方案,缓存预热可能导致整个系 ...

  5. Django 信号signal

    序言 Django自带一套信号机制来帮助我们在框架的不同应用位置之间传递信息.也就是说,当某一事件发生时,信号系统可以允许一个或多个发送者(senders)将信号(signals)发送给一组接收者(r ...

  6. Docker-单宿主机下的网络模式

    docker利用namespaces和cgroups实现了应用隔离和资源控制,那么网络层优势如何实现的呢?是直接使用宿主机的网卡设备,还是独立创造出自己的网络设备?以及容器如何与外界通信,下面我们通过 ...

  7. html元素禁用disable or enable

    场景说明 ajax提交数据,防止收到服务端相应前用户重复点击. 1.用户点击按钮,禁用当前按钮,发起ajax请求. 2.收到ajax请求,还原当前按钮. html解决方案 参考地址:http://ww ...

  8. mysql8.0.主从复制搭建

    搭建主从数据库 一.准备两台以上对的数据库 数据库1(主服务器):192.168.2.2 数据库2(从服务器):192.168.2.4           1.1      配置主服务器 .在 /et ...

  9. firewalld简介及功能

    1. firewalld简介 firewalld是CentOS7/Red Hat7的一大特性,最大的好处有两个: 第一个支持动态更新,不用重启服务: 第二个就是加入了防火墙的zone概念 firewa ...

  10. P4013 数字梯形问题 网络流

    题目描述 给定一个由 nn 行数字组成的数字梯形如下图所示. 梯形的第一行有 mm 个数字.从梯形的顶部的 mm 个数字开始,在每个数字处可以沿左下或右下方向移动,形成一条从梯形的顶至底的路径. 分别 ...