控制器局域网(CAN)模块是用于与其他外围设备或单片机进行通信的模块,这种接口协议能在较大的噪声 环境中进行通信,具有良好的扰干扰性能。
CAN模块是一个通信控制器,执行的是Bosch公司的CAN2.0A/B协议。它能支持CAN1.2、CAN 2.0A、CAN 2.OB 协议的旧版本和CAN2.OB现行版本,此控制器模块包含完整的CAN系统。
CAN模块由协议驱动和信息缓冲及控制组成,CAN协议驱动CAN总线上接收和发送信息的所有功能。信息装载 到某个相应的数据寄存器后再发送,通过读相应的寄存器可检查状态与错误信息。在CAN总线上检测到的任 何信息都要进行错误检查,然后与过滤器进行比较,判断是否被接收和存储到两个接收寄存器之一。
2.CAN模块支持的帧类型
CAN模块支持以下帧类型:标准数据帧、扩展数据帧、远程帧、出错帧、过载帧和空闲帧。
(1)数据帧。
用于各节点之间传送数据消息,由7个不同的位场组成:帧起始、仲裁场、控制场、数据场、CRC场、应答 场和帧结束。数据帧结构如图1所示。
图1 数据帧组成
(2)远程帧。
当CAN网络上一个节点需要其他节点所拥有的数据信息时,可以通过发送远程帧来请求另一节点发送。该 远程帧的标识符标识了所需数据的类型,因此,被送回的数据信息的标识符和远程帧的标识符完全一致。数 据源节点在接收到远程帧后,根据远程帧的标识符判断所需数据信`患类型,并在总线空闲时将相应数据送 出。远程帧由6个位场组成:帧起始、仲裁场、控制场、CRC场、应答场和帧结束。除了没有数据场和RTR为 隐性外,远程帧结构和数据帧完全相同,远程帧结构如图2所示。
图2 远程帧结构
(3)错误帧。
为进行错误界定,每个CAN控制器均设有两个错误计数器:发送错误计数器(TEC)和接收错误计数器 (REC)。CAN总线上的所有节点按其错误计数器数值情况可分为3个状态:错误活动状态、错误认可状态和 总线关闭状态。节点状态转换如图3所示。
图3 节点状态转换
上电复位后,两个错误计数器的数值都为0,节点处于错误活动状态,可正常参与总线通信,检测到错误时 ,发送活动错误标志。当错误计数器任一数值超过127时,节点进入错误认可状态。处于错误状态的节点可 参与总线通信,但出错后,发送认可错误标志,并在开始进一步发送数据之前等待一段附加时间(暂停发送 场)。
当发送错误计数器和接收计数器均小于或等于127时,节点从错误认可状态再次变为错误活动状态。若发送 错误计数器数值超过255后,节点进入总线关闭状态,既不能向总线发送数据,也不能从总线接收数据。当 软件执行操作模式请求命令,并等待128次总线释放(BusˉFree)序列(11位连续隐性位)后,节点从总线 脱离状态重新回到错误活动状态。
错误帧由两个不同的位场组成,第一个场由来自不同的节点的错误标志叠加而成,第二个场为错误界定符 ,错误帧结构如图4所示。
图4 错误帧结构
(4)过载帧。
超载帧由超载标志和超载界定符组成。超载标志由6个显性位组成,其格式与活动错误标志相同。超载界 定符由8个隐性位组成,其格式与错误界定符相同。导致发送超载帧的两个条件为:
①一个接收节点内部接收条件未准备好,要求延迟下一个数据帧或远程帧发送;
②在间歇场(3位)检测到显性位。
当超载标志发出后,每个节点监视总线状态,直至检测到从显性至隐性位的跳变,此时,所有的节点均己 完成了超载标志的发送,随后所有节点开始发送8个隐性位组成的超载界定符,超载帧结构如图5所示。