数据缓冲器
CANFD 控制器包括一个八层 (时隙)接收缓冲器,一个主发送缓冲器 (简称 PTB )和一个四层 (时隙)辅发送缓冲器 (简称 STB)。
接收缓冲器指向入口为 RBUF,RBUF 具有 80 个字节长度,每一笔接收到的帧信息都先储存在这里,通过设置 RREL = 1 可以切换到接收缓冲器的下一层。RBUF 存储的数据格式区分标准帧和扩展帧,具体见RBUF(标准帧格式)和RBUF(扩展帧格式)。
- 通过设置接收过滤器,可以只接收特定的帧 ID 或者帧 ID 段范围,从而减少主机接收负荷。
- RBUF 只支持 32 位地址对齐模式访问,不支持 8 位/ 16 位地址对齐模式访问。
PTB 和 STB 构成了发送缓冲器,其指向入口为 TBUF。对于 STB,可以通过设置 TSNEXT = 1 切换到 STB 的下一层。TBUF 具有 72 个字节长度,每一笔要发送的帧都储存在这里。TBUF 存储的数据格式区分标准帧和扩展帧,具体见TBUF(标准帧格式)和TBUF(扩展帧格式)。
- PTB 优先级比 STB 高,无论 ID 值为何值,PTB 的帧总会比 STB 优先发送。
- 如果选择 PTB (TBSEL = 0),则设置 TSNEXT = 0。
- 使用 PTB 发送时应置位 TPE 以启动传输。
- STB 具有 FIFO 和优先级两种工作模式。
- 在 FIFO 模式下,STB 中的帧采用“先进先出”的工作模式发送。
- 在优先级模式下,STB 会后台根据帧 ID 进行优先级排序,最高优先级的帧最优先发送。
- 使用 STB 发送,应置位 TSONE 或 TSALL 以启动传输。
- TBUF 和 RBUF 一样,只支持 32 位地址对齐模式访问,不支持 8 位/ 16 位地址对齐模式访问。
当传输完成后,以下传输中断将置位:
- 对于 PTB,如果使能了 TPIE,则 TPIF 置位。
- 对于使用 TSONE 的 STB,如果一个消息已经完成并且使能了 TSIE,则 TSIF 置位。
- 对于使用 TSALL 的 STB,如果所有消息都已完成并且使能了 TSIE,则 TSIF 置位。
- 当 STB 为空时不允许置位 TSONE 或 TSALL。
- STB 优先级模式在对比时,将标准帧的 11 位依次往高位挪到与扩展帧 28:18 位逐位依次对比。挪动后标准帧对应于扩展帧 17:0 位补零。详见示例STB 优先级模式举例说明。
STB 优先级模式举例说明
为了便于理解,下面举几个例子说明,举例的 ID 值分别为 0,0x1235,0x2342,0x12345,0x34345,1,5,0x434234,0x1111111,0x2342342,0x111,0x125,0x222,0x300,0x12345678,0x555,0xC000000。原始的 ID 位排布如STB 优先级模式移位前的 ID 位排布:
28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ID 值 | ID 类型 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 标准 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 0x1235 | 扩展 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0x2342 | 扩展 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0x12345 | 扩展 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0x34345 | 扩展 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 标准 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 5 | 标准 |
0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0x434234 | 扩展 |
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0x1111111 | 扩展 |
0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0x2342342 | 扩展 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0x111 | 标准 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0x125 | 标准 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0x222 | 标准 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x300 | 标准 |
1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0x12345678 | 扩展 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0x555 | 标准 |
0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0xC000000 | 扩展 |
移位过后各个位的排布如STB 优先级模式移位后的 ID 位排布:
28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ID 值 | ID 类型 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 标准 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 0x1235 | 扩展 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0x2342 | 扩展 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0x12345 | 扩展 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0x34345 | 扩展 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 标准 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 5 | 标准 |
0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0x434234 | 扩展 |
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0x1111111 | 扩展 |
0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0x2342342 | 扩展 |
0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x111 | 标准 |
0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x125 | 标准 |
0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x222 | 标准 |
0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x300 | 标准 |
0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0xC000000 | 扩展 |
1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0x12345678 | 扩展 |
1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x555 | 标准 |
从移位后的 ID 可以看出,优先级从 28 位开始逐位往下对比,位值为 0 的,比位值为 1 的优先级要高。特别要注意的是 0x300 和 0xC000000 ,两者调整过后的优先级一致,这种情况下标准帧优先于扩展帧发送。
RBUF 和 RBUF 格式
地址 | 位位置 | 功能描述 | |||||||
---|---|---|---|---|---|---|---|---|---|
- | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | - |
RBUF + 0 | ID(7:0) | ID | |||||||
RBUF + 1 | - | ID(10:8) | ID | ||||||
RBUF + 2 | - | ID | |||||||
RBUF + 3 | ESI | - | ID | ||||||
RBUF + 4 | IDE = 0 | RTR | FDF | BRS | DLC(3:0) | 控制 | |||
RBUF + 5 | KOER | TX | - | 状态 | |||||
RBUF + 6 | CYCLE_TIME(7:0) | TTCAN | |||||||
RBUF + 7 | CYCLE_TIME(15:8) | TTCAN | |||||||
RBUF + 8 | d1(7:0) | 数据字节 1 | |||||||
RBUF + 9 | d2(7:0) | 数据字节 2 | |||||||
… | … | … | |||||||
RBUF + 71 | d64(7:0) | 数据字节 64 | |||||||
RBUF + 72 | RTS(7:0) | CiA603 | |||||||
… | … | … | |||||||
RBUF + 79 | RTS(63:56) | CiA603 |
地址 | 位位置 | 功能描述 | |||||||
---|---|---|---|---|---|---|---|---|---|
- | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | - |
RBUF + 0 | ID(7:0) | ID | |||||||
RBUF + 1 | ID(15:8) | ID(10:8) | ID | ||||||
RBUF + 2 | ID(23:16) | ID | |||||||
RBUF + 3 | ESI | - | ID(28:24) | ID | |||||
RBUF + 4 | IDE = 1 | RTR | FDF | BRS | DLC(3:0) | 控制 | |||
RBUF + 5 | KOER | TX | - | 状态 | |||||
RBUF + 6 | CYCLE_TIME(7:0) | TTCAN | |||||||
RBUF + 7 | CYCLE_TIME(15:8) | TTCAN | |||||||
RBUF + 8 | d1(7:0) | 数据字节 1 | |||||||
RBUF + 9 | d2(7:0) | 数据字节 2 | |||||||
… | … | … | |||||||
RBUF + 71 | d64(7:0) | 数据字节 64 | |||||||
RBUF + 72 | RTS(7:0) | CiA603 | |||||||
… | … | … | |||||||
RBUF + 79 | RTS(63:56) | CiA603 |
地址 | 位位置 | 功能描述 | |||||||
---|---|---|---|---|---|---|---|---|---|
- | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | - |
TBUF + 0 | ID(7:0) | ID | |||||||
TBUF + 1 | - | ID(10:8) | ID | ||||||
TBUF + 2 | - | ID | |||||||
TBUF + 3 | TTSEN | - | ID | ||||||
TBUF + 4 | IDE = 0 | RTR | FDF | BRS | DLC(3:0) | 控制 | |||
TBUF + 8 | d1(7:0) | 数据字节 1 | |||||||
TBUF + 9 | d2(7:0) | 数据字节 2 | |||||||
… | … | … | |||||||
TBUF + 71 | d64(7:0) | 数据字节 64 |
地址 | 位位置 | 功能描述 | |||||||
---|---|---|---|---|---|---|---|---|---|
- | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | - |
TBUF + 0 | ID(7:0) | ID | |||||||
TBUF + 1 | ID(15:8) | ID | |||||||
TBUF + 2 | ID(23:16) | ID | |||||||
TBUF + 3 | TTSEN | - | ID(28:24) | ID | |||||
TBUF + 4 | IDE = 1 | RTR | FDF | BRS | DLC(3:0) | 控制 | |||
TBUF + 8 | d1(7:0) | 数据字节 1 | |||||||
TBUF + 9 | d2(7:0) | 数据字节 2 | |||||||
… | … | … | |||||||
TBUF + 71 | d64(7:0) | 数据字节 64 |