当前位置:首页 > 第10章 K60的CAN总线开发方法
4. 过载帧
过载帧由CAN控制器的硬件进行处理,与用户编程无关。下面概要说明发送过载帧的工作机制。
过载帧用于在先行和后续数据帧(或远程帧)之间提供一附加的延时。过载帧包括两个位场:过载标志和过载界定符。过载帧的组成如图10-11所示。
图10-11 过载帧的组成
有三种过载的情况会引发过载帧的传送:
(1) 接收器的内部情况(此接收器对于下一数据帧或远程帧需要有一延时)。 (2) 在间歇的第一和第二字节检测到一个“0”位。 (3) 如果CAN节点在错误界定符或过载界定符的第8位(最后一位)采样到 一个0位,节点会发送一个过载帧(不是错误帧)。
根据过载情况1而引发的过载帧只允许起始于所期望的间隙的第一个位时间, 而根据情况2和情况3引发的过载帧应起始于所检测到“0”位之后的位。通常,为了延时下一个数据帧或远程帧,两种过载帧均可产生。
过载标志由6个0位组成。由于过载标志的格式破坏了间隙域的固定格式,因此,所有其他的节点都检测到过载条件,并与此同时发出过载标志。如果在间隙的第3个位期间检测到0位,则这个位将被解释为帧的起始。
过载界定符包括8个1位,过载标志被传送后,节点就一直监视总线,直到检测到一个从0位到1位的跳变为止。这时,总线上的每个节点完成了各自过载标志的发送,并开始同时发送其余7个1位。 10.1.5 位时间
所谓位时间,是指发送一位所需要的时间。实际工作过程的位时间与系统设定的位时间少有偏差,把理想情况下位时间称为标称位时间(Nominal Bit Time),相应的位速率(每秒发送的位数)称为标称位速率。标称位速率=1/标称位时间。
一个标称位时间分为4个时间段:同步段(SYNC_SEG)、传播段(PR0G_SEG)、 相位段1 (PHASE_SEG1)、相位段2 (PHASE_SEG2),如图10-12所示。CAN总线初始化时要通过相运的寄存器对传播段、相备段1及相位段2的时间长度进行设置。
图10-12 标称位时间组成示意图
同步段(SYNC_SEG): 连接在总线上的多个CAN节点通过同步段实现时序调整同步进行接收和发每工作。由1电平到0电平的跳变或由0电平到1电平的跳变最好出现在该段中。
传播段(PR0G_SEG): 传播段用于补偿网络内的物理延时时间,它是总线上输入比较器延时和氣出驱动器延时总和的2倍。
相位段1(PHASE_SEG1)、相位段2(PHASE_SEG2):相位段用于补偿边沿阶段的误差,这两个段可以通过重新同步加长或缩短。
采样点(Sample Point):采样点是读总线电平并解释各位的值的一个时间点,采样点位于相位段1之后。
信息处理时间(Information Processing Time): 信息处理时间是以一个采样点作为起始的时间段。采样点用于计算后续位的位电平。
最小时间份额(Time Quanta, Tq):最小时间份额是取自振荡器周期的固定时间单元,也称为串行时钟Sclock周期。位时间与最小时间份额TQ的关系是
位时间=m*Tq
式中,m为可编程的预比例因子,其范围是1?32之间的整数,m的计算公式为
m=同步段+传播段+相位段1+相位段2
通常,同步段为1个Tq,传播段可设置成1、2、3、?、8个Tq,相位段1可设置成1、2、3、?、8个Tq,相位段2为相位段1和信息处理时间之间的最大值,信息处理时间少或等于2个Tq。一个位时间总的Tq值可以设置在8?25。
在确定一个CAN总线的通信速率时,主要根据上述参数确定。
10.2 FlexCAN模块概述与编程要点
FlexCAN模块是一种CAN协议的通信单元。K60的FlexCAN模块支持CAN2.0B协议中标准帧信息格式和扩展帧信息格式,不仅拥有FlexCAN模块先前版本的传统特征,更拥有CAN2. 0B协议本身新的特性。 10. 2. 1 FlexCAN模块特征
1. 传统特征
(1) 完全支持CAN2.0B协议:标准数据帧;扩展数据帧;0?8字节的数据长度;可编程控制的波特率,数据传输速率可达1 Mbps;与内容相关的寻址方式;
(2) 0到8字节长度报文缓冲区;
(3) 每个报文缓冲区都可以配置成发送缓冲区或者接收缓冲区,支持标准和扩展帧格式;
(4) 每个消息缓冲区都有自己的接收掩码控制寄存器;
(5) 全功能的接收队列,该队列可以存储最多6个帧,并且自动进行内部指 针处理; (6) 传输中止能力;
(7) 可编程的CAN协议接口的时钟源,可以是总线时钟也可以是外部晶振; (8) 没有使用的结构空间可以当成普通的RAM空间使用; (9) 可编程的回环模式,支持自测试;
(10) 可编程的传输优先级机制,最低ID、最少缓冲区数目或者最高优先级; (11) 基于16位自由运行定时器的时间戳机制; (12) 全局网络时间,通过一个特殊的帧来同步; (13) 中断掩码;
(14) 独立的传输媒介(假定一个外部收发器); (15) 高优先权信息具有短的响应时间;
(16) 低功耗模式,当总线激活时可以通过编程实现从低功耗模式唤醒。 2. 较以前版本新添加的特性
(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以前版本。 10.2.2 CAN模块寄存器
因为FlexCAN有两路通道,所以有2组顺序排列的寄存器,每个模块共有33个寄存器。表14-3给出了 CAN0通道的33个寄存器的内存映射,CAN1通道的寄存器名、复位值与CAN0通道相同,基地址则为0x400A_4000。
表 CAN通道寄存器映射 十六进期 寄存器名称 权限 复位值 绝对地址 4002_4000 CAN供块配置寄存器(CAN0_MCR) 32 读/写 D890_000Fh 4002_4004 CAN控制寄存器(CAN0_CTRL1) 32 读/写 0000_0000h 4002_4008 CAN自由运行定时器(CAN0_TIMER) 4002_4010 CAN接受邮箱全局掩码寄存(CAN0_RXMGMASK) 4002_4014 CAN接收14掩码寄存器(CAN0_RX14MASK) 4002_4018 CAN接收15掩码寄存器(CAN0_RX15MASK) 4002_401C CAN错误计数寄存器(CAN0_ECR) 4002_4020 CAN错误与状态寄存器1(CAN0_ESR1) 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 读/写 读/写 读/写 读/写 读/写 读/写 读/写 读/写 读/写 读/写 读/写 读/写 读 读/写 读 读/写 读/写 0000_0000h FFFF_FFFFh FFFF_FFFFh FFFF_FFFFh 0000_0000h 0000_0000h 0000_0000h 0Q00_0000h 0000_0000h 0000_0000h 0000_0000h 0000_0000h 0000_0000h FFFF_FFFFh 未定义 未定义 未定义 4002_4024 CAN中断掩码寄存器2(CAN0_IMASK2) 4002_4028 CAN中断掩码寄存器1(CAN0_IMASK1) 4002_402C CAN中断标志寄存器2(CAN0_IFLAG2) 4002_4030 CAN中断标志寄存器1(CAN0_IFLAG1) 4002_4034 CAN 控制寄存器2(CAN0_CTRL2) 4002_4038 CAN错误与状态寄存器2(CAN0_ESR2) 4002_4044 CRN 寄存器 (CAN0_CRCR) 4002_4048 CAN接收队列全局掩码寄存器(CAN0_RXFGMASK) 4002_404C CAN接收队列信息寄存器(CAN0_RXFIR) 4002_4880 CAN接收个别掩码寄存器(CAN0_RXIMR0) 4002_4884 CAN接受个别掩码寄存器(CAN0_RXIMR1) 4002_4888 CAN接受个别掩外寄存器(CAN0_RXIMR2) 4002_488C CAN接受个别掩码寄存器(CAN0_RXIMR3) 4002_4890 CAN接受个别掩码寄存器(CAN0_RXIMR4) 4002_4894 CAN接受个别淹码寄存器(CAN0_RXIMR5) 4002_4898 CAN接受个别掩码寄存器(CAN0_RXIMR6) 4002_489C CAN接受个别掩码寄存器(CAN0_RXIMR7) 4002_48A0 CAN接受个别掩码寄存器(CAN0_RXIMR8) 4002_48A4 CAN接受个别掩码寄存器(CAN0_RXIMR9) 4002_48A8 CAN接受个别掩码寄存器(CAN0_RXIMR10) 4002_48AC CAN接受个别掩码寄存器(CAN0_RXIMR11) 4002_48B0 CAN接受个别掩码寄存器(CAN0_RXIMR12) 4002_48B4 CAN接受个别掩码寄存器(CAN0_RXIMR13) 4002_48B8 CAN接受个别掩码寄存器(CAN0_RXIMR14) 4002_48BC CAN接受个别掩码寄存器(CAN0_RXIMR15) 32 32 32 32 32 32 32 32 32 32 32 32 32 32 读/写 读/写 读/写 读/写 读/写 读/写 读/写 读/写 读/写 读/写 读/写 读/写 读/写 读/写 未定义 未定义 未定义 未定义 未定义 未定义 未定义 未定义 未定义 未定义 未定义 未定义 未定义 未定义
由于FlexCAN模块寄存器众多,这里挑选其中常用的寄存器加以详细介绍。这些寄存器均以“CANx_”前缀开头,其中“x”为0?1,代表FlexCAN模块的两个模块号。在实现CAN总线通信功能中主要涉及的寄存器有:模块配置寄存器(CANx_MCR)、控制寄存器1(CANx_CTRL1)、中断标志寄存器1(CANx_IFLAG1)、控制寄存器2(CANx_CTRL2)等。本小节将具体介绍以上寄存器,其他寄存器请查阅K60的官方技术文档。
1. CAN模块配置寄存器(CANx_MCR)
该寄存器主要用于使能FlexCAN模块的全局配置。
MDIS——CAN模块禁用位,用来控制是否禁止FlexCAN模块工作。当FlexCAN模块被禁止时,FlexCAN模块会禁止CAN总线协议引擎的时钟源和禁止主模块和子模块的接口控制。
共分享92篇相关文档