canbus
- 格式:doc
- 大小:264.50 KB
- 文档页数:9
第三章 CANbus现场总线 黄石市科威自控有限公司 15 第三章 CANbus现场总线 现场总线是安装在生产过程区域的现场设备/仪表与控制室内的自动控制装置/系统之间的一种串行、数字式、多点通信的数据总线。现场总线(Fieldbus)技术是实现现场级控制设备数字化通信的一种工业现场层网络通信技术,可使用一条通信电缆将现场设备(智能化、带有通信接口)连接,用数字化通信代替4-20mA/24VDC信号,完成现场设备控制、监测、远程参数化等功能。 CAN,全称为“Controller Area Network”,即控制器局域网,由德国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.0 CAN控制器介绍 本小节可参考BOSCH-—CAN的用户手册 CAN网络的通信及网络协议主要是由CAN控制器来实现的。 CAN控制器由CAN核、报文RAM、报文处理器、控制寄存器组和组件接口五部分组成。各部分作用如下: CAN核遵从CAN2.0A和CAN2.0B协议标准,波特率可根据用户技术需要编程,最高可达1M Bps(距离最长40米)。 CAN通信时,个别的报文对象需要配置。报文对象及接收过滤用的屏蔽标识均存入报文RAM。 报文处理器实现了报文处理的功能。这些功能包括接收过滤、CAN核和报文RAM之间的数据交换、发送请求的处理、组件中断。 控制寄存器组可由外部MCU通过组件接口直接操作。这些寄存器用于控制/配置CAN核、报文处理器和访问报文RAM。 组件接口实现了CAN控制器与外部MCU的连接。
§3.2.1 相关寄存器的介绍 CAN控制寄存器为16位的寄存器,高位在奇数地址,低位在偶数地址。
1. 控制器寄存器组 控制器寄存器组控制着操作模式、CAN位定时的配置和提供状态信息 CAN控制寄存器(CAN Control Register) 状态寄存器(Status Register) 出错计数器(Error Couuter) 位定时寄存器(Bit Timing Register) 测试寄存器(Test Register) 波特率扩展寄存器(BRP Extension Register)
2. 报文接口寄存器组 IF1寄存器组和IF2寄存器组 第三章 CANbus现场总线 黄石市科威自控有限公司 19 接口寄存器避免了CPU访问报文RAM而影响报文RAM与CAN bus之间的数据处理,一个完整的报文对象(或部分报文对象)可在报文RAM和IFx报文缓冲寄存器之间传送。 每一组寄存器都包括了由它们本身命令寄存器控制的报文缓冲寄存器。命令屏蔽寄存器规定了数据传送的方向和哪部分报文对象将被发送,命令请求寄存器用于选择报文RAM中的报文对象是要发送的报文还是将要接收的报文,还控制着命令屏蔽寄存器。 IFx命令请求寄存器(Command Request Register) 当CPU向IFX命令请求寄存器中写入报文号,报文就开始传输。 IFx命令屏蔽寄存器(Command Mask Register) 规定了报文的传送方向和选择哪一个IFx报文缓冲寄存器作为数据传送的数据源或目的地址。 IFx报文缓冲寄存器(Message Buffer Registers) 报文缓冲寄存器是报文RAM中报文对象的镜象。 IFx屏蔽寄存器(Mask Register) IFx仲裁寄存器(Arbitration Registers) IFx报文控制寄存器(Message Control Registers) IFx数据寄存器A和B CAN报文是按以下的顺序存储在IFx报文缓冲寄存器中的。 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 IF1报文数据A1 Data1 Data0 IF1报文数据A2 Data3 Data2 IF1报文数据B1 Data5 Data4 IF1报文数据B2 Data7 Data6 IF2报文数据A1 Data1 Data0 IF2报文数据A2 Data3 Data2 IF2报文数据B1 Data5 Data4 IF2报文数据B2 Data7 Data6 在一个CAN数据帧中,先传Data0,最后传Data7,每个字节的最高位首先被传送。 报文RAM中有32个报文对象,为避免相互影响(CPU对报文RAM和CAN对报文RAM的操作之间),CPU不能直接访问报文对象,而通过IFx接口寄存器组访问。