CANOpen的网络管理使用了master/slave结构。Master通过模块控制服务,可以控制slave的状态:{STOPPED, PRE-OPERATIONAL, OPERATIONAL, INITIALISING}.模块控制服务可以只针对一个节点,也可以是所有节点同时改变。图40列出了模块控制服务的命令字,表8列出了命令字标识符与NMT的对应关系。图41是CANOpen设备上电之后的状态转换图及触发条件表9。设备上电初始化之后,设备进入PRE-OPERATIONAL状态,此时SDO服务开启。在这个状态设备可以配置参数已经分配ID。然后节点可以转换到OPERATIONAL状态,在OPERATIONAL状态PDO服务开启。节点状态与通讯对象之间的关系,可以参考表10。所以一般我们在设备处于PRE-OPERATIONAL状态时对设备进行配置。
图40 NMT命令字
表8NMT命令标识符
图41CANOpen器件的状态转换
表9触发条件
表10状态与通讯对象的关系
虽然CAN总线有各种有点,但是它也有传输速率低,数据传输效率低的缺点。随着CAN应用的增多,这个缺点也越来越突出。于是博世公司在2011年开发了CAN FD协议。
CAN FD对CAN协议主要有两点改进:一、速率可变。CAN报文在数据传输阶段可以使用更快的速率。二、一个CAN报文可传输的报文上限由8byte变为64byte。这两个改变是数据的传输速率提升了6倍[1]。
图42速率可变
图43数据场扩展到64byte
为了实现CAN FD,CAN FD报文的格式在CAN的基础上做了一些修改。
在仲裁场,原来的RTR(remote transmission request)位变为RRS(remote request substitution)位,并始终为显性。也就是说,CAN FD不支持远程帧。如果要使用远程帧可以使用CAN报文(CAN FD兼容经典的CAN报文)。
图44仲裁场的变化
对于控制场和数据场变化更大,这里体现了CAN FD和CAN的主要差别。
IDE(identifier extension)指示标识符的位数。如果为显性,则采用11位的标识符。如果为显性则采用29位的标识符。
FDF(flexible data rate format)标识是否为CAN FD 的帧格式。如果为显性,则报文为经典的CAN报文格式,数据场最多8个byte。如果为隐性,则数据场最多64byte。
BRS(bit-rate switch)指示是否采用可变速率。如果为显性,则数据场的传输速率与仲裁场相同,如果为隐性,数据场采用变速率传输。CAN FD推荐采用1:8的速率比,即数据场的传输速率是仲裁场的8倍。而且如果是可变速率,速率就是在BRS为的采样点开始变的。
ESI(error state indicator)指示节点错误状态。如果为显性,节点为错误主动节点。如果为隐性,节点为错误被动结点。
图45控制场与数据场的变化
为了支持最多64byte的数据场,DLC也发生了变化,见图46。
图46 CAN FD中DLC的表示
CAN FD还在安全性上有了提高。为了避免位填充对CRC的影响,CAN FD在CRC场中增加了stuff count记录填充位的个数对应8的模,并用Grey Code表示(图48)。还增加了奇偶校验位。FSB(fixed stuff-bit)固定为前一位的补码
图47 CRC场的变化