【S32K 进阶之旅】FlexCAN 模块介绍

1.  FlexCAN 模块简介

S32K144 共有3个 FlexCAN 模块,其中只有 FlexCAN0 支持 CAN-FD 模式。报文缓冲区(Message Buffer)大小为 16 字节,每一个 FlexCAN 模块的报文缓冲区数量如下表所示:

 

FlexCAN 模块是根据 ISO 11898-1标准和CAN 2.0 B 协议完成的通信控制器。下图是 FlexCAN 的一个大致框图,描述了在 FlexCAN 模块中的主要子块,包含一个储存相关内容的报文缓冲区,接收全局掩码寄存器(Receive Global Mask Regisiter),接收单个掩码寄存器(Receive Individual Mask Regisiter),接收FIFO滤波器与接收FIFO ID滤波器。相关的子模块在下文描述。

 

CAN 最初是被设计用来作为交通工具的数据总线,满足这个领域一些特殊的需求:

  • 实时处理
  • 在交通环境处于 EMI 环境中可靠运行
  • 性价比高
  • 必需的带宽

 

FlexCAN 模块是CAN协议的一个高完成度版本,带有动态数据率(Flexible Data rate,CAN FD)协议和 CAN 2.0 B 版本协议,支持标准和拓展数据帧和长达 64 字节的数据传输,频率最大可达到 8Mbps。报文缓冲区存在于 FlexCAN 中一个嵌入的 RAM 中。

协议引擎(Protocol Engine,PE)子模块管理 CAN 总线上的串行通信:

  • 请求RAM的权利来接收和发送数据帧
  • 确认收到的数据信息
  • 执行故障处理
  • 检测 CAN FD 数据信息

控制器主机接口(CHI)子模块处理报文缓冲区的发送和接收选择,关注仲裁和 CAN FD 和非 CAN FD 的数据报形式的 ID 匹配

总线接口单元(BIU)子模块为了建立与 CPU 和其他区块的联系,控制来自或前往内部总线接口的访问。时钟和数据总线,中断说出,DMA 和测试信号的权限都要通过 BIU。

 

2.  FlexCAN 模块特性

FlexCAN 模块包括如下特性:

  • 高完成度的带有动态数据率(CAN FD)协议和CAN协议0 B 版本:
  • 标准数据帧
  • 拓展数据帧
  • 0至64字节数据长度
  • 可编程波特率
  • 内容相关地址
  • 遵从 ISO 11898-1 标准
  • 动态邮箱配置,储存1-8,16,32或64字节的数据长度
  • 每一个邮箱都可以配置为发送或接受,均支持标准和拓展数据报格式
  • 每一个邮箱都配有单独 Rx 标志寄存器
  • 功能全面的 Rx FIFO,可以存储最多达6个帧,使用 DMA 功能进行自动的内部指针处理
  • 发送终止功能
  • 动态的数据存储器,总共有32个8数据长度的报文缓冲区,可以配置为 Rx 或者 Tx
  • 可编程的接入 CAN 协议接口的时钟源,可以使外设时钟或者是晶振
  • 没有用来作为发送和接收的 RAM 空间可以用来作为通用的 RAM 空间
  • 只听模式功能
  • 可编程的回环模式,支持自我测试运行
  • 可编程的发送优先级组合:最低 ID,最低缓冲器数量和最高优先级
  • 基于16位自由运转定时器的时间标记(Time stamp),包含节选的外部报时信号(time tick)
  • 被特殊数据报同步的全局网络时间
  • 可屏蔽的中断
  • 对于高优先级的数预报,通过仲裁组合(arbitration scheme)降低延迟时间
  • 低功率模式,可配置的总线唤醒和接手帧匹配
  • 在 CAN FD 数据报在较快速的数据发送率时具有发送延迟补偿特点
  • 自动处理或者软件处理远程请求帧
  • CAN 位时间设定和配置位只在 Freeze 模式可写
  • Tx 邮箱状态(低优先级缓冲器或者空缓冲器)
  • 标识符接受过滤滤波命中指示器(Identifier Acceptance Filter Hit Indicator)
  • 在状态 1 寄存器中 ERROR 的 SYNCH 位可以用来指示模块是与 CAN 总线同步的
  • 发送数据报的 CRC 状态
  • Rx FIFO 全局标志寄存器
  • 在匹配处理时可选的邮箱和 Rx FIFO 的优先级
  • 强力的 Rx FIFO ID 滤波器
  • 当前的 FlexCAN 版本具有 100% 向后兼容性
  • 支持地功率下的虚拟网络功能:Stop 模式

3.  FlexCAN 操作模式

FlexCAN 模块具有以下五种功能模式
  • 正常模式(用户与管理员):

在正常模式下,FlexCAN 模块收发数据帧、处理错误,CAN 总线协议的所有功能都将开启。对于一些控制比较严格的寄存器,在用户模式和管理员模式下访问是有区别的。 

  • 冻结模式:

在配置寄存器 MCR 的 FRZ 和 HALT 位置1时,将开启 FlexCAN 模块的冻结模式。当 MCR[HALT]置位,或 MCU 级请求调试模式(Debug Mode)且 MCR[FRZ_ACK]置位时,FlexCAN 模块将进入冻结模式。在该模式下,将停止收发帧,并将丢失与 CAN 总线的同步。

  • 回环模式:

当控制寄存器1的LPB位置位,模块将进入回环模式。在该模式下,通常用于 FlexCAN 模块自测,从发送器发送出的比特流输出到内部的接收器,输入引脚将会被忽略,并且输出引脚将处于逻辑1状态。在发送报文时,回环模式和正常模式一样,接收器认为接收它自己的报文与接收远程节点的报文相同。FlexCAN 模块为保证能正确接收到自己发送的报文,将忽略应答间隙内的应答字段。发送和接收都可以产生中断(如果中断使能的话)。 

  • 监听模式:

当控制寄存器1的LOM 位置位,FlexCAN 模块将进入监听模式。在该模式下,FlexCAN 模块禁止数据收发,所有的错误计数器都被冻结,且该模块工作在 CAN 总线被动错误模式。只有被其他 CAN 总线节点应答了的报文才可以被监听的节点接收。如果 FlexCAN 模块检测到一个还没有被应答的报文,则标记为一个 BIT0 错误(不会改变 REC),就如它试图应答报文一样。 

  • CAN-FD 主动模式:

在这种模式下,FlexCAN 模块根据 CAN-FD 协议和 CAN 2.0 协议发送和接收所有报文。通过在冻结模式下配置 MCR[FDEN]位字段,可以将 FlexCAN 模块设置为 CAN-FD 主动模式。


 FlexCAN 的三种低功耗模式如下:

  • 禁止模式:

当配置寄存器 MCR[MDIS] 置1且 MCR[LPM_ACK]置1时,FlexCAN 模块将会进入禁止模式。如果 FlexCAN 模块被禁止,那么 FlexCAN 模块将会请求停止 CAN 总线协议引擎的时钟并请求禁止控制器主机接口子模块。通过清除配置寄存器的 MCR[MDIS] 可以退出该模式。 

  • 睡眠模式:

当配置寄存器 MCR[DOZE] 被置1、在 MCU 级请求睡眠模式且 MCR[LPM_ACK] 置1时,FlexCAN 模块将进入睡眠模式。当 FlexCAN 模块处于睡眠模式时,FlexCAN 模块将会请求禁止 CAN 总线协议引擎的时钟并请求禁止 CAN 总线控制器主机接口子系统。当 MCR[DOZE] 被清0、MCU 离开睡眠模式或者检测到 CAN 总线上有活动且自醒机制开启时,FlexCAN 模块将会退出睡眠模式。 

  • 停止模式:

在 MCU 级请求停止模式并且配置寄存器 MCR[LPM_ACK]置1时,FlexCAN 模块将会进入停止模式。在停止模式中,FlexCAN 模块将会将自己置于不活动状态,然后通知 MCU 可以关闭所有的时钟。当移除停止模式请求或者检测到 CAN 总线上有活动且开启了自醒机制时,FlexCAN 模块将会退出该模式。

 

4.  FlexCAN 信号描述

FlexCAN 模块有两个 I/O 信号连接到外部芯片引脚,下表总结了这两种信号。



  • CAN_Rx:这个引脚是 CAN 总线收发器的接收引脚,显性状态由逻辑 0 表示,隐性状态由逻辑 1 表示。
  • CAN_Tx:这个引脚是 CAN 总线收发器的发送引脚,显性状态由逻辑 0 表示,隐性状态由逻辑 1 表示。

5.  FlexCAN 内存映射与数据结构

本节描述 FlexCAN 模块中的寄存器和数据结构。模块的基址取决于芯片的特定内存映射。

 

  • FlexCAN 内存映射

Flex 模块的基址取决于 MCU 部分内存映射,从模块基址开始共有 128 字节的地址空间用于 FlexCAN 模块的寄存器, 随后是从地址偏移量 0x80 开始的嵌入式 RAM 。

每一个独立的寄存器都通过它的全名及助记符来识别,访问权限可以是管理员身份(Supervisor,S)或者无限制(Unrestricted,U)。大部分的寄存器都可以通过对配置寄存器CAN_MCR[SUPV] 编程设置为管理员身份或者无限制访问。

FlexCAN 模块可以使用邮箱和 Rx FIFO 结构存储用于发送和接收CAN 的报文。

下表列出 FlexCAN 的内存映射,其中地址范围从 0x80 到 0x27F 的偏移量分配 32个128位报文缓冲区(MBs)。 


 



  • 报文缓冲区结构

FlexCAN 模块使用时报文缓冲区(Message Buffer,MB)结构如下图所示。CAN 2.0B中使用的扩展帧(29位标识符)和标准帧(11位标识符)中,每个单独的 MB 由 16、24、40或72字节组成,具体大小取决于为消息有效载荷分配的数据字节数(分别对应于8、16、32或64字节)。邮箱使用从 0x80 到 0x27F 的内存区域,当启用 CAN-FD 模式时,每个 MB 的确切地址取决于其有效负载的大小。

 

  • EDL:拓展数据位。该位用来区分是普通 CAN 帧还是 CAN-FD 帧。当 CODE 字段为 0110 时,该位不能置1。
  • BRS:位速率选择位。该位决定在 CAN-FD 模式下是否切换速率。
  • ESI:错误状态位。该位指示发送节点是主动错误还是被动错误。
  • CODE:报文缓冲区码。该字段可以被 MCU 和 FlexCAN 模块访问(读和写),作为报文缓冲区匹配与仲裁过程的一部分,下表为接收/发送 MB 时的 CODE 解码。
  • 接收缓冲区的 MB CODE 如下表

 



注1:SRV,表示处理 MB,可通过读 TIMER 或者被其他的 MB 解锁。

注2:如果一个帧被移入 MB,那么可认为该帧被成功的接收了。

注3:来自于 CAN_CTRL2的远程发送请求位。

注4:Code=1010 不被考虑,并且具有该 CODE 的 MB 应该被丢弃。

注5:对于发送 MB 来说,BUSY 应该在读的时候被忽略,除非 CAN_MCR[AEN] 位被置1,如果该位被置1,那么相应的 MB 将不会参与匹配过程。

  • 发送缓冲区的 MB CODE 如下表

 


  • SRR:远程发送请求替代位。当固定隐性位时,SRR 只能用于扩展帧格式,该位必须由用户将其设置为1来传输,并且和从 CAN 总线上接收到的值一起被存储起来。它可以以隐性位或显性位的形式接收,如果 FlexCAN 以显性位接收,那么认为它是仲裁丢失。当 SRR=1 时,采用隐性位,强制用来以扩展帧模式传输;当 SRR=0 时,采用显性位,对于传输扩展模式是不可用的。
  • IDE:ID扩展位。该位用来表示是标准帧还是扩展帧。当 IDE=1 时,为扩展帧;当 IDE=0 时,为标准帧。
  • RTR:远程发送请求位。该位影响远程帧的行为,是接收过滤器的一部分。如果 FlexCAN 传输1或者0,认为它是仲裁丢失。如果该位以0(显性)传输,在接收时为1(隐性),那么 FlexCAN 模块将会认为这是个错误。如果接收到的值与发送值相同,则认为是一次成功的传输。当 RTR=1 时,如果 MB 为发送 MB,那么表示当前的 MB 可能有一个等待发送的远程请求帧;如果 MB 为接收 MB,那么接收到的远程请求帧将会被存储起来;当 RTR=0 时,表示当前的 MB 有一个数据帧等待传输,在接收 MB 中,它可能会被当成匹配过程。
  • DLC:数据的字节长度。该字段为发送或接收数据的长度。在接收阶段,该字段由 FLexCAN 模块写入,是从接收帧的 DLC(Data Length Code) 字段复制而得到的。在传输阶段,该字段由 MCU 写入,并且会传输与 DLC 值相同的帧长度。当 RTR=1 时,被传输的帧为远程帧且不包括数据字段,不考虑 DLC 字段。下表说明了 DLC 与可用数据字节的对应关系。

 

  • TIME STAMP:时间戳位,为自由运行计数器时间戳。这16位是自由运行计数器的备份,用于在当标识符字段的开始出现在 CAN 总线时捕捉传输或者接收帧。
  • PRIO:本地优先级。该位只有当 CAN_MCR[LPRION_EN] 位置1时才有用,并且只对传输报文缓冲区有效。这些位不会被传输,他们经常被附加到 ID 来定义传输的优先级。
  • ID:帧标识符。在标准帧格式中,只有11位,高位比特(28到18)用来标识接收或者发送的帧,低18位将会被忽略;在扩展帧格式内,所有的位都用来标识传输或者接收的数据帧。
  • DATA BYTE0~63数据字段。最多64字节可用于数据帧。对于接收到的数据帧,以被接收时的格式进行存放。DATA BYTEn 只有当 n 小于 DLC 的值时才有效。对于传输数据帧,该字段用来表示发送的数据帧的长度。

 

由于篇幅有限,下节我们再继续展开S32DS IDE 中的例程烧录及代码讲解。

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论