快捷搜索:  汽车  科技

嵌入式软件基础知识(嵌入式软件专题四)

嵌入式软件基础知识(嵌入式软件专题四)第一个字节,声明增加的ID号的低16位,管理帧一般都是定义为0x4XX,所以只用取低16位就可以区分各个节点了;409:09 01第一轮:声明我在400:00 01407:07 01

CAN网络管理,主要用来管理CAN总线上各个节点的休眠唤醒。CAN和LIN的休眠唤醒不太一样,LIN网络中有主节点,休眠唤醒可以统一由主节点调配,但是CAN网络没有主从关系,每个节点都是对等的。因此,CAN网络休眠唤醒需要一定处理机制,一般采用OSEK令牌环的管理方式。

举个例子:

嵌入式软件基础知识(嵌入式软件专题四)(1)

CAN报文

这里CAN总线上有3个节点,ID分别是400、407、409。

第一轮:声明我在

400:00 01

407:07 01

409:09 01

第一个字节,声明增加的ID号的低16位,管理帧一般都是定义为0x4XX,所以只用取低16位就可以区分各个节点了;

第二个字节,表示自己的状态,根据状态定义表:

#define CNM_OPC_ALIVE (0x01)

#define CNM_OPC_RING (0x02)

#define CNM_OPC_LIMPHOME (0x04)

#define CNM_OPC_ALIVE_NSLEEP (0x01)

#define CNM_OPC_ALIVE_SLEEP (0x11)

#define CNM_OPC_RING_NSLEEP (0x02)

#define CNM_OPC_RING_SLEEP_IND (0x12)

#define CNM_OPC_RING_SLEEP_ACK (0x32)

#define CNM_OPC_LIMPHOME_NSLEEP (0x04)

#define CNM_OPC_LIMPHOME_SLEEP (0x14)

0x01代表ALIVE,相当于第一轮大家都在声明自己在总线上。

第二轮:建环

400:07 02

407:09 02

409:00 02

按照从小到大的顺序,依次建环,最大的接最小的收尾相接形成环路。

第一个字节,报下一个节点ID;

第二个字节,0x02代表RING

第三轮:等待休眠

400:07 12

407:09 12

409:00 02

400:07 12

407:09 12

409:00 12

等待总线上所有节点都进入0x12(SLEEP_IND)状态.

最后,当总线上所有节点都进入SLEEP_IND状态后,由下一个节点下休眠指令

400:07 32,自行休眠,其他节点收到指令后各自休眠。

猜您喜欢: