Edit online

数据缓冲器

3 Mar 2025
Read time: 16 minute(s)

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 位排布

1. 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 位排布

2. 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 格式

3. 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

4. RBUF(扩展帧格式)

地址

位位置

功能描述

-

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

5. TBUF(标准帧格式)

地址

位位置

功能描述

-

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

6. TBUF(扩展帧格式)

地址

位位置

功能描述

-

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