首页 CAN通信接口

CAN通信接口

举报
开通vip

CAN通信接口 第 15章 CAN 通信接口 控制器局域网(Control Area Network,CAN)是德国BOSCH公司于20世纪80年代为解 决现代汽车中众多的控制与检测仪器之间的数据交换而开发的一种高性能串行通信协议, 其通信特点是:实时性传输,抗电磁干扰强,高效率以及高带宽等。一些著名的汽车制造 厂商如BENZ(奔驰)、BMW(宝马)、PORSCHE(保时捷)等,都使用CAN来实现汽车内部控制 系统与检测和执行机构间的数据通信。目前,支持CAN协议的有Intel、Motorola、Philips、 NEC...

CAN通信接口
第 15章 CAN 通信接口 控制器局域网(Control Area Network,CAN)是德国BOSCH公司于20世纪80年代为解 决现代汽车中众多的控制与检测仪器之间的数据交换而开发的一种高性能串行通信 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 , 其通信特点是:实时性传输,抗电磁干扰强,高效率以及高带宽等。一些著名的汽车制造 厂商如BENZ(奔驰)、BMW(宝马)、PORSCHE(保时捷)等,都使用CAN来实现汽车内部控制 系统与检测和执行机构间的数据通信。目前,支持CAN协议的有Intel、Motorola、Philips、 NEC、Siemens等百余家国际著名大公司。由于其良好的功能特性和极高的可靠性,CAN已 经被广泛应用于各个领域。近几年来,CAN总线开始进入我国各个行业的实际应用,正逐 渐受到大家的重视。本章以Freescale的MSCAN08模块为例,介绍CAN通信接口接口的实现 方法,并给出了编程实例。 15.1 CAN技术 规范 编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载 CAN通信协议主要描述设备之间的信息传递方式。CAN各层的定义与开放系统互连模 型OSI一致,每一层与另一设备上相同的那一层通信。实际的通信发生在每一设备上相邻的 两层,而设备只通过模型物理层的物理介质互连。CAN技术规范定义了模型的最下面两层: 数据链路层和物理层,是设计CAN应用系统的基本依据。1991年9月Bosch公司制定并发布 了CAN技术规范Version2.0。该技术规范包括A和B两部分,2.0A给出了曾在CAN技术规范 Version1.2中定义的CAN报文格式,而2.0B给出了标准的和扩展的两种报文格式。规范主要 是针对CAN控制器的设计者而言,对于大多数应用开发者来说,只需对Version2.0版技术规 范的基本结构、概念、规则作一般了解,知道一些基本参数和可访问的硬件即可。下面只给 出与CAN通信接口编程相关的部分技术规范,完整的技术规范读者可参考原英文文献。 15.1.1 CAN的基本概念 (1) 报文(Messages) 报文是指在总线上传输的固定格式的信息,其长度是有限制的。当总线空闲时,总线上 任何单元都可以发送新报文。 (2) 信息路由(Information Routing) 在 CAN系统中,CAN不对通信单元分配地址,报文的寻址内容由报文的标识符指定。 标识符不指出报文的目的地,总线上所有单元可以通过报文滤波来判断是否接收报文。 (3) 位速率(Bit Rate) 位速度是指总线的传输速率。在一个给定的 CAN系统中,位速率是唯一的,也是固定 的。CAN总线上任意两个单元之间的最大传输距离与位速率有关,表 15-1列出了距离与位 速率的相关数据。这里的最大距离是指不接中继器的两个单元之间的距离。 表 15-1 CAN 总线上任意两单元最大距离及位速率对应表 位速率/kbps 1000 500 250 125 100 50 20 10 5 最大距离/m 40 130 270 530 620 1300 3300 6700 10000 p50000462015 高亮 (4) 优先权(Priorities) 在总线访问期间,报文的标识符定义了一个静态的报文优先权。在CAN总线上发送的 每一个报文都具有唯一的一个11位或29位的标识符,总线状态取决于二进制数0而不是1,标 识符越小,则该报文拥有越高的优先权,因此一个为全0标志符的报文具有总线上的最高级 优先权。当有两个节点同时进行发送时,必须通过“无损的逐位仲裁方法”来使有最高优先 权的报文优先发送。 (5) 远程数据请求(Remote Data Request) 当总线上某单元需要请求另一单元发送数据时,可通过发送远程帧实现远程数据请求。 有关帧内容见 15.1.2小节。 (6) 多主机(Multimaster) 总线空闲时,总线上任何单元都可以开始向总线上传送报文,但只有最高优先权报文的 单元可获得总线访问权。 (7) 仲裁(Arbitration) 总线空闲时,总线上任何单元都可以开始发送报文,若同时有两个或两个以上单元开始 发送,总线访问冲突运用逐位仲裁规则,借助标识符 ID解决。仲裁期间,每一个发送器都 对发送位电平与总线上检测到的电平进行比较,若相同则该单元继续发送。当发送的是一隐 性电平而监视到的是一显性电平(见总线数据表示),则该单元失去仲裁,退出发送状态。 (8) 错误标定和恢复时间(Error Signaling and Recovery Time) 任何检测到错误的单元会标志出已被损坏的报文。此报文会失效并将自动重传。如果不 再出现错误,则从检测到错误到下一报文的传送开始为止,恢复时间最多为 31位的时间。 (9) 故障界定(Fault Confinement) CAN单元能够把永久故障和短暂的干扰区别开来,故障单元会被关闭。 (10) 连接(Connection) CAN通信链路是一条可连接多单元的总线。理论上,总线上单元数目是无限制的,实 际上,单元数受限于延迟时间和总线的电气负载能力。例如,当使用Philips P82C250作为CAN 收发器时,同一网络中一般最多允许挂接110个节点。 (11) 单通道(Single Channel) CAN总线由单一通道组成,借助数据重同步实现信息传输。CAN技术规范中没有规定 该通道的实现方法即物理层,可以是单线(加地线)、两条差分线、光纤等,通常使用双绞线。 (12) 总线数据表示(Bus Values) CAN总线上用显性(Dominant)和隐性(Recessive)表示 0 和 1。当在总线上出现同时发送 显性位和隐性位时,总线上数值将出现显性。总线上的信号使用差分电压传送,两条信号线 被称为 CAN_H 和 CAN_L,如图 15-1所示。在隐性状态即逻辑 1时, CAN-H 和 CAN-L 被固定在平均电 压电平(2.5V左右)附近,Vdiff近似 于 0。在显性状态即逻辑 0 时, CAN_H比 CAN_L高,此时通常电 压值为 CAN_H = 3.5V 和 CAN_L= 1.5V。在总线空闲或隐性位期间, 发送隐性位。 V 时间 t 隐性位 显性位 隐性位 Vdiff Vdiff CAN-H CAN-L 图15-1 总线位的数值表示 Vdiff 2.5V 1.5V 3.5V (13) 应答(Acknowledgment) 所有接收器对接收到的报文进行一致性(Consistency)检查。对于一致的报文,接收器给 予应答;对于不一致的报文,接收器做出标志。 15.1.2 报文传输和帧结构 报文传输由以下 4个不同的帧类型表示和控制: ² 数据帧:数据帧将数据从发送器传输到接收器。 ² 远程帧:总线单元发出远程帧,请求发送具有同一标识符的数据帧。 ² 错误帧:任何单元检测到总线错误就发出错误帧。 ² 过载帧:过载帧用于在先行和后续数据帧(或远程帧)之间提供一附加的延时。 数据帧和远程帧既可使用标准帧,也可使用扩展帧。 (1) 数据帧 数据帧由 7个不同的位场组成:帧起始、仲裁场、控制场、数据场、CRC 场、应答场、 帧结尾。数据帧组成如图 15-2所示。 帧起始(标准格式和扩展格式):标志数据帧和远程帧的起始,仅由一个单独的“显性” 位组成。只有在总线空闲时,才允许站(即总线上的通信节点,以下同)开始发送报文。所有 的站必须同步于首先开始发送信息的站的帧起始前沿。 仲裁场:在 CAN2.0B中存在两种不同的帧格式,其主要区别在于标识符的长度,具有 11位标识符的帧称为标准帧,而包括 29位标识符的帧称为扩展帧。标准格式帧与扩展格式 帧的仲裁场格式是不同的。 标准格式中,仲裁场由 11 位标识符和远程发送请求位(RTR)组成,标识符位由 ID28…ID18组成。 扩展格式中,仲裁场包括 29位标识符、SRR、IDE、RTR位。其标识符为 ID28…ID0。 1) 标识符:在标准格式中,标识符的长度为 11 位。这些位的发送顺序是从 ID10 到 ID0。 最低位是 ID0。最高的 7 位(ID10 到 ID4)不能全是隐性。而扩展格式的标识符长为 29位, 帧间空间 仲裁场 控制场 数据场 CRC场 帧结束 数据帧 帧起始 应答场 帧间空间 或过载帧 图15-2 数据帧组成 标准格式 仲裁场 控制场 数据场 帧起始 DLC 图15-3 数据帧标准格式中的仲裁场结构 11位标识符 RTR IDE r0 扩展格式 仲裁场 控制场 数据场 帧起始 18位标识符 图 15-4 数据帧扩展格式中的仲裁场结构 11位标识符 SRR IDE r0 r1 RTR DLC 包括 11位基本 ID和 18位扩展 ID帧,基本 ID定义了扩展帧的基本优先权。 2) RTR 位:RTR位为“远程请求发送位”,在数据帧里须为显性,在远程帧里须为隐性。 3) SRR位:SRR位为“替代远程请求位”,属扩展格式,它是在扩展帧的标准帧 RTR位 的位置,因而替代标准帧的 RTR位。当标准帧与扩展帧发生冲突且扩展帧的基本 ID同标准 帧的标识符一样时,标准帧优先于扩展帧。 4) IDE位:IDE位是“标识符扩展位”,属扩展格式的仲裁场和标准格式的控制场,在标 准格式 中 ID为显性,而扩展格式中 IDE为隐性。 控制场:控制场由 6 个位组成。标准格式的控制场格式和扩展格式不同。标准格式中 的帧包括数据长度代码、IDE位(为显性)、保留位 r0。扩展格式包括数据长度代码和两个 必须为显性的保留位 r1和 r0。但接收器接收由显性和隐性位的组合。 数据长度代码指示了数据场中字节数量。数据长度代码为 4 个位,在控制场中被发送。 数据长度码中数据字节数据编码如表 15-2所示。其中,d表示显性位,r表示隐性位,数据 字节的数目个数只能在 0-8之间。 表 15-2 数据长度码中数据字节数目个数编码表 数据长度码 数据字节数目 DLC3 DLC2 DLC1 DLC0 0 d d d d 1 d d d r 2 d d r d 3 d d r r 4 d r d d 5 d r d r 6 d r r d 7 d r r r 8 r d d d 数据场(标准格式以及扩展格式):数据场由数据帧里的发送数据组成。它可以为 0~8 个字节,每字节包含了 8 个位,按字节大端顺序发送(MSB)。 CRC 场(标准格式以及扩展格式):CRC 场包括 CRC 序列(CRC SEQUENCE),其 后是 CRC 界定符(CRC DELIMITER)。 应答场(标准格式以及扩展格式):应答场长度为 2 个位,包含应答间隙(ACK SLOT) 和应答界定符(ACK DELIMITER)。在 ACK 场(应答场)里,发送站发送两个“隐性”位。 当接收器正确地接收到有效的报文,接收器就会在应答间隙(ACK SLOT)期间(发送 ACK 信号)向发送器发送一“显性”位以示应答。应答界定符是应答场的第二个位,并且是一个必 须为“隐性”的位。因此,应答间隙(ACK SLOT)被两个“隐性”的位所包围,也就是 CRC 界 定符(CRC DELIMITER)和应答界定符(ACK DELIMITER)。 帧结尾(标准格式以及扩展格式):每个数据帧和远程帧均由一标志序列定界。这个标 志序列由 7 个“隐性”的位组成。 (2) 远程帧 作为数据接收的站,可以借助于发送远程帧启动其资源节点传送数据。远程帧也有标准 格式和扩展格式,而且都由 6 个不同的位场组成:帧起始、仲裁场、控制场、CRC 场、应 答场、帧结尾。远程帧的组成如图 15-5所示。 与数据帧相反,远程帧的 RTR 位是“隐性”的。它没有数据场。 RTR 位的极性表示了所发送的帧是数据帧(RTR 位“显性”)还是远程帧(RTR 位“隐 性”)。 (3) 出错帧 错误帧由两个不同的场组成。第一个场是由不同站提供的错误标志(ERROR FLAG) 的叠加;第二个场是错误界定符。出错帧的组成如图 15-6所示。 错误标志有两种形式:主动错误标志和被动错误标志。主动错误标志由 6个连续的显性 位组成,而被动错误标志由 6个连续的隐性位组成,除非被其他节点的显性位重写。 检测到错误条件的“错误激活”的站通过发送主动错误标志指示错误。错误标志的形式破 坏了从帧起始到 CRC界定符的位填充的规则,或者破坏了 ACK场或帧结尾场的固定形式。 所有其他的站由此检测到错误条件并与此同时开始发送错误标志。因此,显性位(此显性位 可以在总线上监视)的序列导致一个结果,这个结果就是把个别站发送的不同的错误标志叠 加在一起。这个序列的总长度最小为 6个位,最大为 12个位。 检测到错误条件的“错误被动”的站试图通过发送被动错误标志指示错误。“错误被动”的 站等待 6个相同极性的连续位(这 6个位处于被动错误标志的开始)。当这 6个相同的位被 检测到时,被动错误标志的发送就完成了。 错误界定符包括 8个隐性的位。错误标志传送了以后,每一站就发送隐性位并一直监视 总线直到检测出一个隐性位为止。然后就开始发送其余 7个隐性位。 为了能正确地终止错误帧,“错误被动”的节点要求总线至少有 3 个位时间的总线空闲 (如果“错误被动”的接收器有局部错误的话)。因此,总线的载荷不会达 100%。 (4) 过载帧 过载帧包括两个位场:过载标志和过载界定符。过载帧的组成如图 15-7所示。 有三种过载的情况会引发过载标志的传送: ² 接收器的内部情况(此接收器对于下一数据帧或远程帧需要有一延时)。 ² 在间歇的第一和第二字节检测到一个“显性”位。 ² 如果 CAN节点在错误界定符或过载界定符的第 8位(最后一位)采样到一个显性 帧间空间 仲裁场 控制场 CRC场 帧结束 远程帧 帧起始 应答场 帧间空间 或过载帧 图15-5 远程帧组成 数据帧 错误标志 错误标志的重叠 错误界定符 错误帧 帧间空间 或过载帧 图15-6 错误帧组成 数据帧 过载标志 过载标志的重叠 过载界定符 过载帧 帧间空间 或过载帧 图15-7过载帧组成 位,节点会发送一个过载帧(不是错误帧)。错误计数器不会增加。 根据过载情况 1而引发的过载帧只允许起始于所期望的间隙的第一个位时间,而根据情 况 2和情况 3引发的过载帧应起始于所检测到“显性”位之后的位。通常为了延时下一个数据 帧或远程帧,两种过载帧均可产生。 过载标志由 6个显性位组成。由于过载标志的格式破坏了间隙域的固定格式,因此,所 有其他的站都检测到过载条件,并与此同时发出过载标志。如果在间隙的第 3个位期间检测 到显性位,则这个位将被解释为帧的起始。 过载界定符包括 8个隐性位,过载标志被传送后,站就一直监视总线,直到检测到一个 从显性位到隐性位的跳变为止。这时,总线上的每个站完成了各自过程标志的发送,并开始 同时发送其余 7个隐性位。 15.1.3 位定时与同步 位定时与同步定义 CAN总线的通信速率,下面就相关名词作简单介绍。 标称位速率(Nominal Bit Rate):标称位速率为一理想的发送器在没有重新同步的情况 下每秒发送的位数量。 标称位时间(Nominal Bit Time ):标称位时间=1/标称位速率。可以把标称位时间分成 几个不重叠的片段,它们分别是:同步段(SYNC_SEG)、传播段 (PROG_SEG)、相位段 1(PHASE_SEG1)、相位段 2(PHASE_SEG2)。标称位时间如图 15-8所示。 同步段(SYNC_SEG):位时间的同步段用于同步总线上不同的节点,这一段内要有一 个跳变沿。 传播段(PROG_SEG):传播段用于补偿网络内的物理延时时间。它是总线上输入比较器 延时和输出驱动器延时总和的 2倍。 相位缓冲段 1(PHASE_SEG1)、相位缓冲段 2(PHASE_SEG2):相位缓冲段用于补偿边沿 阶段的误差。这两个段可以通过重新同步加长或缩短。 采样点(Sample Point):采样点是读总线电平并解释各位的值的一个时间点。采样点位于 相位缓冲段 1之后。 信息处理时间(Information Processing Time):信息处理时间是以一个采样点作为起始的 时间段。采样点用于计算后续位的位电平。 时间份额(Time Quanta):时间份额是取自振荡器周期的固定时间单元。时间份额的长度 为: 时间份额=m * 最小时间份额,其中,m为可编程的预比例因子,其数值范围为 1-32间 的整数,最小时间份额为 CAN总线振荡器周期。 一般,同步段为 1个时间份额,传播段可设置成 1、2…8个时间份额,相位段 1可设置 成 1、2…8个时间份额,相位段 2为相位缓冲段 1和信息处理时间之间的最大值,信息处理 时间少于或等于 2个时间份额。一个位时间总的时间份额值可以设置在 8~25的范围。 在确定一个CAN总线的通信速率时,主要是根据上述参数而定,具体运用请参见下文 例子。 同步段 相位段 1 相位段 2 图15-8 标称位时间组成示意图 传播段 采样点 标称位时间 15.2 MSCAN08模块 构建 CAN接口一般有两种方法,一是采用独立的 CAN控制器,二是采用带有 CAN控 制模块的MCU。目前,一些公司生产的 8位MCU内也集成了 CAN控制器,使得 CAN总 线的应用领域不断扩大。采用带 CAN控制器的 MCU进行嵌入式系统的设计开发,可以简 化电路设计, 使编程更加方便。Freescale 半导体公司的 GZ(MC68HC908GZxx)系列和 AZ(MC68HC908AZxx)系列MCU内部都集成了CAN协议控制器MSCAN08模块。MSCAN08 是M68HC08微控制器系列中专门为实现Motorola控制器网络扩展功能而设计的,该模块的 设计符合 CAN2.0A/B协议标准。下面对该模块进行简要介绍。 15.2.1 MSCAN08特性 MSCAN08是Freescale可升级控制器局域网(Motorola scalable controller area network, MSCAN)在Freescale 08系列微控制器中的具体实现。该模块具有以下特性: ² 模块化的设计 ² 符合 CAN2.0A/B协议标准,支持标准和扩展数据帧格式 ² 高达 1Mbps的可编程通信速率 ² 一帧数据长度可为 0到 8字节 ² 支持远程请求帧 ² 4个先进先出结构的收发缓冲区,其中 3个为具有局部优先级的发送缓冲区 ² 灵活的标识符验收模式,可配置成 1个 32位过滤码、2个 16位过滤码和 4个 8位 过滤码 ² 内置低通滤波的远程唤醒功能 ² 可编程为方便调试的自环工作模式 15.2.2 外部引脚 MSCAN08 有两根外部引脚,一根输入脚(CANRX)一根输出脚(CANTX),CANTX 脚输出引脚代表了 CAN上的逻辑电平:0为高电平,1为低电平。 一个由MSCAN08模块构建的典型的 CAN系统如图 15-9所示。 15.2.3 报文存储结构 图 15-10是MSCAN08的报文缓冲区组织模式。从图中可以看出,MSCAN08有两个接 120Ω MCU CAN控制器 (MSCAN08) 收发器 CANH CANL 图15-9 CAN系统 CANRX CAN节点 CAN节点 CAN节点 120Ω CANH CANL CANH CANL CANTX 收缓冲区和三个发送缓冲区。 (1) 接收结构 MSCAN08的两个接收缓冲区分别 被称为后台 (Background)接收缓冲区 RxBG 和前台(Foreground)接收缓冲区 RxFG。当 CAN 总线上有报文在传输 时,总线上除发送节点以外的所有节点 都将成为接收节点;接收节点将报文暂 时存放在 RxBG中并进行滤波比较;若 该报文通过本地滤波,MSCAN08则将 此报文复制到 RxFG中,并置接收标志 位通知 MCU去读取 RxFG中的数据。 MCU 只能访问 RxFG 而不能访问 RxBG。 当MSCAN08在发送时,它会将自 己的报文接收到 RxBG 中。正常情况 下,RxBG的报文不会进入到 RxFG中, 因而也不会产生接收中断。但有一个例 外,就是在回环模式(loop-back)下,MSCAN08 会将自己发送出去的报文当成其他节点发送 过来的报文一样进行接收。MSCAN08在丢失仲裁的情况下才接收自己的报文。一旦仲裁丢 失,MSCAN08必须做好接收准备。 当前后台报文接收缓冲区已经存放了接收到的报文而总线上又有新的报文到达,这时候 会产生溢出,后到的报文将被丢失;同时,如果中断允许,将产生一个指示溢出的中断。 MSCAN08在两个接收缓冲区都满了的情况下仍然可以发送报文,但是所有的接收报文将被 丢失。 (2) 发送结构 为了能预先装载多个报文以获得实时传输性能,MSCAN08提供了三个传输缓冲区。当 要发送数据时,CPU08先查找是否有空闲的发送缓冲区;若有,则将数据按 CAN报文格式 进行封装并存入该空闲缓冲区,并通过清相应缓冲区的空标志来表明已经准备就绪。 MSCAN08将报文成功发送后,将相应发送缓冲区的空标志置位,并产生一个发送中断,该 中断可以被应用软件用于重新往缓冲区装载数据。 当多个发送缓冲区均处于就绪状态时,MSCAN08采用了局部优先级策略来对三个缓冲 区进行优先级设置。每个发送缓冲都有一个 8位的局部优先级(PRIO)。应用程序可设置该 优先级,数值越小,相应发送缓冲区优先级越高。 当低优先级报文正在发送而又需要发送高优先级报文时,可以通过软件方式中止低优先 级报文的发送。应用程序可以通过查看缓冲区的中止响应标志确认报文最终被成功发送还是 被中止了。 15.2.4 标识符校验滤波 MSCAN08模块内有 4个标识符校验寄存器(CIDAR0-CIDAR3)和 4个标识符屏蔽寄 存器(CIDMR0-CIDMR3)。当总线上有报文到达时,MSCAN08会将该报文的标识符与标 识符校验寄存器中的内容进行比较,标识符屏蔽寄存器则是用于指定比较结果是否有影响, 为 1时,说明相应位的比较结果不影响报文的接收。验收过程如图 15-11所示。 MSCAN08 RxBG RxFG CPU08内部总线 RXF TX0 RXF PRIO TX1 RXF PRIO TX2 RXF PRIO 图15-10 报文缓冲区组织模式示意图 在接收报文时,需要对哪些位进行验收比较,与当前的滤波器方式有关。MSCAN08有 4种滤波器方式,下面给予简要介绍。 (1) 单一标识符校验滤波器 这种方式实行单一滤波器,如图 15-12所示。参与滤波比较的有: a) 扩展帧:29位标识符、RTR、IDE、SRR b) 标准帧:11位标识符、RTR、IDE 该方式下滤波比较通过后将产生滤波器 0命中。 (2) 双标识符校验滤波器 这种方式采用 2个滤波器,如图 15-13所示。参与滤波比较的: a) 扩展帧:标识符的高 14位、SRR、IDE b) 标准帧:11位标识符、RTR、IDE 图15-12 单一32位可屏蔽校验滤波器 图15-13 双16位可屏蔽校验滤波器 报文标识符位 本地标识符位 验收屏蔽位 = ≥ & 1--接收 0--不接收 b0 … b1 bn 图15-11 报文验收过程示意图 ≥ 该方式下滤波比较通过后将产生滤波器 0和 1命中。 (3) 四个标识符校验滤波器 该方式采用 4 个独立的滤波器,可 4 次对标准帧的高 8 位标识符进行滤波比较,如图 15-14所示。 该方式下滤波比较通过后将产生滤波器 0、滤滤器 1、滤波器 2和 3命中。 (4) 关闭滤波器 该方式不接收报文。 15.2.5 中断 (1) 中断源 MSCAN08有 11种可屏蔽中断源,并提供了 4个中断向量去访问它们。具体如下: ² 发送中断:当至少有一个发送缓冲区变为空时,触发该中断。此时相应发送缓冲区 的空标志位被置位。 ² 接收中断:当前台接收缓冲区成功接收到一个报文时触发该中断。 ² 唤醒中断:当 MSCAN08处于内部睡眠模式或者低功耗模式时,CAN总线上产生 活动时角触发该中断。 ² 错误中断:一个溢出、错误或者警告产生了。接收标志寄存器(CRFLG)指示下 列哪种情况发生而导致错误中断: 图15-14 4 个8位可屏蔽校验滤波器 − 溢出:接收溢出。 − 接收警告:接收错误计数器已经到达 CPU警戒限 96。 − 发送警告:发送错误计数器已经到达 CPU警戒限 96。 − 被动接收警告:被动接收错误计数器已经超过了CPU警戒限127,且MSCAN08 已经处于被动错误状态。 − 被动传输警告:被动传输错误计数器已经超过了CPU警戒限127,且MSCAN08 已经处于被动错误状态。 − 总线断开:传输错误计数器已经超过了 255并且MSCAN08已经处于总线断开 状态。 (2) 中断响应 中断与一个或多个MSCAN08接收标志寄存器(CRFLG)或者传输标志寄存器(CTFLG) 是直接关联的。一有相关标志被置位,就进入中断等待。在中断处理中,必须将上面提到的 寄存器中的标志位重置以和中断进行握手。标志位通过向相应的位置写入 1进行清空。如果 各自的情况仍然继续,则标志位不能被清空。 注意:位设置指令(BSET)不可以用于清空中断标志。 (3) 中断向量 MSCAN08 提供了四个中断向量表如表 15-3 所示。向量表的地址和相关的中断优先级 取决于芯片的整合以及是如何定义的。 表 15-3 MSCAN08的中断向量 功能 源 局部标记 全局标记 唤醒 WUPIF WUPIE RWRNIF RWRNIE TWRNIF TWRNIE RERRIF RERRIE TERRIF TERRIE BOFFIF BOFFIE 错误中断 OVRIF OVRIE 接收 RXF RXFIE TXE0 TXEIE0 TXE1 TXEIE1 传输 TXE2 TXEIE2 1位 15.2.6 协议保护 MSCAN08 防止用户通过程序破坏 CAN协议。这种保护逻辑具有以下特点: ² 接收和传输错误计数器不能被写入或者修改。 ² 当MSCAN08处于连接状态时,不能修改MSCAN08的配置。MSCAN08模式控制 寄存器的 SFTRES位将锁定以下寄存器: - MSCAN08 模式控制寄存器(CMCR1) - MSCAN08 总线时钟寄存器 0和 1(CBTR0和 CBTR1) - MSCAN08 标识符校验控制寄存器(CIDAR0-3) - MSCAN08 标识符校验寄存器(CIDMR0-3) ² 当MSCAN08 处于任何低功耗模式的时候,CANTX脚被强制成低电平 15.3 MSCAN08 通信接口硬件电路 在了解 MSCAN08模块有关知识之后,我们来看一下用 MC68HC908GZ60微控制器构 建 CAN总线通信节点的硬件电路,其原理图见 15-15。 在该电路中,CAN总线驱动器采用 PCA82C250。GZ60负责 MSCAN08的初始化,并 通过读取MSCAN08模块的报文缓冲区收发数据。 为增加节点的抗干扰能力,GZ60的 CANTx和 CANRx不直接与 PCA82C250相连,而 是通过高速光耦 6N137后再与之相连。光耦部分电路所采用的两个电源 VCC1和 VCC2须 完全隔离,否则,光耦达不到完全隔离的效果。可以采用带多 5V输出的开关电源模块实现。 15.4 MSCAN08 模块的编程结构 MSCAN08在 CPU08里占用了 128 字节的存储空间,如图 15-16 所示。从程序员角度 看,涉及 CAN 通信的有报文收发缓冲区结构和若干控制寄存器。只要理解和掌握 CAN的 报文缓冲区结构和控制寄存器的用法,就可以进行MSCAN08编程。 $0500 $0508 控制寄存器 9字节 $0509 $050D 保留空间 5字节 $050E $050F 错误计数器 2字节 $0510 $0517 标识符校验滤波器 8字节 $0518 $053F 保留空间 40字节 $0540 $054F 接收缓冲区 $0550 $055F 发送缓冲区 0 $0560 $056F 发送缓冲区 1 $0570 $057F 发送缓冲区 2 图15-17 报文缓冲区组织图 地址(1) $05x0 $05x1 $05x2 $05x3 $05x4 $05x5 $05x6 $05x7 $05x8 $05x9 $05xA $05xB $05xC $05xD $05xE $05xF (1) 接收缓冲区,x取值 4;发送缓冲 区 0、1、2,x依次取值 5、6、7 (2) 对于接收缓冲区不可用 寄存器名 标识符寄存器 0(IDR0) 标识符寄存器 1(IDR1) 标识符寄存器 2(IDR2) 标识符寄存器 3(IDR3) 数据段寄存器 0(DSR0) 数据段寄存器 1(DSR1 数据段寄存器 2(DSR2) 数据段寄存器 3(DSR3) 数据段寄存器 4(DSR4) 数据段寄存器 5(DSR5) 数据段寄存器 6(DSR6) 数据段寄存器 7(DSR7) 数据长度寄存器(DLR) 发送缓冲区优先级寄存器(2) 未用 未用 图15-16 MSCAN08 存储映射图 6N137 MC 6 8 H C 9 0 8 G Z 6 0 CANTx CANRx 图15-15 CAN 接口部分电路原理图 Vcc IN EN Vdd OUT GND 3 2 8 6 5 7 GND OUT Vdd EN IN Vcc 5 6 7 8 3 2 390 390Ω 0.1uF 390Ω 390Ω TXD CANH RXD PCA82C250 1 2 4 5 6 3 7 8 47KΩ C A N 总 线 0.1uF 0.1uF GND1 VCC1 GND1 VCC1 GND1 VCC2 GND2 GND2 VCC2 VCC1 5Ω 5Ω 6N137 15.4.1 缓冲区结构 MC68HC908GZ60微控制器中 MSCAN08的 3 个发送报文缓冲区和 1 个接收报文缓冲 区结构大致相同,每个缓冲区均分配 16字节存储空间,如图 15-17所示。 (1)报文缓冲结构(Message Buffer Outline) 图 15-18 给出了扩展帧的报文缓冲区各字节含义。对于标准帧的标识符只占 11位,图 15-19给出了标准帧的标识符格式。标准帧报文缓冲区的其他部分含义与扩展帧相同。对于 发送缓冲区,任何时候都可读可写,而对于接收缓冲区,则只能读不能写。 (2)标识寄存器(Identifier Registers,IR) 标识符寄存器或由 11位(ID10-ID0)组成标准帧,或由 29 位(ID28-ID0)组成扩展帧,见 上图 15-18和图 15-19。在总线仲裁过程中,最高位(ID10/ID28)是最先发送的,值越小优先 级越高。 SRR — Substitute Remote Request:替代远程请求。在扩展帧中,该位为隐性位;在标 准帧中,该位为 RTR。 IDE — ID Extended :ID扩展。=1,扩展帧格式,29位标识符;=0,标准帧格式,11 位标识符。 RTR — Remote Transmission Request:远程发送请求。=1,远程帧,=0,数据帧。 (3)数据长度寄存器(Data Length Register,DLR) 数据长度寄存器存放的是 CAN帧的数据长度,长度范围为 0-8。在远程帧中,不管 DLR 是否被写入,数据长度个数总是为 0。DLR中各位含义见表 15-4数据长度代码。 Bit7 6 5 4 3 2 1 Bit0 地址 $05x0 $05x1 $05x2 $05x3 $05x4 $05x5 $05x6 $05x7 $05x8 $05x9 $05xA $05xB $05xC 图15-18 扩展帧报文缓冲区各位含义 寄存器名 标识符寄存器 0(IDR0) 标识符寄存器 1(IDR1) 标识符寄存器 2(IDR2) 标识符寄存器 3(IDR3) 数据段寄存器 0(DSR0) 数据段寄存器 1(DSR1) 数据段寄存器 2(DSR2) 数据段寄存器 3(DSR3) 数据段寄存器 4(DSR4) 数据段寄存器 5(DSR5) 数据段寄存器 6(DSR6) 数据段寄存器 7(DSR7) 数据长度寄存器(DLR) ID28 ID27 ID26 ID25 ID24 ID23 ID22 ID21 ID20 ID19 ID18 SRR=1 IDE=1 ID17 ID16 ID15 ID14 ID13 ID12 ID11 ID10 ID9 ID8 ID7 ID6 ID5 ID4 ID3 ID2 ID1 ID0 RTR DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 --- --- --- --- DLC3 DLC2 DLC1 DLC0 Bit7 6 5 4 3 2 1 Bit0 地址 $05x0 $05x1 $05x2 $05x3 图15-19 标准帧标识符各字节含义 寄存器名 标识符寄存器 0(IDR0) 标识符寄存器 1(IDR1) 标识符寄存器 2(IDR2) 标识符寄存器 3(IDR3) ID2 ID1 ID0 RTR IDE=0 --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ID10 ID9 ID8 ID7 ID6 ID6 ID4 ID3 (4)数据段寄存器n(Data Segment Registers n,DSRn) 8个数据段寄存器中存放发送或接收的数据,数据个数由 DLC指定。 (5)发送缓冲区优先级寄存器(Transmit Buffer Priority Registers,TBPR) 发送缓冲区优先级寄存器指定了相应报文 缓冲区的本地优先级,该优先级被用于 MSCAN08的内部优先级处理,值越小优先级越高。在发送 SOF之前,TXE为 0的发送缓 冲区参与优先级仲裁,具有最高优先级的发送缓冲区获得优先权;当优先级相同时,序号小 的缓冲区获得优先权。 地址:$05xD,x=5、6、7 数据位 D7 D6 D5 D4 D3 D2 D1 D0 读 写 PRIO7 PRIO6 PRIO5 PRIO4 PRIO3 PRIO2 PRIO1 PRIO0 复位 复位不影响 15.4.2 控制寄存器 (1)MSCAN08模式控制寄存器0 (Module Control Register 0,CMCR0) 模式控制寄存器 0(CMCR0)定义了MSCAN08模块的同步状态等有关工作方式。 地址:$0500 数据位 D7 D6 D5 D4 D3 D2 D1 D0 读 0 0 0 SYNCH TLNKEN SLPAK SLPRQ SFTRES 写 - - - - TLNKEN - SLPRQ SFTRES 复位 0 0 0 0 0 0 0 1 SYNCH — Synchronized Status:同步状态。SYNCH =1,MSCAN08与 CAN总线同步; SYNCH =0,MSCAN08与 CAN总线不同步。 TLNKEN — Timer Enable:时钟使能。TLNKEN =1,MSCAN08时钟信号输出连接到 片上时钟输入;TLNKEN =0,MSCAN08不连接到时钟输入。 SLPAK — Sleep Mode Acknowledge :睡眠模式确认。SLPAK标志位指示 MSCAN08 是否处于睡眠模式,SLPAK =1,表示MSCAN08处于内部睡眠模式;SLPAK =0,不在内部 睡眠模式。 SFTRES — Soft Reset:软复位。SFTRES =1,MSCAN08处于软复位状态;SFTRES =0, MCAN08处于正常运行状态。当 SFTRES被置为 1 时,MSCAN08立即进入软复位状态。 此时,MSCAN08所有正在进行的收发操作都被中止,且不再与 CAN总线保持同步。只有 表 15-4 数据长度代码 数据长度代码 DLC3 DLC2 DLC1 DLC0 数据字节个数 0 0 0 0 0 0 0 0 1 1 0 0 1 0 2 0 0 1 1 3 0 1 0 0 4 0 0 1 1 5 0 1 0 0 6 0 1 1 1 7 1 0 0 0 8 在软复位状态下,才能对寄存器MCR1、BTR0、BTR1、IDAC、IDAR0-IDAR3、IDMR0-IDMR3 进行写操作。当该位清 0时,MSCAN08将在 11个隐性位后与总线保持同步。 (2)MSCAN08模式控制寄存器1 (Module Control Register 1,CMCR1) 模式控制寄存器 1定义了MSCAN08模块的时钟源、唤醒模式及工作方式。 地址:$0501 数据位 D7 D6 D5 D4 D3 D2 D1 D0 读 0 0 0 0 0 LOOPB WUPM CLKSRC 写 - - - - - LOOPB WUPM CLKSRC 复位 0 0 0 0 0 0 0 0 LOOPB — Loop Back Self-Test Mode:回环自测模式位。LOOPB =1,激活回环自测模 式;LOOPB =0,正常运行模式。当处于回环自测模式时,CANRX引脚被忽略,CANTX引脚 输出隐性值,MSCAN08将自己发送的报文当成是从远程节点上发送过来的报文进行接收, 并产生发送和接收中断。通过自测模式可以在不接任何 外外围器件的基础上,测试 MSCAN08工作是否正常。 WUPM — Wakeup Mode:唤醒模式位。该位定义是否启用内部低通滤波以避免被错误 唤醒。WUPM=1,只有当总线上显性电平至少保持了 twup 时间后 MSCAN08 才被唤醒; WUPM=0,总线上任何隐性变为显性的下降沿,MSCAN08被唤醒。 CLKSRC — Clock Source:时钟源选择位。CLKSRC=1,MSCAN08时钟源采用锁相环 输出;CLKSRC=0,MSCAN08时钟源直接采用外部晶振的 2分频(CGMXCLK/2)。 注:MCR1只能在软复位状态下才能被写入。 (3)MSCAN08总线定时寄存器0 (Bus Timing Register 0,CBTR0) 总线定时寄存器 0和总线定时寄存器 1共同决定了 CAN总线通信波特率。其中,总线 定时寄存器 0定义了MSCAN08的同步跳转宽度和预分频因子。 地址:$0502 数据位 D7 D6 D5 D4 D3 D2 D1 D0 读/写 SJW1 SJW0 BRP5 BRP4 BRP3 BRP2 BRP1 BRP0 复位 0 0 0 0 0 0 0 0 SJW1-0 — Synchronization Jump Width:同步跳转宽度。同步跳转宽度定义了一个位周 期可以被一次重新同步缩短或延长的时间份额 Tq(见下面对 BPR5-BPR0 的说明)的最大数 目,以便在数据发送时与总线同步。SWJ1-0取值与同步跳转宽度对应关系见表 15-5。 BPR5-BPR0 — Band Rate Prescaler:波特率预置器。BPR5-BPR决定了用于生成各位(bit) 延时的时间份额(Time Quanta---Tq)的大小,其中 Tq=fMSCANCLK/预分频因子。BPR5-BPR0与 预分频因子的对应关系见表 15-6。 注:BTR0只能在软复位状态下才能被写入。 (4)MSCAN08总线定时寄存器1(Bus Timing Register 1,CBTR1) 总线定时寄存器 1(BTR1)定义位周期的长度、采样点的位置和每个位时间内采样次数。 地址:$0503 表 15-5 同步跳转宽度 SJW1 SJW2 同步跳转宽度 0 0 1 0 1 2 1 0 3 1 1 4 表 15-6 波特率预置器 BPR5 BPR4 BPR3 BPR2 BPR1 BPR0 预分频因子 0 0 0 0 0 0 1 0 0 0 0 0 1 2 : : : : : : : 1 1 1 1 1 1 64 数据位 D7 D6 D5 D4 D3 D2 D1 D0 读/写 SAMP TSEG22 TSEG21 TSEG20 TSEG13 TSEG12 TSEG11 TSEG10 复位 0 0 0 0 0 0 0 0 SAMP — Sampling:采样次数。=1,每位采样 3次;=0,每位采样 1次。 TSEG22-TSEG20 — Time Segment:时间段。时间段决定了每一位所需的时间份额 Tq 数目和采样点的位置。时间段由时间段 1(TSEG1)和时间段 2(TSEG2)组成,定义分别 如表 15-7和 15-8所示。 注:在 CAN标准中,时间段 1的取值范围为 5-16,时间段 2的取值范围为 2-8,用户 设置的位时间必须确保与 CAN标准兼容。 CAN通信位周期总体结构如图 15-19所示。 例如:在 MSCAN08 时钟频率 fMSCAN08=4M,BTR0 和 BTR1 寄存器取如下值时, SJW1-0=00,BPR5-BPR0=000001, SAMP=0,TSEG22-TSEG20=010,TSEG13-TSEG10=0101 则:预分频因子 PreScale=2,时间份额 Tq的频率 fTq= fMSCAN08/PreScale = 2M 同步跳转宽度=1(Tq),时间段 1=6(Tq),TSEG2=3(Tq) 位时间=1+6+3=10(Tq),通信波特率=2M/10=200(kbps) (5)MSCAN08接收标志寄存器(Receiver Flag Regis
本文档为【CAN通信接口】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_864665
暂无简介~
格式:pdf
大小:385KB
软件:PDF阅读器
页数:29
分类:互联网
上传时间:2011-06-23
浏览量:236