第三章CANbus现场总线15第三章CANbus现场总线现场总线是安装在生产过程区域的现场设备/仪表与控制室内的自动控制装置/系统之间的一种串行、数字式、多点通信的数据总线。现场总线(Fieldbus)技术是实现现场级控制设备数字化通信的一种工业现场层网络通信技术,可使用一条通信电缆将现场设备(智能化、带有通信接口)连接,用数字化通信代替4-20mA/24VDC信号,完成现场设备控制、监测、远程参数化等功能。CAN,全称为“ControllerAreaNetwork”,即控制器局域网,由德国Bosch公司最先提出,已成为国际标准ISO11898(高速应用)和ISO11519(低速应用)。CAN是一种多主方式的串行通讯总线,CAN的规范定义了OSI模型的最下面两层:数据链路层和物理层。CAN协议有2.0A和2.0B两个版本,CAN协议的2.0A版本规定CAN控制器必须有一个11位的标志符,在2.0B版本中规定CAN控制器的标志符长度可以是11位或29位。第一节CAN通信协议§3.1.0协议特点CAN总线是一种串行数据通信协议。它有如下特点:1、CAN协议分层分为目标层、传输层、物理层。目标层的功能:确定要发送的报文、确认传输层接收到的报文、为应用层提供接口。传输层的功能:帧组织、总线仲裁、检错、错误报告、错误处理。物理层的范围包括实际位传送过程中的电气特性。2、CAN协议逻辑位.使用2种逻辑位表达方式.当总线上的CAN控制器发送的都是弱位时,此时总线状态是弱位(逻辑1);如果总线上有强位出现,弱位总是让位于强位,即总线状态是强位(逻辑0)。3、CAN协议校验.采用CRC校验并可提供相应的错误处理功能,保证了数据通信的可靠性。4、CAN协议编码方式.使用了数据块编码方式,使得网络内的节点个数在理论上不受限制。5、CAN协议数据块的长度.规定了数据块的长度最多为8个字节,传输时不会过长占用总线,保证了通信的实时性。§3.1.1帧结构CANbus以报文为单位进行信息传送。报文中包含标识符ID,它也标志了报文的优先权。该标识符ID并不指出报文的目的地址,而是描述数据的含义。网络中所有节点都可由ID来自动决第三章CANbus现场总线16定是否接收该报文。每个节点都有ID寄存器和屏蔽寄存器,接收到的报文只有与该屏蔽寄存器中的内容相同时,该节点才接收报文。CANbus支持4种帧类型:1、数据帧——传输数据从一个发送节点发送数据帧到一个或多个接收节点,它由7个域组成:帧的起始域、仲裁域、控制域、数据域、CRC域、应答域和帧的结束域。a.帧的起始域该域表示一个数据帧或远程帧的开始,它由一个强位组成,该强位用于接收状态下的CAN控制器的硬同步。b.仲裁域该域由标识符ID和RTR位组成,当有多个CAN控制器同时发送数据时,在仲裁域要进行面向位的冲突仲裁。标识符ID:由11位(CAN2.0A)或29位(CAN2.0B)组成,用于提供帧地址及优先级,ID值越小,优先级越高。远程发送请求位(RTR):CAN总线上的接收节点可以请求总线上另一个节点发送数据帧。c.控制域由6个位组成,包括2个保留位和4位的数据长度码,允许数据长度值为0~8。d.数据域数据字节长度为0~8,由控制域中的数据长度码决定。e.循环冗余校验(CRC)域它采用15位CRC,校验范围包括帧的起始域、仲裁域、控制域、数据域及CRC序列。f.应答域包括应答位和应答分隔符。应答域由发送方发出的两位弱位组成,所有接收到正确的CRC序列的节点在发送节点的应答空隙期间,把发送方的这一弱位改写为强位来应答。g.帧的结束域由7个弱位组成。2、远程帧——请求数据接收数据的站可以发送远程帧来要求源节点发送数据,它由6个域组成:帧起始域、仲裁域、控制域、CRC域、应答域和帧的结束域。远程帧和数据帧有如下不同:RTR位为高、数据长度代码无效、无数据域。3、误指示帧——指示检测到的错误状态出错帧由两个不同的域组成:一个域由来自各站的错误标志叠加得到,第二个域是出错界定符。a.错误标志主动错误标志:由6个连续强位组成被动错误标志:由6个连续弱位组成,可由其他节点的强位改写b.出错界定符由8个连续的弱位组成。当错误标志发出后,每个节点监视总线状态,直至检测到一个强位的跳变。此时,表示所有的节点均已完成了错误标志的发送,并开始第三章CANbus现场总线17发8个弱位的界定符。4、过载帧——后续帧的延时过载帧由两个域组成:一个域是过载标志,第二个域是超载分界符。在下述情况下将有过载帧的发送:1、接收方在接收一帧之前需要过多的时间处理当前的数据(接收未准备好)。2、在帧间空隙域检测到强位信号a.过载标志由6个弱位组成,格式与错误标志相同b.过载分界符由8个连续的弱位组成。当过载标志发出后,每个节点监视总线状态,直至检测到一个弱位的跳变。此时,表示所有的节点均已完成了过载标志的发送,并开始发8个弱位的界定符。§3.1.2错误检测CAN总线控制器错误检查分为以下几类:a.位错误处于发送状态的节点对总线的每一位进行监测,如果检测到发送位与检测结果不一致,则报告出现位错误。但以下情况除外:在仲裁域,弱位可被改写为强位;在应答间隙,只有接收节点可确认位错误。b.填充错误在应使用位填充方法进行编码的报文中,出现了6个连续相同的位电平时,将检测出一个填充错误。c.CRC错误CRC序列是由发送器CRC计算结果组成的。接收器以与发送器相同的方法计算CRC。如果计算结果与接收到的CRC序列不相同,则检测出一个CRC错误。d.格式错误当固定格式的域中出现一个或多个非法位时,则检测出一个格式错误。e.应答错误在应答间隙期间,发送器未检测到强位,则检测出一个格式错误。§3.1.3错误处理a.长干扰与短干扰当CAN控制器接收到连续干扰时,必须通知外部MCU,正常后,又要通知MCU返回正常操作。在长干扰期间,CAN控制器进入总线关闭状态,短干扰不会影响CAN控制器的工作。b.错误的本地处理CAN协议中定义了错误处理的原则,即最大限度的接近错误源,最大限度的反应,最大限度的响应。因此,错误大部分被本地处理,而对整体总线操作影响最小。c.错误限制CAN控制器都包含一个发送错误计数器和一个接收错误计数器。当一帧数据正常发送或接收时,计数器减计数;而出错时加计数。CAN控制器超过127个错误点后进入被动错误状态,而之前为主动错误状态;当发送出错超过255个后,CAN控制器进入总线关闭状态。第三章CANbus现场总线18第二节CAN控制器§3.2.0CAN控制器介绍本小节可参考BOSCH-—CAN的用户手册CAN网络的通信及网络协议主要是由CAN控制器来实现的。CAN控制器由CAN核、报文RAM、报文处理器、控制寄存器组和组件接口五部分组成。各部分作用如下:CAN核遵从CAN2.0A和CAN2.0B协议标准,波特率可根据用户技术需要编程,最高可达1MBps(距离最长40米)。CAN通信时,个别的报文对象需要配置。报文对象及接收过滤用的屏蔽标识均存入报文RAM。报文处理器实现了报文处理的功能。这些功能包括接收过滤、CAN核和报文RAM之间的数据交换、发送请求的处理、组件中断。控制寄存器组可由外部MCU通过组件接口直接操作。这些寄存器用于控制/配置CAN核、报文处理器和访问报文RAM。组件接口实现了CAN控制器与外部MCU的连接。§3.2.1相关寄存器的介绍CAN控制寄存器为16位的寄存器,高位在奇数地址,低位在偶数地址。1.控制器寄存器组控制器寄存器组控制着操作模式、CAN位定时的配置和提供状态信息CAN控制寄存器(CANControlRegister)状态寄存器(StatusRegister)出错计数器(ErrorCouuter)位定时寄存器(BitTimingRegister)测试寄存器(TestRegister)波特率扩展寄存器(BRPExtensionRegister)2.报文接口寄存器组IF1寄存器组和IF2寄存器组第三章CANbus现场总线19接口寄存器避免了CPU访问报文RAM而影响报文RAM与CANbus之间的数据处理,一个完整的报文对象(或部分报文对象)可在报文RAM和IFx报文缓冲寄存器之间传送。每一组寄存器都包括了由它们本身命令寄存器控制的报文缓冲寄存器。命令屏蔽寄存器规定了数据传送的方向和哪部分报文对象将被发送,命令请求寄存器用于选择报文RAM中的报文对象是要发送的报文还是将要接收的报文,还控制着命令屏蔽寄存器。IFx命令请求寄存器(CommandRequestRegister)当CPU向IFX命令请求寄存器中写入报文号,报文就开始传输。IFx命令屏蔽寄存器(CommandMaskRegister)规定了报文的传送方向和选择哪一个IFx报文缓冲寄存器作为数据传送的数据源或目的地址。IFx报文缓冲寄存器(MessageBufferRegisters)报文缓冲寄存器是报文RAM中报文对象的镜象。IFx屏蔽寄存器(MaskRegister)IFx仲裁寄存器(ArbitrationRegisters)IFx报文控制寄存器(MessageControlRegisters)IFx数据寄存器A和BCAN报文是按以下的顺序存储在IFx报文缓冲寄存器中的。1514131211109876543210IF1报文数据A1Data1Data0IF1报文数据A2Data3Data2IF1报文数据B1Data5Data4IF1报文数据B2Data7Data6IF2报文数据A1Data1Data0IF2报文数据A2Data3Data2IF2报文数据B1Data5Data4IF2报文数据B2Data7Data6在一个CAN数据帧中,先传Data0,最后传Data7,每个字节的最高位首先被传送。报文RAM中有32个报文对象,为避免相互影响(CPU对报文RAM和CAN对报文RAM的操作之间),CPU不能直接访问报文对象,而通过IFx接口寄存器组访问。3.报文处理器寄存器组中断寄存器(InterruptRegister)状态中断优先级最高。在报文中断中,报文对象的中断优先级随着报文号的增加而降低。即报文号越小,报文对象优先级越高。发送请求寄存器(TransmissionRequestRegister)发送请求寄存器存储32个报文对象的发送请求,可以通过读来判断是否有发送请求发生。可通过IFx报文接口寄存器对其置位和复位或者成功收到/发送远程帧时置位/复位。新数据寄存器(NewDataRegister)CPU读该寄存器可检查哪些报文对象被更新。NewDat位可被置位/复位,一种方法是第三章CANbus现场总线20CPU通过IFx报文接口寄存器,另一种方法是成功接收/发送数据帧.中断标志寄存器(InterruptPendingRegisters)报文有效寄存器(MessageValidRegister)第三节C8051F04X中的CAN控制器C8051F04X系列单片机是完全集成的混合信号系统级芯片(SOC),具有与8051指令集完全兼容的CIP-51内核。它在一个芯片内集成了构成一个单片机数据采集或控制系统所需的几乎所有的模拟和数字外设及其他功能部件。这些外部设备的高度集成为设计小体积、低功耗、高可靠性、高性能的单片机应用系统提供了方便,也可使系统的整体成本大大降低。参考网站:控制器,利用CAN协议可以执行一系列的信息交换。CAN控制器很容易在CAN网络实现信息交流并和CAN2.0A和2.0B兼容。CAN控制器包含有CAN内核、报文RAM、报文处理器和控制寄存器。CAN控制器的速率可以达到1MB/秒,F04X中CAN拥有32个报文对象,每一个都有自己的屏蔽位用于接收或过滤收到的信息。收到的数据、报文对象和屏蔽标志都储存在CAN的报文RAM中。CAN控制器自动完成发送数据和接收屏蔽功能,而不需要MCU的参与。通过配置CAN控制器,可以借助于MCU中的特殊功能寄存器来接收和发送数据。§3.3.0CAN