ICAN协议( Industrial CAN protocol )为基于现场总线 CAN-bus的应用层协议。ICAN协议为工业控制应用领域提供了一种简单可靠,易于开发的总线系统。网络
在市场中,DeviceNet 和CANopen使用的较多,可是它们的协议规范比较复杂,理解和开发的难度比较大,对于一些并不复杂的基于CAN总线的控制网络不太适合。所以有必要开发设计一种简单可靠的CAN高层协议,以适合于 CAN的简单应用,ICAN协议所以而生。spa
ICAN协议属于面向节点的协议。在ICAN协议中,经过特定的功能码来创建或者删除数据链接。而且在报文的标识符中指定了源节点地址和目标节点地址,所以信息连接创建之后,数据通信的双方就已经肯定,而且能够在该链接的基础上进行数据通讯。操作系统
ICAN协议通讯的全部报文都依赖于CAN 2.0B协议。也就是ID帧为29bit,在CAN2.0B协议中这29bit只当节点的ID使用,ICAN则充分利用了这29bit。在ID中加入了不少控制信息。如图 21所示主要分为SrcMACID(源节点编号)占扩展帧ID的21 – 28位,DestMACID(目标节点编号)占扩展帧ID的13 – 20位,ACK(应答位)单独占扩展帧ID的12位,设计
FUNC ID(功能码)占扩展帧ID的8 – 11位,和Source ID(资源节点编号)占扩展帧ID的0 – 7位。资源
图 21 ICAN协议对 CAN报文ID段的分配开发
CAN报文为短帧报文,最多能够传送8个字节数据。在ICAN协议中报文的数据部分主要用于传送功能码相关的参数,以及特定的功能数据。对于报文数据部分的分配相对比较简单,主要考虑如下方面:文档
在实际应用中须要传送大于8个字节的数据,所以对报文数据部分的分配须要增长分段传送的机制。同时在报文数据定义时,充分利用报文数据的8字节长度,合理分配特殊的功能码和有效数据,尽量在每帧报文中携带尽量多的有效数据。it
如图 22所示:在ICAN协议报文数据分配中,报文数据的第一个字节用做特定的报文分段传送标识。报文数据剩余的7个字节都可拥有传送有效的数据(功能码相关的参数)。在ICAN协议中每帧可以传输的有效数据达到7个字节。基础
图 22 ICAN报文数据分配百度
关于ICAN协议主要是CAN2.0B协议中的ID 段和数据段。因为ICAN协议中具体每段如何使用所占篇幅过多,文本再次不作过多介绍。(注:详情请见《ICAN应用层协议V1.0》百度可查)。
在网上查找相关ICAN资料,发现ICAN协议只是在中国一些特定的场合使用,并且大多用于STM32这种主频较低,且没有移植操做系统的单片机上。本人参考了STM32系列单片机有关ICAN协议部分的移植,与其说是移植不如说是本人参照ICAN协议,在应用APP中,本身实现了对ICAN的报文的封装和解析。有些功能和机制还未彻底实现,若是发现实现有不稳当的地方,请及时和做者联系进行更正。
本文移植的ICAN协议,是在底层CAN控制器已经调通能正常收发报文的前提下进行的。在APP中已经封装好了一帧CAN报文,(注:详细应用APP的操做在以前的文章中已经有详细的介绍。在此就不作过多介绍,本次移植基于本公司IMAX6Q试验箱平台。)在硬件电路上,把试验箱上CAN0和CAN1两个CAN控制器输出端的CAN_H相连,CAN_L相连。打开CAN0设备进入读取模式,打开CAN1进入发送模式,(发送的报文在应用程序中已经封装完毕。)CAN1设备向外发送CAN报文。CAN0设备收到CAN报文后根据ICAN协议进行报文解析而且打印出解析后的相关数据。
内部交流文档,若发现相关错误或者建议,请及时联系文档建立者进行修订和更新。