CANopen协议 个人学习体会
前沿: CANopen协议是CAN协议的应用层角度,从从机的角度而言,主要发送心跳包和自身变化情况(TPDO)告诉主机,
而从主机的角度,主要是节点管理(NMT模式)、SDO对象字典的处理,以及RPDO,主机发送个从机的消息进行处理,其实
无论是NMT,SDO,还是RPDO,都是面向对象的思想。基本的内容是不变的,如节点ID、消息MSG、长度LEN等。
(1)在设计CANopen中NMT,SDO,PDO、HEARTBEAT 数据结构体的时候,抓住共同的MSG,变换的如心跳的时间戳,心跳时间,
TPDO需要考虑到inhibit time 和event time,组合方式如何实现的算法,需要考虑每次发送完成后,需要更新心跳时间戳和禁止
时间和事件时间,通过systick可以记录时间的变化。
(2) CAN消息的收发需要写入队列,这样可以防止丢包事件的产生,虽然我也不知道为什么,但是先记住吧。
(3)设计CAN通讯时候附加功能,如能够修改节点ID, 波特率等,如何永久修改,掉电后依然保持,一种方式可以通过IIC协议写入外设EEPROM,
第二种方式也可以通过写入flash中实现相应功能,为什么要用全局变量的形式写入flash的地址,而不是直接用地址的形式,因为flash需要开锁后才能
有效的存储这个值,所以只能采用全局变量的方式传值到相应的变量中去。
(4)协议只是让人们能够读懂而已,企业内部也可以自己定义协议,canopen在不同企业中的规定是不同的。无论是TCP、wifi等协议共性是一样的。
题外话:
协议只是规定,如何用好协议是最重要的。而对于嵌入式行业而言,其实就是工具人。
其实对于嵌入式设备,软件只是工具,也就是我们只是工具人,人家写好设计好芯片,说这个寄存器干嘛用的,然后你通过查看手册,去这样操作
实现相应的功能,也就是只是工具人,最好不要成为工具人,转行承认硬件或芯片设计师是最好的。(本人对于嵌入式行业的看法)
Date:2021-11-15