硬汉嵌入式论坛

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

[技术讨论] bootloader更新速度问题

[复制链接]

22

主题

67

回帖

133

积分

初级会员

积分
133
发表于 2023-6-12 15:06:59 | 显示全部楼层 |阅读模式
楼主最近开发项目遇到一个问题关于bootloaoder更新速度很慢的问题,芯片G0 flash32kb ram 8kb其中bootloader 6kb, app 20kb ,更新以及其他标志4kb。
目前项目运行的IAP更新协议是串口,速度9600,接受数据是在串口中断接收的,更新固件大小0-22kb,采取的发送方式是一帧一帧发,发一帧,falsh写一帧(因为ram比较小,我一次发送的就是56个二进制数据 然后flash写完这56个数据发一个应答帧给上位机,让上位机继续发送数据,然后flash继续写 这样造成的问题就会更新很慢) 是否有提高更新速率的办法呢。

回复

使用道具 举报

22

主题

67

回帖

133

积分

初级会员

积分
133
 楼主| 发表于 2023-6-12 15:10:56 | 显示全部楼层
很慢的原因是因为我发一帧数据,需要flash写完然后通过串口发送下一帧的应答,我的上位机才能继续发送(一帧就需要等待串口接收的时间+flash写的时间),有没有办法将flash写和接受串口数据并行起来呢?  我看手册说flash写的时候不能被其他中断打断,也就是说,flash写的时间,是不能接收数据和发送应答的!!!!
回复

使用道具 举报

31

主题

76

回帖

169

积分

初级会员

积分
169
发表于 2023-6-12 16:47:35 | 显示全部楼层
一帧数据为啥不搞大点,比如1k
回复

使用道具 举报

22

主题

67

回帖

133

积分

初级会员

积分
133
 楼主| 发表于 2023-6-12 17:10:32 | 显示全部楼层
ssimple 发表于 2023-6-12 16:47
一帧数据为啥不搞大点,比如1k

想着小点的ram
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106959
QQ
发表于 2023-6-12 17:22:31 | 显示全部楼层
1、提升波特率,9600太慢了。
2、提前先擦除好。
3、你用的G0型号是否支持双BANK,支持双BANK的G0,可以一个BANK执行Flash程序的时候,对另一个bank执行擦写操作。
如果不是双BANK,执行Flash擦写期间,CPU是将无法正常执行Flash代码程序。这种情况下,可以搞个骚操作,boot程序跳转到RAM运行,然后就可以操作Flash而不影响串口运行了。
回复

使用道具 举报

22

主题

67

回帖

133

积分

初级会员

积分
133
 楼主| 发表于 2023-6-13 08:44:02 | 显示全部楼层
1.这个双bank是两个互不影响的程序域吗? 而且好像只有高端的才有。
2.有个疑问:为啥放在ram中运行flash的代码,中断就可以不被影响了,不是只是将代码放到ram中是让代码的运行速度加快吗。 正常情况是CPU去读flash的代码,如果放在ram中只是RAM->cpu,不是只是加快了速度了吗。小弟愚钝,恳请大佬赐教
无标题.png
回复

使用道具 举报

22

主题

67

回帖

133

积分

初级会员

积分
133
 楼主| 发表于 2023-6-13 09:05:52 | 显示全部楼层
eric2013 发表于 2023-6-12 17:22
1、提升波特率,9600太慢了。
2、提前先擦除好。
3、你用的G0型号是否支持双BANK,支持双BANK的G0,可以 ...

1.这个双bank是两个互不影响的程序域吗? 而且好像只有高端的才有(BANK图片见下图)。
2.有个疑问:为啥放在ram中运行flash的代码,中断就可以不被影响了,不是只是将代码放到ram中是让代码的运行速度加快吗。 正常情况是CPU去读flash的代码,如果放在ram中只是RAM->cpu,不是只是加快了速度了吗。小弟愚钝,恳请大佬赐教
回复

使用道具 举报

3

主题

65

回帖

74

积分

初级会员

积分
74
发表于 2023-6-13 09:07:11 | 显示全部楼层
提高波特率
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106959
QQ
发表于 2023-6-13 10:00:51 | 显示全部楼层
2360985396 发表于 2023-6-13 09:05
1.这个双bank是两个互不影响的程序域吗? 而且好像只有高端的才有(BANK图片见下图)。
2.有个疑问:为啥放 ...

1、对,这是双BANK的一个优势,独立的,互不影响。
2、如果你的芯片是单bank的,那么你的这个Flash擦写期间,CPU什么都干不了,只能干等着,自然串口也就无法正常执行。而你把程序加载到RAM执行,那么操作Flash擦写期间,串口程序也可以和Flash擦写同时执行了。
回复

使用道具 举报

22

主题

67

回帖

133

积分

初级会员

积分
133
 楼主| 发表于 2023-6-13 10:19:18 | 显示全部楼层
eric2013 发表于 2023-6-13 10:00
1、对,这是双BANK的一个优势,独立的,互不影响。
2、如果你的芯片是单bank的,那么你的这个Flash擦写 ...

大佬 ,那也就也就可以理解为 ram运行程序 和flash 运行程序是两个线程的程序吗吗?
回复

使用道具 举报

22

主题

67

回帖

133

积分

初级会员

积分
133
 楼主| 发表于 2023-6-13 10:22:47 | 显示全部楼层

一般在工控领域,提高波特率是不允许的哈
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106959
QQ
发表于 2023-6-13 10:25:57 | 显示全部楼层
2360985396 发表于 2023-6-13 10:19
大佬 ,那也就也就可以理解为 ram运行程序 和flash 运行程序是两个线程的程序吗吗?

不算是两个线程,本质是分散加载设置。

比如此贴的玩法就是这种。
实验11:程序在ITCM执行,中断向量表和所有变量全部放在DTCM,方法很简单
https://www.armbbs.cn/forum.php?mod=viewthread&tid=86207

复杂点的此贴:
https://www.armbbs.cn/forum.php?mod=viewthread&tid=101011

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-11 21:01 , Processed in 0.319256 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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