欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

英飞凌 AURIX TC3XX 系列微控制器 CAN 外设介绍 (I)

最编程 2024-04-28 18:34:10
...

1、前言

本文讲述的是英飞凌 AURIX TC3XX 系列多核单片机的 MCMCAN 外设介绍。

MCMCAN 遵循 ISO 11898-1 和 ISO 11898-4 做数据收发,能提供 ISO 11898-4 中规定的时间触发通信的所有功能,包括事件同步时间触发通信、全局系统时间和时钟漂移补偿。此外,根据ISO 11898-1,MCMCAN 支持经典 CAN 和 CAN FD 通信。

2、 介绍

2.1、MCMCAN 框架图

从下图可知,一个 MCMCAN 管理多路 CAN 节点(通道)。

2.2、功能列表

以下是MCMCAN模块的功能:

  • 遵循 ISO 11898-1,ISO 11898-4
  • 支持最多64个数据字节的 CAN FD
  • TTCAN 协议1级和2级完全在硬件中
  • 支持事件同步时间触发通信
  • CAN 错误记录
  • AUTOSAR 优化
  • SAE J1939 优化
  • 改进的验收过滤
  • 两个可配置的接收 FIFO
  • 接收高优先级消息时单独发送信号
  • 多达 64 个专用接收缓冲区
  • 多达 32 个专用传输缓冲区
  • 可配置传输 FIFO
  • 可配置传输队列
  • 可配置传输事件 FIFO
  • 主机 CPU 的直接消息 RAM 访问
  • 多个 CAN 节点共享同一 Message RAM
  • 可编程回路测试模式
  • 可屏蔽模块中断
  • 用于连接客户特定主机 CPU 的 8/16/32 位通用从属接口

2.3、中断组

2.3.1、中断源

从下图可知,CAN 中断源的数目较多,可以通过 CAN 的 IE 寄存器启用配置。

 2.3.2、中断控制输入

MCMCAN 的中断输出线 INT_O0-15 连接到中断控制模块,一个 MCMCAN 最多支持 16 个中断源输入,即多路 CAN 节点共享 16 个中断源输入,从下图可知,呈现中断源使用的中断输入信号是一一对应关系,且以中断输入信号最后设置对应的中断源为主(覆盖式设置生效)。

2.4、节点端口

从上述的框架图得知,多路 CAN 节点共享一个 MCMCAN,而 TC3XX 不同系列中 MCMCAN 模块的数目不一样,比如 TC37X 只有两个 MCMCAN,8路CAN节点(一个 MCMCAN 有 4 路 CAN 节点);关于 CAN 节点(通道对应的IO口)和 MCMCAN 的对应关系,如下图(CAN00 表示 MCMCAN0 第一个CAN节点,CAN01 表示 MCMCAN0 第二个CAN节点):

2.5、共享 RAM

一个可配置的消息RAM,用于存储要发送或接收的消息(一个 MCMCAN 只有一个专用 MessageRAM)。消息RAM由MCMCAN模块内的所有CAN节点共享,这和平常使用的 CAN 外设不同,平常使用的每一路 CAN 都有独立的寄存器控制和 FIFO等,这里采用了多路 CAN 共享同一个 Message RAM(共享并不代表不能同时使用,通过初始化配置进行管理即可支持多路 CAN 节点同时工作),下图是每个 MCMCAN 对应的地址信息和内存管理排序。

从上图看,按顺序分为(32位系统,1字 = 4字节):

  • 标准帧过滤规则设置(一个元素大小占 1 字,最多可设置 128 个元素)
  • 扩展帧过滤规则设置(一个元素大小占 2 字,最多可设置 64 个元素)
  • Rx FIFO 0(一个元素可能大小占 4/5/6/7/8/10/14/18 字,但最多可设置 64 个元素)
  • Rx FIFO 1(一个元素可能大小占 4/5/6/7/8/10/14/18 字,但最多可设置 64 个元素)
  • 专用 Rx Buffer(一个元素可能大小占 4/5/6/7/8/10/14/18 字,但最多支持 64 个元素)
  • Tx Event FIFO(一个元素大小占 2 字,最多可设置 32 个元素)
  • Tx Buffer(一个元素大小可能占 4/5/6/7/8/10/14/18 字,但最多可设置 32 个元素)
  • TX 触发空间(一个元素大小占 2 字,最多支持 64 个元素)

这部分空间由用户开发人员进行配置(设置起始地址和元素个数,有些同时需要设置数据宽度,如Rx FIFO等),所有部分的元素之和一定不能超过 MCMCAN 消息 RAM 的总大小。

该 RAM 通过以下方式提高了灵活性和性能:从而有可能消除未使用的部分,并为其他部分扩展足够的内存。在 CAN 消息 RAM 中以动态且连续的方式分配每个部分(按照上图顺序); 但是为了避免超出 RAM 的风险并且出于可靠性的原因,没有将特定的开始和结束地址分配给每个部分。

MCMCAN外设可以配置三种传输机制:专用 Tx Buffer ,Tx Queue 和 Tx FIFO 并且可以通过 Rx Buffer 和 Rx FIFO 进行接收储存。

2.5.1、元素大小设置

1、从上述得知,其中 Rx FIFO、Rx Buffer 和 Tx Buffer 数据宽度所占大小不确定,因此需要根据实际情况进行设置,如果是经典 CAN,则数据宽度为 8Byte,因此 Rx FIFO、Rx Buffer 和 Tx Buffer 占 4 字(元素大小 = 2  + 数据宽度 / 4,单位字),下图可知:

  • R0+R1 是固定的 2 字大小(帧头信息,包括帧标识符、数据长度等字段)
  • R2~Rn 是可设置的大小,数据宽度(帧数据内容)

2、Rx Buffer / FIFO 通过对应的寄存器配置数据宽度,寄存器的值对应数据宽度和所占大小关系如下图:

3、TX Buffer 和上述一致,配置对应的寄存器即可。

2.5.2、元素数目设置

从上述的内存分布图可知,有些元素是可以设置元素数目的,如过滤规则设置、Rx FIFO 和 Tx Buffer。其他的元素数目固定(查阅了资料,没看到可以设置的寄存器,应该是固定元素数目的),其中 Tx Buffer 包含了专用 Tx BufferTx QueueTx FIFO 可设置共用或者单独使用,较为特殊,总数不能大于 32。

  • SIDFC.LSS(标准帧过滤规则设置数目)
  • XIDFC.LSE(扩展帧过滤规则设置数目)
  • RXF0C.F0S(Rx 接收 FIFO 0 数目)
  • RXF1C.F1S(Rx 接收 FIFO 0 数目)
  • TXEFC.EFS(Tx 事件发送 FIFO 数目)
  • TXBC.NDTB(专用 Tx Buffer 数目)
  • TXBC.TFQS(Tx Queue / FIFO 数目,根据配置决定采用 Queue 还是 FIFO)

2.5.3、起始地址设置

设置数据宽度后,就可以根据MCMCAN的RAM空间大小进行合理分配;通过设置每一个元素的数目,根据元素单个大小和数目计算得到该元素需要多大的 RAM 预留空间,防止下一个元素的 RAM 空间和当前元素的 RAM 重叠,导致功能异常;通过以下寄存器写入每个元素的 RAM 起始地址。

  • SIDFCi.FLSSA (标准帧过滤规则设置空间起始地址)
  • XIDFCi.FLESA(扩展帧过滤规则设置空间起始地址)
  • RXF0Ci.F0SA(Rx 接收 FIFO 0 空间起始地址)
  • RXF1Ci.F1SA(Rx 接收 FIFO 1 空间起始地址)
  • RXBCi.RBSA(Rx 接收 Buffer 空间起始地址)
  • TXEFCi.EFSA(Tx 事件发送 FIFO 空间起始地址)
  • TXBCi.TBSA (Tx 发送 Buffer 空间起始地址)
  • TMCi.TMSA(TX 触发空间起始地址)

2.5.4、多节点内存示意图

多个 CAN 节点(通道)在内存分配时可参考下面的内存示意图

原文地址:https://www.cnblogs.com/const-zpc/p/16364406.html