OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8776|回复: 21

STM32 IAP gprs升级固件问题

[复制链接]

2

主题

62

帖子

0

精华

高级会员

Rank: 4

积分
717
金钱
717
注册时间
2019-5-17
在线时间
274 小时
发表于 2021-8-16 14:25:03 | 显示全部楼层 |阅读模式
5金钱
MCU的 RAM 8K  FLASH 64K  APP大小为30K左右。用的EC200S,使用了TCP链接,目前我把bin文件分割为1K了,一边接收,一边写入,可以升级。升级版:我想一次性发送30K,使用什么方法可以接收数据?来得急处理吗?。环形缓冲器?


最佳答案

查看完整内容[请看2#楼]

如果不加外部存储。 分包发送和一次发30K,没什么区别。丢了或者数据错误 还是一样的。 而且你这个只有8K。即使是有方法,但是真的没必要。。。 不知道你为啥会觉得一次性30K 会是升级版,最后你搞出来了,效果不也是和分包发送一样吗。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

117

帖子

0

精华

高级会员

Rank: 4

积分
559
金钱
559
注册时间
2018-10-3
在线时间
107 小时
发表于 2021-8-16 14:25:04 | 显示全部楼层
如果不加外部存储。 分包发送和一次发30K,没什么区别。丢了或者数据错误 还是一样的。 而且你这个只有8K。即使是有方法,但是真的没必要。。。  不知道你为啥会觉得一次性30K 会是升级版,最后你搞出来了,效果不也是和分包发送一样吗。
回复

使用道具 举报

7

主题

480

帖子

0

精华

高级会员

Rank: 4

积分
783
金钱
783
注册时间
2021-4-15
在线时间
305 小时
发表于 2021-8-16 14:49:45 | 显示全部楼层
帮顶!!!
回复

使用道具 举报

2

主题

592

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1458
金钱
1458
注册时间
2019-7-28
在线时间
137 小时
发表于 2021-8-16 14:54:27 | 显示全部楼层
你RAM有30K这么大?
回复

使用道具 举报

2

主题

62

帖子

0

精华

高级会员

Rank: 4

积分
717
金钱
717
注册时间
2019-5-17
在线时间
274 小时
 楼主| 发表于 2021-8-16 15:23:57 | 显示全部楼层
lpwithv 发表于 2021-8-16 14:54
你RAM有30K这么大?

8K, 原子的 例程是开辟了55K的空间 ,我这不行啊,所有要想办法
回复

使用道具 举报

11

主题

2154

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4953
金钱
4953
注册时间
2015-1-10
在线时间
621 小时
发表于 2021-8-16 15:54:56 | 显示全部楼层
你算算你的接收时间和flash写入时间能否匹配,实现起来也是一页一页写入的
回复

使用道具 举报

2

主题

62

帖子

0

精华

高级会员

Rank: 4

积分
717
金钱
717
注册时间
2019-5-17
在线时间
274 小时
 楼主| 发表于 2021-8-16 16:25:31 | 显示全部楼层
阿侑kevin 发表于 2021-8-16 15:54
你算算你的接收时间和flash写入时间能否匹配,实现起来也是一页一页写入的

我只能分配1K的缓存,就是怕写的时候 耽误了
回复

使用道具 举报

11

主题

2154

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4953
金钱
4953
注册时间
2015-1-10
在线时间
621 小时
发表于 2021-8-16 16:40:18 | 显示全部楼层
泥土很瘦 发表于 2021-8-16 16:25
我只能分配1K的缓存,就是怕写的时候 耽误了

flash在写操作的时候是不响应中断的,要么你的传输速度特别低,写一个字的时候一个数据都没接收完,不然实现不了
回复

使用道具 举报

2

主题

62

帖子

0

精华

高级会员

Rank: 4

积分
717
金钱
717
注册时间
2019-5-17
在线时间
274 小时
 楼主| 发表于 2021-8-16 16:48:31 | 显示全部楼层
阿侑kevin 发表于 2021-8-16 16:40
flash在写操作的时候是不响应中断的,要么你的传输速度特别低,写一个字的时候一个数据都没接收完,不然 ...

可以让服务器端控制发送速度吗?  网络方面也不懂,同事说和视频传输类似,不知道他们具体怎么实现的
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2021-8-17 02:00:12 | 显示全部楼层
你只有8K RAM就别去搞一次30K的传输了。
回复

使用道具 举报

2

主题

62

帖子

0

精华

高级会员

Rank: 4

积分
717
金钱
717
注册时间
2019-5-17
在线时间
274 小时
 楼主| 发表于 2021-8-17 15:43:02 | 显示全部楼层
正点原子 发表于 2021-8-17 02:00
你只有8K RAM就别去搞一次30K的传输了。

实际只能分配2K左右的缓存,:@
回复

使用道具 举报

23

主题

69

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2017-1-5
在线时间
50 小时
发表于 2021-9-7 14:46:23 | 显示全部楼层
可以发送30K的bin文件,程序里面缓存分几个队列,边收边写入flash。
回复

使用道具 举报

2

主题

62

帖子

0

精华

高级会员

Rank: 4

积分
717
金钱
717
注册时间
2019-5-17
在线时间
274 小时
 楼主| 发表于 2021-9-9 09:24:51 | 显示全部楼层
为我的心 发表于 2021-9-7 14:46
可以发送30K的bin文件,程序里面缓存分几个队列,边收边写入flash。

最多只能分配2个1K的队列,一次发送30K文件,这样可以吗?
回复

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2018-9-7
在线时间
17 小时
发表于 2021-9-9 10:33:02 | 显示全部楼层
做IAP远程升级最好加一颗Flash芯片用来接收缓存APP代码,像W25Q16这样的存储它的写入速度SPI通信可以达到50M以上,一般的通信传输基本没这个速度高。这样就不会干扰MCU处理其他事,还不会掉数据。本人亲测串口115200的波特率基本不在话下,50KBcode在5s内可以下载完。
回复

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2018-9-7
在线时间
17 小时
发表于 2021-9-9 10:40:17 | 显示全部楼层
FingerInk 发表于 2021-9-9 10:33
做IAP远程升级最好加一颗Flash芯片用来接收缓存APP代码,像W25Q16这样的存储它的写入速度SPI通信可以达到50 ...

我用过两种方式都还可以,串口接收一个byte直接缓存到Flash,这样就不需要占用RAM。但是这样容错性低,而且还很衰减Flash擦写寿命。另外一种就是用两个数组切换缓存,当一个数组缓存足够的数据后就拿过去搬到Flash,同时将接下来收到的数据切换到另外一个数组,这样轮流交替也可以实现,占用RAM大小看你程序可调整
回复

使用道具 举报

2

主题

62

帖子

0

精华

高级会员

Rank: 4

积分
717
金钱
717
注册时间
2019-5-17
在线时间
274 小时
 楼主| 发表于 2021-9-9 14:29:37 | 显示全部楼层
FingerInk 发表于 2021-9-9 10:40
我用过两种方式都还可以,串口接收一个byte直接缓存到Flash,这样就不需要占用RAM。但是这样容错性低,而 ...

我看了资料 好像使用DMA双缓冲器可以实现把,不会外挂存储了。我试试把
回复

使用道具 举报

2

主题

62

帖子

0

精华

高级会员

Rank: 4

积分
717
金钱
717
注册时间
2019-5-17
在线时间
274 小时
 楼主| 发表于 2021-9-9 16:32:43 | 显示全部楼层
wklhwkl 发表于 2021-9-9 15:18
如果不加外部存储。 分包发送和一次发30K,没什么区别。丢了或者数据错误 还是一样的。 而且你这个只有8K。 ...

你说的对,我也是这么想的,会考虑的,我想分包发和一次发完其实时间上也差不多的,不加存储,整包的还不好校验。
回复

使用道具 举报

4

主题

83

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2019-11-12
在线时间
77 小时
发表于 2021-9-10 10:42:27 | 显示全部楼层
肯定分包,网络是不稳定的
回复

使用道具 举报

16

主题

78

帖子

0

精华

高级会员

Rank: 4

积分
873
金钱
873
注册时间
2017-7-5
在线时间
130 小时
发表于 2021-9-10 17:23:58 | 显示全部楼层
如果单纯是想实现一次30k的话,可以先通过AT指令http或者ftp下载存到EC200S的UFS中,然后通过AT的文件操作系列指令,从EC200S的UFS中分包读取并写到Flash中。之前用过这种方案,最终单片机做的还是分包接收分包校验,画蛇添足的感觉,而且坑比较多。唯一的好处就是云端啥都不用做了,只需要给设备发送一个下载地址和校验值就可以
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2020-6-4
在线时间
5 小时
发表于 2021-9-10 17:51:25 | 显示全部楼层
这么做目的是什么?如果只是想单纯优化速度,需要找到真正浪费时间的点,加大ram效果不大,毕竟按包传输一次1.5K
回复

使用道具 举报

2

主题

62

帖子

0

精华

高级会员

Rank: 4

积分
717
金钱
717
注册时间
2019-5-17
在线时间
274 小时
 楼主| 发表于 2021-9-11 09:11:21 | 显示全部楼层
Jochen 发表于 2021-9-10 17:23
如果单纯是想实现一次30k的话,可以先通过AT指令http或者ftp下载存到EC200S的UFS中,然后通过AT的文件操作 ...

每包校验后写入,不对就请求重发, 我想请问下,上位机端好处理吗?bin文件我会分割后提供给他,上位机去打开文件,每包1K后面跟上校验位。上位机好实现吗?
回复

使用道具 举报

16

主题

78

帖子

0

精华

高级会员

Rank: 4

积分
873
金钱
873
注册时间
2017-7-5
在线时间
130 小时
发表于 2021-9-17 08:41:31 | 显示全部楼层
泥土很瘦 发表于 2021-9-11 09:11
每包校验后写入,不对就请求重发, 我想请问下,上位机端好处理吗?bin文件我会分割后提供给他,上位机去 ...

肯定好实现呀,普遍都是这种方式吧,不过上位机具体咋弄我也不知道,你可以参考【ymodem协议】,一种主流协议,上位机下位机应该都有现成的库吧
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-24 11:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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