你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

串口升级程序问题

[复制链接]
斯文人 提问时间:2019-1-26 14:34 /
我现在遇到一个问题就是串口不停的接收数据,然后写进内部flash,用这样的一个过程实现一个简单的bootloader,但是总是有问题,写进flash的数据都出来总是有很多不对的地方,大神有什么好的解决办法没有?我的flash空间只有64K,别让我全部缓存在一次写flash,这种方法就不用说了,也别说让我外扩flash。
收藏 评论10 发布时间:2019-1-26 14:34

举报

10个回答
toofree 回答时间:2019-1-27 00:21:56
这个问题得分步排查吧。
串口收发就不怀疑了;
那么flash到底是写出问题,还是读出的问题,总得验证吧?
还是说串口发送和flash写操作没协调好呢?
串口升级程序,这些都是得定好协议的。串口往下发送时都带着协议头、尾、长度、校验等信息的,一般是串口往下传一批数据,往flash写一批数据;然后下位机告诉上位机,已经写结束了,上位机才再次往下传下一批数据的。

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

aiherong 回答时间:2019-1-27 01:50:34
数据可以不停地收,FLASH可不能不断地写,否则大大缩短使用寿命,即使你读对了做成产品,售后也是大问题

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

yklstudent-1794 回答时间:2019-1-27 09:04:04
不停的收,这串口通讯机制不可靠啊
至少确认一包成功了才能进行下一包的发送啊

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

回答时间:2019-1-27 09:56:52
需要做数据处理的,验证包数据内容,串口很容易丢失数据的。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

zhao.zhao 回答时间:2019-1-27 13:38:02
    方案:
1、设计一个BOOT程序,开机30秒(实际等待实间可调)内没有串口升级要求,跳转到应用程序中运行正常程序,串口有升级要求,则进入升级进程;
2、升级程序可以根据MCU的FLASH一个页面多少字节,设计每个串口接收的数据帧相同字节数,再加个帧头帧尾校验等,当串口接收完成一帧数据后,解出实际需要的帧数据字节,这些数据存在SRAM内,一般最多4K字节/页面,然后将SRAM内的数据一次性写入FLASH对应的页面内;完成后对该串口发出应答,告诉上位机,写入完成,准备下一帧数据的传输。以此类推,可以完成串口升级。
3、升级完成后,重启,30秒后,进入升级过的程序。

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

yklstudent-1794 回答时间:2019-1-27 16:17:11
zhao.zhao 发表于 2019-1-27 13:38
方案:
1、设计一个BOOT程序,开机30秒(实际等待实间可调)内没有串口升级要求,跳转到应用程序中运行 ...

为什么要搞30秒开机等待升级,有需要就直接进BOOT,无需要就直接进APP啊
Johnson Cao 回答时间:2019-1-27 22:05:00
你看看XModem 协议,这个用在串口上,非常方便.也可靠,协议实现也不难

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

zhao.zhao 回答时间:2019-1-28 11:49:47
yklstudent-1794 发表于 2019-1-27 16:17
为什么要搞30秒开机等待升级,有需要就直接进BOOT,无需要就直接进APP啊

1、一般BOOT程序比较小,FlASH中占的空间是有限的,且基本不变,但是应用程序大小可能变化比较大,所以BOOT程序应该放在前面,应用程序放在后面。
2、应用程序中该串口只能用于升级用,不做别的应用时是可以的,如果还有别的应用,又要升级用,那处理就相对比较麻烦了。
斯文人 回答时间:2019-2-13 15:51:26
zhao.zhao 发表于 2019-1-28 11:49
1、一般BOOT程序比较小,FlASH中占的空间是有限的,且基本不变,但是应用程序大小可能变化比较大,所以BO ...

这样有可能出现一个问题就是当我在接收到一页数据,然后开始写falsh时候,此时如果上位机还在通过串口发升级数据给我,因为正在操作写falsh,所以串口中断无法产生,就会导致丢数问题。除非是写falsh期间告诉上位机,别发数据了,等我写完了你在发,难道只能这样异步进行吗,不可以边接收数据,边写falsh吗?(以上所讲的flash都是内部falsh)
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版