CAN总线ACR/AMR原理浅析

ACR/AMR屏蔽字属性用于屏蔽特定CAN ID,ACR用于指定CAN ID二进制中关注位和忽略位;AMR用于规定ACR中那些二进制位生效,哪些无效,通过ACR和AMR确定报文过滤规范。按照不同VCI、CAN卡等供应商和相关开发人员提供计算工具(不同的工具采用不同的公式)运算而取值。下面介绍理论情况下ACR和AMR计算原理:

在理解ACR、AMR之前,首先需要知道以下几个概念:

1. CAN:Controller Area Network

2. ACR:Acceptance Code Register

3. AMR:Acceptance Mask Register

4. AF:Acceptance Filter

类似Ethernet,CAN引入了子网的概念,IP包含Host ID和Network ID两部分,以Mask(子网掩码)区分。ACR和AMR就类似于Ethernet中的Mask,AF通过ACR和AMR起作用;

例如某ECU采用单滤波器接口、29位ID的扩展模式(Pelican Mode)下,CAN ID高8位用做命令字,3~23位用作具体ID设定位,低3位无用。

ECU CAN ID

0x??40 0000

AMR

0xFF1F FFFF

ACR

0x??40 0000

AMR中0代表有效位1代表无效位;从AMR的设定可以看出,只有第二字节高3 bit有效。

CAN总线使用差分电平实现逻辑0/1的映射。低电平对应隐性位,即逻辑1;高电平对应显性位,即逻辑0。把上述AMR和ACR用二进制表示(?为任意值),即:

ACR

0x??40 0000

????

????

0100

0000

0000

0000

0000

0000

AMR

0xFF1F FFFF

1111

1111

0001

1111

1111

1111

1111

1111

AMR_

-/X (有效/无效)

XXXX

XXXX

---X

XXXX

XXXX

XXXX

XXXX

XXXX

根据上表,AMR标识有效的ACR位(0),只有0100是有效的,它表示所有CAN ID只有左二字节的高3 bit与ACR中对应的相同时,该CAN报文方能通过这个CAN节点,否则将被舍弃。例如一段报文CAN ID为0x??40 0000,通过该CAN节点,其二进制表示如下:

????

????

1000

0000

0000

0000

0000

0000

其左2字节高3 bit为100,与ACR的010不同,从而被该节点舍弃。

在CAN总线网络中,如果上述CAN节点是GW(网关),则只有能被该GW接收的报文才能被该子网接收,而ECU发送报文,会直接发送到CAN总线上(多ECU通过按位与仲裁优先级)。


感谢子畅妈妈的分享,本人据此整理。

http://blog.sina.com.cn/s/blog_4a3211570100g9w7.html

你可能感兴趣的:(CAN总线ACR/AMR原理浅析)