如果你做过can的开发, 但是短时间不能理解canopen, 这个笔记会把关键点讲出来, 有助于你入门
1. canopen是基于标准的can上面的应用层协议
2. canopen是主从模式, 采用11bit的ID, 前面4个bit是功能码, 后面7bitt是地址, 因此最多127个地址
功能码说明本帧数据的用途:有下面几种, 先把难理解的说明一下;
SDO: 最要的数据, 要求有应答, 主机设置充电器的关键参数等
PDO: 快速的数据, 不要应答, 比如电流,电压,so,c温度等
对象字典:
就是一个主机/从机在设计阶段约定要交换的数据, 也就是通讯的内容所在
有设备制造商的信息(名称, 版本...),
有运行参数:比如充电的电流,电压,so,c温度等, OTA要传给MCU的bin文件的大小crc等
对象字典的索引分为16位的主索引和8位的子索引
第一个子索引0, 表示接下来有多少个sub-index
SDO主要用于参数(快速 SDO 协议)和bootloader(普通/块传输)
难以理解的PDO
PDO的目的是想高效快速传输参数, 因此不想在数据区8byte里面有多余的东西, 那就约定好在里面放入哪些对象字典里面的项目, 因为PDO有ID里面4组(tx/rx)地址, 可以传输: 4*2*8=64byte的数据
怎样约定:
通讯对象就是通讯的方式(同步[收到主机的同步信号再传输]/异步[有事情发生就传输], 时间间隔等)
映射对象就是PDO对应的对象字典里面的参数地址, 比如 TPDO1的映射对象时1A00, 就是说在字典的1A00里面写入要传输哪些字典里面的参数:
所以当发送TPDO1的时候, 相当于发送了字典里面其他几个组合的参数
其他的大家容易理解的我就不多嘴了. 希望看了觉得有帮助的点个赞, 让我知道帮助了一些正在绞尽脑汁的兄弟