TC397 CAN 模块硬件资源与配置详解笔记

一、TC397 CAN 模块总体资源表(解读)

1.1 表格原文

参数 CAN0 CAN1 CAN2 说明
Node size in byte 1024 1024 1024 每个 CAN 模块的私有 RAM 大小
Number of CAN Nodes 4 4 4 每个模块包含的 CAN 控制器数量
Max Standard ID Filters 128 128 128 最多 128 个 11 位 ID 滤波器
Max Extended ID Filters 64 64 64 最多 64 个 29 位 ID 滤波器
Max RxFIFO Structures 2 2 2 最多 2 个接收 FIFO(FIFO0/1)
Max Messages in Rx buffer 64 64 64 每个 Rx FIFO 最多 64 个元素
Max Tx Event Messages 32 32 32 Tx Event FIFO 最多 32 条记录
Max Tx Messages in Tx Buffer 32 32 32 整个模块共享的发送缓冲区数量(硬件邮箱)
Number of Trigger Messages 64 64 64 最多 64 个触发消息

每个 CAN 模块包含 4 个 CAN 控制器(Node),它们共享模块内的 RAM、滤波器、发送/接收缓冲区等资源。


二、核心概念深度解析

2.1 Node size(CAN 模块 RAM)------ 用户疑问重点

问题回顾:Node size 是什么?RAM 干嘛的?为什么决定硬件对象数量?

定义
  • Node size 是指每个 CAN 模块内部专用的静态 RAM 大小(单位字节),TC397 中为 1024 字节。

  • 这块 RAM 不是 CPU 的主内存,而是 CAN 控制器的私有缓存,用于存储所有硬件对象:滤波器表、发送/接收邮箱、FIFO 队列、事件记录等。

RAM 的作用
  • 每配置一个硬件对象(如一个滤波器、一个发送邮箱、一个 Rx FIFO 元素)都会固定占用 RAM 中的若干字节

  • 硬件对象的总 RAM 占用必须 ≤ 1024 字节,否则配置失败。

为什么决定硬件对象数量?

每个硬件对象的 RAM 占用量是固定的(由芯片设计决定)。例如:

  • 一个标准 ID 滤波器占 4 字节

  • 一个发送邮箱(Tx Buffer)占 ~18 字节

  • 一个 Rx FIFO 元素占 ~18 字节

因此,1024 字节的 RAM 总量,限制了你能同时使用的最大对象数量。例如:

  • 如果用满 128 个标准滤波器 → 512 字节

  • 再用满 32 个发送邮箱 → 576 字节

    总和 1088 > 1024,配置会失败。必须减少滤波器或邮箱数量。

实际配置中的意义
  • 在 AUTOSAR 配置工具(如 EB tresos)中,为 CAN 模块分配滤波器数量、邮箱数量、FIFO 深度时,工具会自动计算 RAM 占用,并提示是否超出。

  • 总结:RAM 是硬件对象的"仓库",仓库大小有限,配置时需精打细算。


2.2 滤波器(Filter)的作用

定义

滤波器是 CAN 控制器硬件中的验收过滤条件,用于在硬件层直接判断哪些 ID 的报文可以被接收并存放到指定的接收邮箱或 FIFO。

核心作用
  1. 减轻 CPU 负载:硬件自动丢弃不感兴趣的报文,无需 CPU 参与。

  2. 支持白名单/掩码匹配:可精确匹配 ID,也可用掩码匹配一组 ID。

  3. 与接收对象关联:每个滤波器可指定匹配后的报文存入哪个 Rx Buffer 或 Rx FIFO。

类型与大小(TC397)
滤波器类型 位宽 每个占用 RAM 最大数量
标准 ID 滤波器 11 bit 4 字节 128
扩展 ID 滤波器 29 bit 8 字节 64
举例
  • 某节点只关心 CAN ID = 0x100 和 0x101 的标准帧。

    → 配置 2 个标准滤波器分别匹配这两个 ID。

    → 其他 ID 的报文硬件直接丢弃。

    → 匹配上的报文存入指定的 Rx Buffer 或 FIFO。


2.3 FIFO(先进先出队列)的作用

定义

FIFO 是由多个硬件邮箱(Buffer)串联组成的队列,用于缓存多个报文。TC397 中:

  • Rx FIFO:接收队列,可配置深度(最多 64 个元素)。

  • Tx FIFO/Queue:发送队列(由 Tx Buffer 的一部分组成)。

Rx FIFO 的作用
特性 说明
吸收突发流量 多个报文连续到达时,先存入 FIFO,CPU 可稍后处理,避免丢帧。
降低实时性要求 CPU 不必在每次接收中断中立即读取。
与滤波配合 可将多个 ID 的报文路由到同一个 Rx FIFO,简化软件处理。
Tx Queue 的作用
  • CPU 可以一次将多帧待发送报文放入 Tx Queue,硬件自动依次发送(无需 CPU 等待发送完成)。

  • 提高发送效率,特别适合突发性事件报文。

FIFO 与专用 Buffer 的选择
场景 推荐方案
高频、突发接收 Rx FIFO
低频、重要报文 专用 Rx Buffer(新数据覆盖旧数据,需及时读)
多个发送报文排队 Tx Queue
周期性、高优先级发送 专用 Tx Buffer

2.4 Buffer(邮箱)与 FIFO 的处理时序

Buffer(单个邮箱)
  • 接收:新报文直接覆盖旧内容(若未及时读取)。

  • 发送:每次只能放一帧,等待发送完成才能放下一帧(或使用多个专用 Buffer 并行)。

FIFO(多个 Buffer 组成队列)
  • 接收:硬件按顺序将报文写入 FIFO 的空槽位,CPU 按顺序读取。只要 FIFO 未满,不会丢帧;满时新报文会溢出(可配置溢出行为)。

  • 发送:CPU 将多帧推入 FIFO,硬件从头部取出一帧发送,完成后自动取下一帧。发送 FIFO 空时停止。

时序对比图(ASCII)

text

复制代码
专用 Rx Buffer:
  报文1→ [Buffer] 被覆盖为报文2 → CPU 读取时只能得到最新帧

Rx FIFO (深度3):
  报文1→ [1, , ] 写指针++
  报文2→ [1,2, ] 写指针++
  报文3→ [1,2,3] 写指针++ (满)
  CPU读→  [ ,2,3] 读指针++ → 得到报文1
  报文4→  [ ,2,3] 若 FIFO 满,则报文4可配置为覆盖或丢弃

三、RAM 需配置的元素汇总(以 TC397 为例)

硬件对象 英文 每个元素大小 最大数量 用途
标准滤波器 Standard ID Filter 4 字节 128 接收过滤 11 位 ID
扩展滤波器 Extended ID Filter 8 字节 64 接收过滤 29 位 ID
Rx FIFO 元素 Rx FIFO Element ~18 字节 64 每个 FIFO 接收队列缓存
Rx 专用缓冲区 Rx Dedicated Buffer ~18 字节 64 固定 ID 接收
Tx 缓冲区(邮箱) Tx Buffer 18 字节 32 发送邮箱(可分专用/队列)
Tx Event FIFO 元素 Tx Event Element 4~8 字节 32 发送状态记录
Trigger 消息 Trigger Message 2~4 字节 64 硬件事件触发的发送

总 RAM = 1024 字节。配置时需计算占用总和,严禁超标。


四、配置示例与计算公式

4.1 典型配置方案(中等负载)

对象 数量 单个大小 总字节
标准滤波器 20 4 80
扩展滤波器 5 8 40
Rx FIFO0(深度) 16 18 288
Rx 专用 Buffer 8 18 144
Tx Buffer(专用 + 队列) 24 18 432
Tx Event FIFO 16 4 64
合计 1048(略超,需微调)

实际应使总和 ≤ 1024。可减少 Rx FIFO 深度或滤波器数量。

4.2 发送邮箱分配原则

  • 每个 CAN 模块共有 32 个 Tx Buffer(硬件邮箱)。

  • 可划分:

    • Dedicated Tx Buffer:每个 Buffer 固定用于发送一个特定的 CAN ID(适合周期性或高优先级报文)。

    • Tx Queue:多个 Buffer 组成 FIFO,供低优先级或突发报文共享。

  • 例如:20 Dedicated + 12 Queue → 总 32 个 Buffer。


五、常见问题与解答(来自用户提问)

Q1:Node size 是什么?为什么决定硬件对象数量?

A:Node size 是 CAN 模块内部的私有 RAM 大小。每个硬件对象(滤波器、邮箱等)都占用固定大小的 RAM 空间,因此 RAM 总量直接限制了可配置对象的数量。

Q2:滤波器和 FIFO 分别起什么作用?

A:滤波器是硬件"守门员",只让需要的报文通过;FIFO 是硬件"缓冲池",用于吸收突发流量,缓解 CPU 压力。

Q3:Buffer 和 FIFO 有什么关系?

A:Buffer 是单个邮箱(1 个槽位)。FIFO 是由多个 Buffer 组成的队列(多个槽位),提供先进先出行为。

Q4:发送邮箱只有 32 个,如何满足发送 100 种不同 ID 报文的需求?

A:可以将部分 ID 共享同一个邮箱(即这些 ID 的报文不会同时发送,通过软件队列排队)。或者使用 Tx Queue 模式,由硬件自动排队发送。不能同时拥有超过 32 个并行发送的专用邮箱。

相关推荐
阿歪i2 天前
EB 配置MCAL (1)
s32k144·autosar·mcal
内容为空2 天前
AUTOSAR COM 模块:ComIPduGroup 与 ComSignalGroup 区别笔记
autosar
MESMarketing8 天前
互动分享 | 软件工具的安全合规实践
功能测试·测试工具·matlab·ci/cd·autosar
豆包公子14 天前
程序流监控:AUTOSAR CP 功能安全在裸机 MCU 上的实现(理论篇)
运维·单片机·嵌入式硬件·安全·车载系统·autosar
咸鱼嵌入式19 天前
【AutoSAR】详解CANIF模块
单片机·mcu·车载系统·autosar
正午游巳1 个月前
第二十六节:枚举和数组
汽车·autosar·汽车电子·车载嵌入式
赞哥哥s1 个月前
Autosar 网络管理-诊断请求到底能不能快发Nm报文?
autosar·网络管理·nm
赞哥哥s1 个月前
初始化函数的用法-节约flash空间的“妙计”
autosar·flash·data·bss
正午游巳2 个月前
第二十节:MCAL GPT理论
汽车·嵌入式·autosar·车载嵌入式