Edit online

数据缓冲器

3 Mar 2025
Read time: 2 minute(s)
数据缓冲寄存器组是缓存发送和接收帧的存储空间,其访问地址范围为 0x40~0x70,读写共用相同的地址空间。
注: 复位状态下不可访问。
1. 数据缓冲寄存器组

寄存器

偏移地址

标准格式内容

扩展格式内容

CAN_BUF0

0x40

TX/RX 帧信息

TX/RX 帧信息

CAN_BUF1

0x44

TX/RX 标识符 1

TX/RX 标识符 1

CAN_BUF2

0x48

TX/RX 标识符 2

TX/RX 标识符 2

CAN_BUF3

0x4C

TX/RX 数据 1

TX/RX 标识符 3

CAN_BUF4

0x50

TX/RX 数据 2

TX/RX 标识符 4

CAN_BUF5

0x54

TX/RX 数据 3

TX/RX 数据 1

CAN_BUF6

0x58

TX/RX 数据 4

TX/RX 数据 2

CAN_BUF7

0x5C

TX/RX 数据 5

TX/RX 数据 3

CAN_BUF8

0x60

TX/RX 数据 6

TX/RX 数据 4

CAN_BUF9

0x64

TX/RX 数据 7

TX/RX 数据 5

CAN_BUF10

0x68

TX/RX 数据 8

TX/RX 数据 6

CAN_BUF11

0x6C

保留

TX/RX 数据 7

CAN_BUF12

0x70

保留

TX/RX 数据 8

  • 发送缓冲寄存器:CPU 对数据缓冲寄存器组的写操作访问,配置待发送报文,指定报文的帧类型、帧格式、帧标识符和数据。CPU 通过控制寄存器 CAN_MCR 配置发送报文模式:
    • 正常报文发送:TX_REQ 置 1。
    • 自发自收:SELF_REQ 置 1。
    • 单次发送:TX_REQ 和 ABORT_REQ 同时置 1。
  • 接收缓冲寄存器:CPU 对数据缓冲寄存器组的读取操作访问,接收缓冲寄存器映射到缓冲 FIFO 中的第一条报文,获取第一条报文的帧类型、帧格式、帧标识符和数据。

    读取完接收缓冲寄存器中的报文后,CPU 通过控制寄存器 CAN_MCR 中的 RXB_REL 置 1 来释放接收缓冲寄存器。

    若接收 FIFO 中仍有待处理的报文,按照接收报文的先后次序,将最早接收到的报文映射到接收缓冲寄存器中。

  • 缓冲 FIFO: 是一个 64 字节大小的内部缓冲器,以先进先出原则存储接收到的报文。
    1. 接收缓冲寄存器为 FIFO 中可访问窗口,偏移地址 0x40~0x70,将被映射到 FIFO 中的第一条报文。

      一条报文可在 FIFO 中占 3 ~ 13 字节空间,其中字节序与接收缓冲寄存器相同。

    2. 当控制器接收到一条报文时,接收数据计数器 RXC 增加 1,最大值为 64。

      如果 FIFO 中有足够空间,报文内容将被写入到 FIFO 中。

    3. CPU 读取接收缓冲寄存器中的报文后,通过将 RXB_REL 置 1,释放 FIFO 中第一条报文所占的空间,RXC 将减小 1。
    4. 接收缓冲寄存器接着映射 FIFO 中的下一条报文。
  • FIFO 数据溢出:任何情况下,FIFO 中可以存储的报文数量取决于各条报文的长度。当 FIFO 中没有足够空间完整地存储新报文时,控制器会产生数据溢出,通过状态位或数据溢出中断反馈给 CPU。

    FIFO 在内部将溢出报文标记为无效,后续接收到的溢出报文仍然将增加 RXC 到最大值 64。为了读取接收 FIFO 中的所有有效报文并清除所有溢出报文,应重复调用 RXB_REL,直到 RXC 为 0。