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详解
本文介绍了CAN总线中的ACR(Acceptance Code Register)和AMR(Acceptance Mask Register)原理,这两个概念在CAN报文过滤中起到关键作用。ACR指定关注和忽略的CAN ID位,而AMR规定ACR中哪些位生效。在某些配置下,如ECU使用扩展模式,只有特定的ACR位与AMR匹配时,CAN报文才会被接收,否则将被过滤掉。CAN总线通过差分电平传输数据,并使用ACR和AMR作为过滤机制,确保网络中有效通信。
432

被折叠的 条评论
为什么被折叠?



