硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1552|回复: 28
收起左侧

[CAN/FDCAN] canopen能否传输文件

  [复制链接]

1

主题

17

回帖

20

积分

新手上路

积分
20
发表于 2024-12-3 11:42:10 | 显示全部楼层 |阅读模式
有一个问题,就是canopen能否支持文件的传输
回复

使用道具 举报

1

主题

17

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2024-12-3 11:44:23 | 显示全部楼层
例如,我需要更改开发板文件系统里面的一个文件,能否直接通过canopen直接更改,有大佬做过类似的开发吗。有点像通过文件来初始化canopen的对象字典里的配置
回复

使用道具 举报

1

主题

17

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2024-12-3 13:14:48 | 显示全部楼层
或者,能否通过sdo块传输去传输文件数据,然后再通过文件操作,将这些文件数据写到一个文件里面去。那么我块传输的数据在哪里接受呢,对象字典的回调函数吗?有大佬做过类似的吗,不知道能不能告知一下,感激不尽
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2024-12-3 16:57:26 | 显示全部楼层
基于CAN的话可以用UDS来传哈,34 36 37稳稳的
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-12-4 09:22:59 | 显示全部楼层
chenxingccc 发表于 2024-12-3 13:14
或者,能否通过sdo块传输去传输文件数据,然后再通过文件操作,将这些文件数据写到一个文件里面去。那么我 ...

SDO里面有个普通SDO协议,可以用于文件传输。
回复

使用道具 举报

1

主题

47

回帖

50

积分

初级会员

积分
50
发表于 2024-12-4 10:57:58 | 显示全部楼层
我做过CANopen协议的bootloader,标准协议,通过SDO进行文件升级的
回复

使用道具 举报

1

主题

17

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2024-12-4 13:38:08 | 显示全部楼层
lililili 发表于 2024-12-4 10:57
我做过CANopen协议的bootloader,标准协议,通过SDO进行文件升级的

是canopen吗还是can,canopen可以兼容这个bootloader吗老哥
回复

使用道具 举报

1

主题

17

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2024-12-4 17:38:11 | 显示全部楼层
eric2013 发表于 2024-12-4 09:22
SDO里面有个普通SDO协议,可以用于文件传输。

是sdo 的块传输吗
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-12-5 08:55:57 | 显示全部楼层

看这个帖子里面普通SDO协议部分

https://www.armbbs.cn/forum.php?mod=viewthread&tid=117650
回复

使用道具 举报

1

主题

17

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2024-12-5 16:59:44 | 显示全部楼层
eric2013 发表于 2024-12-5 08:55
看这个帖子里面普通SDO协议部分

https://www.armbbs.cn/forum.php?mod=viewthread&tid=117650

硬汉哥,碰到这个问题,就是我块传输进去的数据,我无法确认子索引数据的size呀,那字典定义的这一块应该咋写呀
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-12-5 17:28:50 | 显示全部楼层
chenxingccc 发表于 2024-12-5 16:59
硬汉哥,碰到这个问题,就是我块传输进去的数据,我无法确认子索引数据的size呀,那字典定义的这一块应该 ...

这个普通SDO协议我没测试过,我一直用的快速SDO,后面我试试。
回复

使用道具 举报

1

主题

47

回帖

50

积分

初级会员

积分
50
发表于 2024-12-6 09:12:37 | 显示全部楼层
chenxingccc 发表于 2024-12-4 13:38
是canopen吗还是can,canopen可以兼容这个bootloader吗老哥

这个bootloader就是基于CANOPEN协议的
回复

使用道具 举报

1

主题

17

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2024-12-12 15:58:06 | 显示全部楼层
eric2013 发表于 2024-12-5 17:28
这个普通SDO协议我没测试过,我一直用的快速SDO,后面我试试。

#define SDO_MAX_LENGTH_TRANSFER
回复

使用道具 举报

1

主题

17

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2024-12-12 16:00:51 | 显示全部楼层
eric2013 发表于 2024-12-5 17:28
这个普通SDO协议我没测试过,我一直用的快速SDO,后面我试试。

#define SDO_MAX_LENGTH_TRANSFER ,硬汉哥这个表示单次 SDO传输的最大字节数,但我如果要传输文件进行固件更新的话,一个.bin文件就900+kb了,但我修改SDO_MAX_LENGTH_TRANSFER的值过大就会报错说超出了ram的总大小,这个咋解决呀
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-12-13 00:26:18 | 显示全部楼层
chenxingccc 发表于 2024-12-12 16:00
#define SDO_MAX_LENGTH_TRANSFER ,硬汉哥这个表示单次 SDO传输的最大字节数,但我如果要传输文件进行固 ...

可以分批传输。自己管理下地址即可
回复

使用道具 举报

1

主题

3

回帖

6

积分

新手上路

积分
6
发表于 2024-12-13 16:38:03 | 显示全部楼层
不错  就是canopen能否支持文件的传输
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-12-14 01:40:31 | 显示全部楼层
rtos 发表于 2024-12-13 16:38
不错  就是canopen能否支持文件的传输

支持,普通SDO协议可以用来传输文件
回复

使用道具 举报

1

主题

17

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2024-12-18 09:21:58 | 显示全部楼层
eric2013 发表于 2024-12-13 00:26
可以分批传输。自己管理下地址即可

硬汉哥,我在传输文件的过程中,有时候会传着传着突然canopen整个通信就断开了,连心跳包都没有了是因为啥,特别是如果我发送的过快的话,这种情况会频繁发生
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-12-19 07:53:19 | 显示全部楼层
chenxingccc 发表于 2024-12-18 09:21
硬汉哥,我在传输文件的过程中,有时候会传着传着突然canopen整个通信就断开了,连心跳包都没有了是因为 ...

可以看下CAN的错误状态寄存器,看看是那个地方出错了
回复

使用道具 举报

1

主题

17

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2025-2-6 15:37:00 | 显示全部楼层
eric2013 发表于 2024-12-19 07:53
可以看下CAN的错误状态寄存器,看看是那个地方出错了

硬汉哥,canopen 1ms发送一帧数据,要发送十万帧数据,但是sdo响应跟不上导致数据出错,如何优化呢
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2025-2-7 06:16:13 | 显示全部楼层
chenxingccc 发表于 2025-2-6 15:37
硬汉哥,canopen 1ms发送一帧数据,要发送十万帧数据,但是sdo响应跟不上导致数据出错,如何优化呢

这个有必要测试下,将支持的波特率设置到最高,看看响应一次最短时间是多少,再做进一步的优化
回复

使用道具 举报

1

主题

17

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2025-2-7 13:13:10 | 显示全部楼层
eric2013 发表于 2025-2-7 06:16
这个有必要测试下,将支持的波特率设置到最高,看看响应一次最短时间是多少,再做进一步的优化

如何优化响应时间呢,波特率已经拉到最高了,大概15ms左右的一个响应时间
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2025-2-8 05:56:21 | 显示全部楼层
chenxingccc 发表于 2025-2-7 13:13
如何优化响应时间呢,波特率已经拉到最高了,大概15ms左右的一个响应时间

15ms太长了,这个有必要调试跟踪下执行流程了,看看那个地方比较消耗时间
回复

使用道具 举报

1

主题

17

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2025-2-8 14:05:32 | 显示全部楼层
eric2013 发表于 2025-2-8 05:56
15ms太长了,这个有必要调试跟踪下执行流程了,看看那个地方比较消耗时间

就是找不到原因呢,基本都是canopen的源代码,通过proceedSDO这个函数,硬汉哥遇到过这样的情况吗
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2025-2-9 07:33:11 | 显示全部楼层
chenxingccc 发表于 2025-2-8 14:05
就是找不到原因呢,基本都是canopen的源代码,通过proceedSDO这个函数,硬汉哥遇到过这样的情况吗

就是要调试这个,看看时间耽误在那里了,我的时间没这么长
回复

使用道具 举报

1

主题

17

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2025-4-16 17:16:47 | 显示全部楼层
eric2013 发表于 2025-2-9 07:33
就是要调试这个,看看时间耽误在那里了,我的时间没这么长

例如我在发送软件上面配置每次发送1帧,每帧间隔1ms,发送8条报文之后,sdo会回复一个报文。实际情况是偶尔会出现发送10条报文之后,sdo才刚刚发出响应报文。当我把每帧间隔修改为5ms之后,是正常8条报文回复。这种情况硬汉哥有什么好的调试建议吗
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2025-4-17 09:40:21 | 显示全部楼层
chenxingccc 发表于 2025-4-16 17:16
例如我在发送软件上面配置每次发送1帧,每帧间隔1ms,发送8条报文之后,sdo会回复一个报文。实际情况是偶 ...

感觉是响应不及时,得想办法优化下了,另外你的延迟1ms是发送完成后延迟1ms,还是启动发送后延迟1ms
回复

使用道具 举报

1

主题

17

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2025-4-17 10:21:51 | 显示全部楼层
eric2013 发表于 2025-4-17 09:40
感觉是响应不及时,得想办法优化下了,另外你的延迟1ms是发送完成后延迟1ms,还是启动发送后延迟1ms

对,就是响应不及时,这个要怎么优化呢,定时器的问题吗还是线程的优先级问题呢。应该是完成发送后1ms,因为我看CANpro上面的时间表示,发送的每一帧报文时间间隔是15ms,并不是1ms
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2025-4-18 10:04:19 | 显示全部楼层
chenxingccc 发表于 2025-4-17 10:21
对,就是响应不及时,这个要怎么优化呢,定时器的问题吗还是线程的优先级问题呢。应该是完成发送后1ms, ...

那估计问题是出在这里了,间隔时间太长。需要捋顺下代码来找问题了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-4-26 02:00 , Processed in 0.425359 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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