stm32 CANOpen

下面是CAN协议与OSI网络模型的一个对比。CAN的物理层分了三层分别是MDI,PMA和PLS,数据链路层分了两层:MAC与LLC。这五层就是最原始的CAN协议,标准是ISO11898。也就是说CAN协议一开始是没有应用层的。后来有一种叫CANOpen的基于CAN的应用层协议被开发出来,标准是CiA301。

在实际开发CAN器件的时候不一定要用CANOpen,你可以根据自己的需要定制自己的应用层协议。

stm32 CANOpen

CANOpen协议共有6种通讯对象,分别是:PDO、SDO、SYNC、TIME、EMCY、NMT。这6种通讯对象完成了CANOpen协议的所有通讯功能。其中我们只介绍使用较多的PDO、SDO、NMT(4.4)。

通信对象ID(COB-ID)
CANOpen协议的通讯对象主要利用了CAN协议中的数据帧和远程帧。为了区分不同的通讯对象,CANOpen协议利用数据帧/远程帧中的ID。其中第7位到第10位为功能代码。第0位到第6位为节点ID,用以区分不同节点的相同功能。这样就允许最多127个从节点与主节点通讯。
stm32 CANOpen

下面是预定义的各通讯对象的COB-ID

stm32 CANOpen

其中绿色部分为广播的通讯对象,蓝色部分为点对点的通讯对象。

COB-ID的大小也决定了通讯对象的优先级,其中NMT的优先级最高,PDO的优先级高于SDO。

 

CANOpen的网络管理使用了master/slave结构。Master通过模块控制服务,可以控制slave的状态:{STOPPED, PRE-OPERATIONAL, OPERATIONAL, INITIALISING}.模块控制服务可以只针对一个节点,也可以是所有节点同时改变。
 

stm32 CANOpen