查看: 454|回复: 0

NXP的SDK自带canopen协议栈的BUG,关于设置RPDO时,长度错误

[复制链接]

该用户从未签到

1

主题

1

帖子

0

新手上路

Rank: 1

积分
34
最后登录
2025-4-27
发表于 2025-4-17 18:44:25 | 显示全部楼层 |阅读模式
背景:刚接触canopen一个月,我做一个NXP的MCU,使用SDK包里自带的canopen协议栈(EmSA CANopen (FD) Libraries for NXP SDKs)(大部分代码是封死在.a库文件)。硬件can模块的部分也一起封在了.a库文件里,看不到can模块部分代码,无法排查问题。根据ChangeLogKSDK.txt文档内容,得出协议栈版本  - 7.10_rev1。

问题:电脑作为上位机使用can分析仪的上位机软件,发送RPDO给MCU,发现一个问题,RPDO的不知道为什么,上位机要多发一个字节,MCU这边才能进入MCOUSER_RPDOReceived回调函数,比如字典里RPDO的映射对象设置了4字节(例如0x20120020)其中的最后0x20数值就代表4字节,但是上位机的DLC(数据长度)要选择5个字节(或以上),MCU才能成功接收到并执行回调,并成功设置字典内容(设置字典里的值的这部分操作代码不在回调里,回调只是给用户使用的写额外应用代码的),否则不但无法执行回调,字典内容也不会改变。
1.比如设置了1字节,那么DLC就需要设置2字节,MCOUSER_RPDOReceived回调函数才会执行,并得出正确的数据,以此类推。
2.如果设置了8字节,如果DLC小于等于8,和上面一样不会执行回调,但如果DLC大于8,MCOUSER_RPDOReceived回调函数里接收到的数据都会乱码,而且字典内容无法改变,也就是设置失败。
这是什么原因呢?是canopen协议本身就有的某种设置?是有某种宏可以开关这种设置?还是协议栈的BUG?

回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-9-9 12:00 , Processed in 0.114716 second(s), 20 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表