接口兼容是什么意思(接口兼容性)

昨天,一位关系比较好的前公司同事打来电话寻求帮助,他在解读整车厂(东风汽车)发来的CAN协议时遇到了困扰:完全看不懂——因为他以前接触的是CAN扩展帧协议。鉴于经常有朋友也遇到相似的问题,现在就这个问题我有针对性的解释一下。

一、CAN通信的基础知识

(1)为什么要采用CAN通信:CAN通信因为其通信速率快,抗干扰性好,目前广泛应用于车载电子设备上,比如电动汽车及燃油汽车等。CAN物理接口兼容规范2.0A和2.0B(主动),位速率高达1兆位/秒。它可以接收和发送11位标识符的标准帧,也可以接收和发送29位标识符的扩展帧。

(2)标准帧和扩展帧的区别:其一,扩展帧的仲裁域有29位,可以出现2^29种报文,帧ID的范围是0000 0000-1FFF FFFF;标准帧的仲裁域是连续的11位,可以出现2^11种报文,帧ID的范围是000-7FF;其二,控制帧中的DLC(数据长度)完全相同,但保留位不同,标准帧IDE、R0,扩展帧R1、R0,必须以显性电平发送(由数据链路层操作)。因此,CAN标准帧和扩展帧除了在帧ID的长度上不一样,其它的基本上一模一样。

(3)Intel格式与Motorola格式的区别:CAN报文中字节和数据位的编码及摆放是有顺序的,分为Intel与Motorola两种格式。当一个信号的数据长度不超过 1 个字节(8 位)时,Intel 与 Motorola 两种格式的编码结果没有什么不同,完全一样;而当信号的数据长度超过 1 个字节(8 位)时,两者的编码结果出现了明显的不同,简单来说就是:Intel格式高字节在后,低字节在前;而Motorola格式则相反,高字节在前,低字节在后,如图1所示。

图1 采用Intel格式编码十六进制数值“0x36A5”示例

图2 采用Motorola格式编码十六进制数值“0x36A5”示例

(4)关于报文解析中涉及到的分辨率(或称精度)和偏移量,如何转换为物理值(或实际值):换算关系为——物理值(实际值)=总线值*分辨率+偏移量。示例如下:

图3 报文解析中分辨率和偏移量的换算关系

(5)CAN报文ID标识符的分配表及说明

(下表可以向左或向右拖拉,以显示全部信息)

IDENTIFIER 11BITS(标准帧只有此11位)

SRR

IDE

IDENTIFIER EXTENSION 18BITS(扩展帧另外包含此18位)


R

DP

PDU

FORMAT(PF)

SRR

IDE

PF

PDU

SPECIFIC(PS)

SOURCE

ADDRESS(SA)

3

2

1

1

1

8

7

6

5

4

3



2

1

8

7

6

5

4

3

2

1

8

7

6

5

4

3

2

1

此3位代表优先级,可以有8 个优先级

一般固定为0

固定为0

PF为报文的代码

(标准帧只有6位)



PF为报文的代码

(扩展帧还要包含这2位,共有8位)

PS为发送此报文去的目标地址

SA为发送此报文的源地址

显而易见,标准帧只有11位,而扩展帧扩展了18位,共有29位标识符。

二、解疑答惑

学习了解了上面(1)到(5)的基础知识,我们再来看一下东风汽车公司某一款车型的整车CAN标准帧协议,截取一段如下图4所示(为了显示清晰,分为2段截取):

图4 截取报文段1

图4 截取报文段2

整车上通信互联的控制器有很多,比如VCU、MCU、TBOX、BMS等等,我上面展开的是BMS对OBC的报文帧(BMS_OBC),解析如下:

1、首先,可以看出该帧报文(BMS_OBC)是由BMS发给OBC的,“S”代表英文send,“r”代表英文“receive”,帧ID为0x330,发送周期为100ms,包含8个字节的有效数据,数据编码格式采用Motorola格式;

图5 CAN报文收发关系

2、该帧报文包含有4个有效物理量,分别是:BMS_最高允许充电端电压、BMS_最高允许充电电流、BMS_充电机使能控制、BMS_充电桩类型;

3、我先解析“BMS_最高允许充电端电压”这个物理量,这个物理量信号长度(Bit Length)为16Bit,占用两个字节,起始字节(Start Byte)是1,即从第1字节到0字节;该字节为无符号数(Unsigned),分辨率(Resolution)为0.1,偏移量(Offset)为0,它的实际取值范围是从0—750,单位为“V”,总线上发送的十六进制数值范围为0x0—0x1D47,如果接收到数值为0xFFFF就代表数值无效;

4、ID标识符0x330采用11位二进制可表示为:011 0011 0000,根据上节标准帧ID分配表套用可知其代表含义:优先级为3,报文代码(报文名)PF为0x30;

5、假如接收到的报文为:

图6 模拟CAN报文

那么,它代表的物理量“BMS_最高允许充电端电压”, 其数值=0x1A90 * 0.1 + 0,转换为十进制等于680V,即BMS最高允许充电端电压为680V,其余物理量以此类推可知,BMS_最高允许充电电流为56.2A,充电机关闭输出,BMS处于非充电状态。

现在,我们可以将该帧报文换成另一种格式进行表述:

图7 报文帧ID-0x330另一种通俗表述方式

如上图这样表述,相信我那位朋友就一定能够看懂了,大家看懂了吗?