SylixOS ICAN 协议移植笔记

  1. ICAN协议简介

  2. ICAN简介。

    ICAN协议( Industrial CAN protocol )为基于现场总线 CAN-bus的应用层协议。ICAN协议为工业控制应用领域提供了一种简单可靠,易于开发的总线系统。

    在市场中,DeviceNet 和CANopen使用的较多,但是它们的协议规范比较复杂,理解和开发的难度比较大,对于一些并不复杂的基于CAN总线的控制网络不太适合。因此有必要开发设计一种简单可靠的CAN高层协议,以适合于    CAN的简单应用,ICAN协议因此而生。

    ICAN协议属于面向节点的协议。在ICAN协议中,通过特定的功能码来建立或者删除数据连接。并且在报文的标识符中指定了源节点地址和目标节点地址,因此信息链接建立以后,数据通讯的双方就已经确定,并且可以在该连接的基础上进行数据通信。

  3. ICAN报文简介

  4. 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段的分配

  5. ICAN协议的报文数据分配

    CAN报文为短帧报文,最多可以传送8个字节数据。在ICAN协议中报文的数据部分主要用于传送功能码相关的参数,以及特定的功能数据。对于报文数据部分的分配相对比较简单,主要考虑以下方面:

    在实际应用中需要传送大于8个字节的数据,因此对报文数据部分的分配需要增加分段传送的机制。同时在报文数据定义时,充分利用报文数据的8字节长度,合理分配特殊的功能码和有效数据,尽可能在每帧报文中携带尽可能多的有效数据。

    如图 22所示:在ICAN协议报文数据分配中,报文数据的第一个字节用作特定的报文分段传送标识。报文数据剩余的7个字节均可拥有传送有效的数据(功能码相关的参数)。在ICAN协议中每帧能够传输的有效数据达到7个字节。

    22 ICAN报文数据分配

    关于ICAN协议主要是CAN2.0B协议中的ID 段和数据段。由于ICAN协议中具体每段如何使用所占篇幅过多,文本再次不做过多介绍。(注:详情请见《ICAN应用层协议V1.0》百度可查)。

  6. SylixOS移植ICAN

    在网上查找相关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协议进行报文解析并且打印出解析后的相关数据。

  7. 免责声明

    内部交流文档,若发现相关错误或者建议,请及时联系文档创建者进行修订和更新。

猜你喜欢

转载自blog.csdn.net/Best_Ccc/article/details/72518968
今日推荐