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

posted @ 2021-11-15 21:13  InitForever  阅读(322)  评论(0编辑  收藏  举报