logo资料库

关于FlexCAN的芯片资料.pdf

第1页 / 共58页
第2页 / 共58页
第3页 / 共58页
第4页 / 共58页
第5页 / 共58页
第6页 / 共58页
第7页 / 共58页
第8页 / 共58页
资料共58页,剩余部分请下载后查看
第 48 章 CAN(FlexCAN) FlexCAN 模块是一个通信控制器,该模块实现了 CAN 协议即 CAN2.0B 协议规范。下图为一 个常用的框图,介绍了 FlexCAN 模块的的字模块,包括了用来存储消息缓冲的相关联的内存区 域,Rx 全局掩码寄存器、Rx 私有掩码寄存器、Rx 先进先出队列以及 Rx 队列标识过滤器。各 个子模块的功能将在随后的章节介绍。 图 48-1 FlexCAN 框图 48.1.1 概述 CAN 协议主要(但不是唯一)是设计用于汽车串口总线使用,在以下这些方面满足了规范 的要求:实时处理、汽车在电磁干扰环境下的可靠操作、成本效益以及有带宽要求。FlexCAN 模块完全实现了 CAN 协议规范 V2.0B 版本,该版本支持标准的与扩展的消息帧。消息缓冲区存 储在一个专用于 FlexCAN 模块的 RAM 区。可以参考芯片配置细节来了解在 MCU 内配置的消息缓 冲区的数目。 CAN 协议引擎(PE)子模块管理 CAN 总线上的串行通信,请求存取 RAM 接收和传输消息帧, 验证接收到的消息以及进行错误处理。控制器主机接口子模块用来选择接收和传输的消息缓冲 区,使用仲裁与 ID 匹配算法,以建立同 CPU 或者其他模块的连接。时钟、地址、数据总线或 者中断输出以及测试信号通过总线接口单元都可以进行访问。
48.1.2 FlexCAN 模块特征 FlexCAN 模块具有以下鲜明的传统特征: 1.完全支持 CAN2.0B 协议:标准数据帧;扩展数据帧;0~8 字节的数据长度;可编程控 制的波特率,数据传输速率可达 1Mbps;与内容相关的寻址防止。 2.0 到 8 字节长度报文缓冲区; 3.每个报文缓冲区都可以配置成发送缓冲区或者接受缓冲区,支持标准和扩展帧格式; 4.每个消息缓冲区都有自己的接受掩码控制寄存器; 5.全功能的接受队列,该队列可以存储最多 6 个帧,并且自动进行内部指针处理; 6.传输中止能力; 7.可编程的 CAN 协议接口的时钟源,可以是总线时钟也可以是外部晶振; 8.没有使用的结构空间可以当成普通的 RAM 空间使用; 9.可编程的回环模式支持自测试; 10.可编程的传输优先级机制:最低 ID、最少缓冲区数目或者最高优先级; 11.基于 16 位自由运行定时器的时间戳机制; 12.全局网络时间,通过一个特殊的帧来同步; 13.中断掩码; 14.独立的传输媒介(假定一个外部收发器); 15.对于高优先权信息具有短的相应时间; 16.低功耗模式,当总线激活时可以编程实现从低功耗模式唤醒。 此外,下面的最新的主要特征也添加到了先前的 FlexCAN 版本中: 1.远程请求帧可以被自动或者软件处理; 2.正常模式下 ID 过滤配置的安全机制; 3.只有在“Freeze”模式下进行的 CAN 比特时间设置与配置比特; 4.发送缓冲区状态(最低优先级缓冲区或者空缓冲区); 5.用于接收帧的 IDHIT 寄存器; 6.SYNC 比特状态位用来指示模块已经与 CAN 总线同步; 7.调试寄存器 8.用于报文的 CRC 状态; 9.接收队列全局掩码寄存器; 10.在匹配过程中接受缓冲区与接受队列可选择的优先级; 11.强大的接受队列 ID 过滤功能,能够匹配接受的 ID 是扩展的 128 字节、标准的 256 字 节或者 512 部分(8 比特)ID,最多 32 个匹配能力。 12.100%兼容 FlexCAN 以前版本。 48.1.3 操作模式 FlexCAN 模块一共具有四种不同的功能模式:正常模式(用户和管理员)、冻结模式、监 听模式以及闭环模式。同样具有三种不同的低功耗模式:禁止模式、睡眠模式以及停止模式。 1.正常模式(用户与管理员) 在正常模式下,CAN 模块收发数据帧、处理错误,CAN 协议的所有功能全部开启。对于一 些控制比较严格的寄存器,在用户模式和管理员模式下访问时又区别的。 2.冻结模式
如果 MCR 寄存器的 FRZ 位被置位,那么将开启 CAN 模块的冻结模式。当 MCR 的 HALT 位置 位时或者在 MCU 级请求调试模式(Debug Mode)并且 MCR 寄存器的 FRZ_ACK 位被置位时,CAN 模块将进入到冻结模式。在该模式下,将停止收发帧,并且将丢失与 CAN 总线的同步。有关该 模式的更多信息可以参见“冻结模式”节。 3.监听模式 当控制 1 寄存器的 LOM 位置位时,模块将进入到监听模式。在该模式下,CAN 模块禁止数 据收发,所有的错误计数器都被冻结,且该模块工作在 CAN 被动错误模式。只有被其他 CAN 节点应答了的报文才可以被监听的节点接受。如果 FlexCAN 检测到一个还没有被应答的报文, 则标记为一个 BIT0 错误(不会改变 REC),将如同它试图应答报文一些样。 4.回环模式 如果控制 1 寄存器的 LPB 位被置位,模块将进入到回环模式。在该模式下,FlexCAN 工作 在内部闭环模式用于自测。从发送器发送出的比特流输出回内部的接收器输入。输入引脚将会 被忽略,并且输出引脚将处于逻辑 1 状态。发送报文时,FlexCAN 模块和正常模式一样,而接 收器则认为接受它自己的报文与接受远程节点的报文相同。FlexCAN 为保证能正确接受到自己 发送的报文,将忽略应答间隙内的应答字段。报文接受发送时,如果中断使能则 FlexCAN 将向 CPU 产生中断。 5.模块禁止模式 当 MCR 寄存器的 MDIS 位被 CPU 置位并且 LPM_ACK 位被 FlexCAN 模块置位时,模块将会进 入该低功耗模式。如果模块被禁止,那么模块将会请求停止 CAN 协议引擎的时钟并且请求禁止 控制器主机接口子模块。通过忽略 MCR 寄存器 MDIS 位可以退出该模式。有关该模块的更多信 息参考“模块禁止模式”节。 6.睡眠模式 当 MCR 寄存器的 DOZE 位被置位、在 MCU 级请求睡眠模式并且由 FlexCAN 置位 MCR 寄存器 的 LPM_ACK 位时模块将进入到该低功耗模式。当模块处于睡眠模式时,FlexCAN 将会请求禁止 CAN 协议引擎的时钟并且请求禁止 CAN 控制器主机接口子系统。当 MCR 寄存器的 DOZE 位被忽 略(negated)、当 MCU 离开睡眠模式时或者当检测到 CAN 总线上有活动并且自醒机制开启时模 块将退出睡眠模式。更多信息可以参考“睡眠模式”这一节的内容。 7.停止模式 在 MCU 级请求模式并且由 FlexCAN 模块置位 MCR 寄存器的 LPM_ACK 位时,模块将会进入到 该低功耗模式。在停止模式中,模块将会将自己置于不活动状态,然后通知 CPU 可以关闭所有 的时钟。当请求离开停止模式或者当检测到 CAN 总线上有或者并且开启了自醒即使时,FlexCAN 将会退出该模式。有关更多信息可以参考“停止模式”这一节的内容。 48.2 FlexCAN 信号模式 FlexCAN 一共有两个 IO 引脚用来连接外部的 MCU 引脚。下表将列出这两个引脚,在随后 的章节将会有这两个引脚的介绍。 表 48-1 FlexCAN 模块引脚描述 引脚 CAN Rx CAN Tx 描述 CAN接受引脚 CAN输出引脚 I/O 输入 输出
48.2.1 CAN Rx 引脚 该引脚为来自于 CAN 总线收发器的接受数据引脚。显性状态表示逻辑‘0’;隐形状态表示 逻辑‘1’。 48.2.2 CAN Tx 引脚 该引脚为来自于 CAN 总线收发器的发送引脚。显性状态代表逻辑‘0’,隐形状态代表逻辑 ‘1’。 48.3 内存映射/寄存器定义 本节介绍 FlexCAN 模块中的寄存器以及数据结构。模块的基址取决于 MCU 部分内存映射。 48.3.1 FlexCAN 内存映射 下表中为 FlexCAN 模块全部的内存映射。 从模块基址开始一共有 128 字节的地址空间用于 FlexCAN 模块的寄存器定义,模块基址开 始与 0x0080。 每一个独立的寄存器都通过其唯一的名字及助记符来表示。访问权限可以是管理员身份或 者无限制。大部分的寄存器都可以通过对 MCR 寄存器的 SUPV 位编程配置成管理员身份或者无 限制访问。表 48-2 的访问权限一列定义了这些寄存器的访问权限 S/U。 寄存器 IFLAG2 与 IMASK2 位预留空间,这依赖于设备可以用的消息缓冲区个数。 表 48-2 模块内存映射 寄存器 访问权限 硬件复位 是否受影响 软件复位 是否受影响 模块配置寄存器(MCR) 控制寄存器 1(CTRL1) 自由运行定时器(TIMER) 接受全局掩码寄存器(RXMGMASK) 接受缓冲 14 掩码寄存器(RX14MASK) 接受缓冲 15 掩码寄存器(RX15MASK) 错误计数寄存器(ECR) 错误和状态寄存器 1(ESR1) 中断掩码寄存器 2(IMASK2) 中断掩码寄存器 1(IMASK1) 中断标志寄存器 2(IFLAG2) 中断标志寄存器 1(IFLAG1) 控制寄存器 2(CTRL2) 错误和状态寄存器 2(ESR2) 个别匹配元素更新寄存器(IMUER) 丢失接受帧寄存器(LRFR) S S/U S/U S/U S/U S/U S/U S/U S/U S/U S/U S/U S/U S/U S/U S/U 是 是 是 否 否 否 是 是 是 是 是 是 是 是 是 是 是 否 是 否 否 否 是 是 是 是 是 是 否 是 是 是
CRC 寄存器(CRCR) 接受队列全局掩码寄存器(RXFGMASK) 接受队列信息寄存器(RXFIR) 报文缓冲 接受私有掩码寄存器 S/U S/U S/U S/U S/U 是 否 否 否 否 是 否 否 否 否 FlexCAN 模块可以使用邮箱和 Rx 接受队列结构存储 CAN 报文以用于传输与接受。 FlexCAN 模块的内存映射包括 16 个 128 比特的报文缓冲(MBs),该缓冲区占据了偏移地 址的 0x80 到 0x17F。 CAN 内存映射 绝对地址 寄存器名字 宽度 访问权 复位值 章节 4002_4000 模块配置寄存器(CAN0_MCR) 4002_4004 控制寄存器1(CAN0_CTRL1) 4002_4008 自由运行定时器(CAN0_TIMER) 4002_4010 接受邮箱全局掩码寄存器 (CAN0_RXMGMASK) (Bit) 限 32 32 32 32 R/W R/W R/W R/W D890_000Fh 48.3.2 0000_0000h 48.3.3 0000_0000h 48.3.4 FFFF_FFFFh 48.3.5 4002_4014 接收14掩码寄存器 32 R/W FFFF_FFFFh 48.3.6 (CAN0_RX14MASK) 4002_4018 接收15掩码寄存器 32 R/W FFFF_FFFFh 48.3.7 (CAN0_RX15MASK) 4002_401C 错误计数寄存器(CAN0_ECR) 4002_4020 错误与状态寄存器1(CAN0_ESR1) 4002_4024 中断掩码寄存器2(CAN0_IMASK2) 4002_4028 中断掩码寄存器1(CAN0_IMASK1) 4002_402C 中断标志寄存器2(CAN0_IFLAG2) 4002_4030 中断标志寄存器1(CAN0_IFLAG1) 4002_4034 控制寄存器2(CAN0_CTRL2) 4002_4038 错误与状态寄存器2(CAN0_ESR2) 4002_4044 CRC寄存器(CAN0_CRCR) 4002_4048 接收队列全局掩码寄存器 (CAN0_RXFGMASK) 32 32 32 32 32 32 32 32 32 32 R/W R/W R/W R/W R/W R/W R/W R/W R 0000_0000h 48.3.8 0000_000h 48.3.9 0000_0000h 48.3.10 0000_0000h 48.3.11 0000_0000h 48.3.12 0000_0000h 48.3.13 0048_0000h 48.3.14 0000_0000h 48.3.15 0000_0000h 48.3.16 R/W FFFF_FFFFh 48.3.17 4002_404C 接收队列信息寄存器(CAN0_RXFIR) 32 R 0000_000Xh 48.3.18 4002_4880 接收个别掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN0_RXIMR0) 4002_4884 接受个别掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN0_RXIMR1) 4002_4888 接受个别掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN0_RXIMR2) 4002_488C 接受个别掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN0_RXIMR3)
4002_4890 接受个别掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN0_RXIMR4) 4002_4894 接受个别掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN0_RXIMR5) 4002_4898 接受个别掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN0_RXIMR6) 4002_489C 接受个别掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN0_RXIMR7) 4002_48A0 接受个别掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN0_RXIMR8) 4002_48A4 接受个别掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN0_RXIMR9) 4002_48A8 接受个别掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN0_RXIMR10) 4002_48AC 接受个别掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN0_RXIMR11) 4002_48B0 接受个别掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN0_RXIMR12) 4002_48B4 接受个别掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN0_RXIMR13) 4002_48B8 接受个别掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN0_RXIMR14) 4002_48BC 接受个别掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN0_RXIMR15) 400A_4004 控制寄存器1(CAN1_CTRL1) 400A_4008 自由运行定时器(CAN1_TIMER) 400A_4010 接受邮箱全局掩码寄存器 (CAN1_RXMGMASK) 32 32 32 R/W R/W R/W 0000_0000h 48.3.3 0000_0000h 48.3.4 FFFF_FFFFh 48.3.5 400A_4014 接收14掩码寄存器 32 R/W FFFF_FFFFh 48.3.6 (CAN1_RX14MASK) 400A_4018 接收15掩码寄存器 32 R/W FFFF_FFFFh 48.3.7 (CAN1_RX15MASK) 400A_401C 错误计数寄存器(CAN1_ECR) 400A_4020 错误与状态寄存器1(CAN1_ESR1) 400A_4024 中断掩码寄存器2(CAN1_IMASK2) 400A_4028 中断掩码寄存器1(CAN1_IMASK1) 400A_402C 中断标志寄存器2(CAN1_IFLAG2) 400A_4030 中断标志寄存器1(CAN1_IFLAG1) 400A_4034 控制寄存器2(CAN1_CTRL2) 400A_4038 错误与状态寄存器2(CAN1_ESR2) 400A_4044 CRC寄存器(CAN1_CRCR) 32 32 32 32 32 32 32 32 32 R/W R/W R/W R/W R/W R/W R/W R/W R 0000_0000h 48.3.8 0000_000h 48.3.9 0000_0000h 48.3.10 0000_0000h 48.3.11 0000_0000h 48.3.12 0000_0000h 48.3.13 0048_0000h 48.3.14 0000_0000h 48.3.15 0000_0000h 48.3.16
400A_4048 接收队列全局掩码寄存器 32 R/W FFFF_FFFFh 48.3.17 (CAN1_RXFGMASK) 400A_404C 接收队列信息寄存器(CAN1_RXFIR) 32 R 0000_000Xh 48.3.18 400A_4880 接收私有掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN1_RXIMR0) 400A_4884 接受私有掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN1_RXIMR1) 400A_4888 接受私有掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN1_RXIMR2) 400A_488C 接受私有掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN1_RXIMR3) 400A_4890 接受私有掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN1_RXIMR4) 400A_4894 接受私有掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN1_RXIMR5) 400A_4898 接受私有掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN1_RXIMR6) 400A_489C 接受私有掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN1_RXIMR7) 400A_48A0 接受私有掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN1_RXIMR8) 400A_48A4 接受私有掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN1_RXIMR9) 400A_48A8 接受私有掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN1_RXIMR10) 400A_48AC 接受私有掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN1_RXIMR11) 400A_48B0 接受私有掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN1_RXIMR12) 400A_48B4 接受私有掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN1_RXIMR13) 400A_48B8 接受私有掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN1_RXIMR14) 400A_48BC 接受私有掩码寄存器 32 R/W 0000_000Xh 48.3.19 (CAN1_RXIMR15) 48.3.2 模块配置寄存器(CANx_MCR) 该寄存器用来定义全局系统配置 地址:CAN0_MCR-4002_4000h(基址)+0h(偏移地址) = 4002_4000h Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
读 写 Y D R T O N I S D M Z R F N F E R T L A H 无 效 K C A Z R F 无 效 K S M K A W T S R T F O S V P U S K A W F L S N E N R W 预 留 K C A M P L 无 效 I S D X R S E Z O D Q M R I 复位 1 1 0 1 1 0 0 0 1 0 0 1 0 0 0 0 Bit 读 15-14 13 12 11-10 9-8 7 6-0 0 0 IDMA 0 MAXMB 写 无效 N E O R P L I 无效 N E A 无 效 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 复位 CANx_MCR 字段描述 字段 说明 31(MDIS) 模块禁止位。该位用来控制是否禁止FlexCAN模块。当禁止时,FlexCAN模块将禁止CAN 协议引擎与控制器主机接口子系统的时钟。该位是MCR寄存器中唯一一位不受软件复位 影响的位。 0 开启FlexCAN模块 1 禁止FlexCAN模块 30(FRZ) 冻结使能位。当MCR寄存器的HALT位置位或者当在MCU级请求调试模式时,该位用来 指定FlexCAN模块的行为。当FRZ被置位,FlexCAN将会进入到冻结模式。该位置0将 使FlexCAN模块退出冻结模式。 0 不开启进入到冻结模式 1 开启进入到冻结模式 29(RFEN) 开启接收队列。该位用来控制是否开启接收队列。当该位被置位时,MBs0到MBs5不能 用于正常的接受与传输,因为其相应的内存空间(0x80~0xDC)被队列引擎以及MBs (最多32个,这取决于CTRL2[RFEN]位的设置)用于接收队列ID过滤器表元素。RFEN 同样影响每一个CAN的外设时钟的最小个数的定义,正如在表“外设时钟频率与CAN比 特率之间的最小比率”中描述的一样。该位只有在冻结模式下才能被写入,在其他模式 下该位被通过硬件的方法锁定。 0 没有开启接受队列 1 开启了接受队列
分享到:
收藏