![](https://csdnimg.cn/release/download_crawler_static/10767301/bg4.jpg)
CAN ID,部分不期望的 CAN ID 有时也会收
到
2.5. 标准 CAN ID 与扩展 CAN ID
1986 年德国电气商 BOSCH 公司开发出面向汽车的 CAN 通信协议,刚开始的时候,CAN ID 定义为 11 位,我们称之为标准
格式,ISO11898-1 标准中 CAN 的基本格式如下图所示:
图 3 标准 CAN 报文格式定义
如上图所示,标准 CAN ID 存放在上图 ID18~ID28 中,共 11 位。随着工业发展,后来发现 11 位的 CAN ID 已经不够用,于
是就增加了 18 位,扩展 CAN ID 到 29 位,如下图所示:
图 4 扩展 CAN 报文格式定义
从上图对比扩展 CAN 报文与标准 CAN 报文,发现在仲裁域部分,扩展 CAN 报文的 CAN ID 包含了 base Identifier 与
extension Identifier,即基本 ID 与扩展 ID,而标准 CAN 报文的 CAN ID 部分只包含基本 ID,扩展 ID(ID0~ID17)被放在基本
ID 的右方,也就是说,属于低位。知道这些有什么用呢?至少我们可以得到这两条信息:
标准 ID 一般小于或等于<=0x7FF(11 位),只包含基本 ID。
对于扩展 CAN 的低 18 位为扩展 ID,高 11 位为基本 ID。
例如标准 CAN ID 0x7E1,二进制展开为 0b 0[111 1110 0001] ,只有中括号内的 11 位才有效,其全部是基本 ID。
再例如扩展 CAN ID 0x1835f107,二进制展开为 0b 000[1 1000 0011 10][01 1111 0001 0000 0111],只有红色中括号和绿色中
括号内的位才有效,总共 29 位,左边红色中括号中的 11 位为基本 ID,右边绿色中括号内的 18 位为扩展 ID,请记住这个信
息!知道这个之后,我们可以很方便地将一个 CAN ID 拆分成基本 ID 和扩展 ID,这个也将在后续的内容中多次用到,再次留
意一下,扩展 ID 是位于基本 ID 的右方,在扩展 CAN ID 的构成中,扩展 ID 位于低 18 位,而基本 ID 位于高 11 位,于是要
获取一个扩展 CAN ID 的基本 ID,就只需要将这个 CAN ID 右移 18 位(这种算法后续将多次用到,请务必记住!)。
3. bxCAN 的过滤器的解决方案
终于进入到正题了!前面已经介绍了过滤器的列表模式与掩码模式,以及掩码模式下的屏蔽码与验证码的含义,还介绍了标
准 CAN ID 与扩展 CAN ID 的组成部分。现在我们终于要站在 bxCAN 的角度来分析其过滤方案。