使用普通 SDO 协议进行数据上传和下载

参考资源

CANopen协议栈源码:

https://github.com/CANopenNode/CANopenNode

CANopen协议栈基于STM32平台开发的demo,不过这里是基于STM32CUBEIDE开发的:

https://github.com/CANopenNode/CanOpenSTM32

协议栈的配置工具:

https://github.com/CANopenNode/CANopenEditor

00_NMT网络管理的模块控制

https://blog.csdn.net/zaichen321/article/details/128841446

安富莱电子开发板视频教程

https://www.armbbs.cn/forum.php?mod=viewthread&tid=121619&extra=page%3D1

周立功《CANopen轻松入门》

CANopen的普通SDO协议

当需要传输的值超过 32 位时,就不能使用快速 SDO 传输。必须使用普通 SDO 进行分帧传输。在应用中较少用到,一般用于 CANopen 节点的程序固件升级,或者做网关转换MVB 总线之类数据最大可达 256 位的应用。
下载协议如下图所示:
在这里插入图片描述
上传协议如下图所示:
在这里插入图片描述

CANopen配置

使用EDSEditor打开EDS文件,配置一个变量使其长度超过4字节,只有超过4个字节才能启动普通SDO的连续传输:
在这里插入图片描述
配置完成后导出配置文件。

测试结果

进行上传协议测试,注意续传有时间要求,即cs=40和cs=60的指令时间不能过长,否则会触发超时错误,该项具体在哪里配置还需要进一步研究:
在这里插入图片描述
进行下载报文测试,注意下载报文的测试中,结尾数据传送有特殊的要求:

  1. 需要按上传协议进行处理,如上一帧的续传命令为0x00,则结束帧的报文为0X1x,如果上一帧的续传命令为0x10,则结尾帧的报文为0x0x。
  2. 结束帧的帧长指的是数据+1的长度,如下图的数据发送的是0x0c0b0a0908070605,共8字节的数据,其中cs为0x00的报文发送了7个字节数据,cs为0x1D的报文中数据有效负载只有1字节,0X1D的意义是写入两字节,即结束报文描述的数据长度为有效负载+1
    在这里插入图片描述
    这里需要特别注意结束帧的数据字长问题,这也是困扰我一个上午的问题。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三环西北角

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值