数据缓冲器
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 |