搜索
查看: 2114|回复: 12

[讨论] 好久不来论坛了,过来怀念一下

[复制链接]

该用户从未签到

39

主题

394

帖子

6

蝴蝶豆

金牌会员

最后登录
2021-9-15
发表于 2021-1-19 15:03:46 | 显示全部楼层 |阅读模式
最近想学习一下stm32通过U盘和SD卡来升级程序,也就大家所说的IAP或者叫BootLoader,有没有好的资源推荐一下啊,家人们
回复

使用道具 举报

该用户从未签到

20

主题

621

帖子

152

蝴蝶豆

论坛元老

最后登录
2023-11-13
发表于 2021-1-19 22:28:06 | 显示全部楼层
hhhhhhhaa 发表于 2021-1-19 21:48
感谢大神的思路,确实让我了解的很多,以前一直以为只要是有hex文件或者bin文件直接烧写就行了,没想考虑 ...

首先,你的升级U盘是不是PC写出来的,PC一般最常见的也是FAT32或者FAT16/FAT12格式化的了。
那么你的Bootloader一般不需要完整的文件管理系统,只需要能够读出文件即可。 找一个可以用的参考例程,拿过来用就是了。

如果你的RAM/SDRAM足够大,当然可以一次全部bin/hex读出到RAM,然后再慢慢写入Flash。
合理的做法是,每次读出一个Flash的Sector大小,每种IC可能都不同(1KB~64KB?)。
回复 支持 2 反对 0

使用道具 举报

该用户从未签到

20

主题

621

帖子

152

蝴蝶豆

论坛元老

最后登录
2023-11-13
发表于 2021-1-19 21:32:28 | 显示全部楼层
这个操作的复杂程度,与你的要求有关。
最简单的情况是,无论什么bin/hex文件,都能够写入,不怕变砖。

复杂一点的,要进行版本控制,不是新的版本,不烧。
再复杂一点的,要进行完整性确认,被篡改了的代码,不烧。
再复杂一点的,要加密和解密,发现任何不对的地方,不烧。
再复杂一点的,要保存一个Bootloader备份,万一变砖,至少可以强制恢复重启Bootloader。
再复杂一点的,要保存一个当前完整程序版本的备份,万一升级失败或者新版本死机,马上自我恢复备份版本。
等等,看需求。
回复 支持 1 反对 0

使用道具 举报

该用户从未签到

133

主题

4688

帖子

239

蝴蝶豆

版主

最后登录
2021-4-10
发表于 2021-1-19 17:13:39 | 显示全部楼层
和IAP类似的,一个是通过网络或者串口将数据下载到指定位置,一个是将SD或者U盘中的数据导入到FLASH中,都是通过BootLoader代码进行处理,要注意升级后,删除或者修改bin文件,避免重复升级。
回复 支持 反对

使用道具 举报

该用户从未签到

39

主题

394

帖子

6

蝴蝶豆

金牌会员

最后登录
2021-9-15
 楼主| 发表于 2021-1-19 20:37:27 | 显示全部楼层
安 发表于 2021-1-19 17:13
和IAP类似的,一个是通过网络或者串口将数据下载到指定位置,一个是将SD或者U盘中的数据导入到FLASH中,都 ...

大神好啊,说一下我的理解吧,我看了几个例程,
有的是说上电后进入上电复位中断,在这里进行程序的跳转,判断标志位,这样就可以知道是进入IAP还是APP ,
进入IAP后,关闭所有的中断,识别U盘或SD卡的文件是否是BIN或者HEX文件,这样的话就需要支持文件操作系统比如用FATFS文件操作系统,识别有了升级用的文件后,紧接着判断文件的大小是否超过了flash的范围,如果超过了就不升级,如果没有超过就将HEX文件或者BIN文件写入到FLASH中,写完后判断是否写完,将标志位清零,然后再打开所有的中断,将PC指针赋值给APP上main的地址

这上面有几个问题没有搞清楚,第一,比如用U盘或者SD卡的话怎么将BIN或者HEX文件的内容复制到FLASH中?
                                             第二,关于IAP的跳转是怎么跳的呢?需要修改PC指针的位置还是?
回复 支持 反对

使用道具 举报

该用户从未签到

39

主题

394

帖子

6

蝴蝶豆

金牌会员

最后登录
2021-9-15
 楼主| 发表于 2021-1-19 21:48:01 | 显示全部楼层
radio2radio 发表于 2021-1-19 21:32
这个操作的复杂程度,与你的要求有关。
最简单的情况是,无论什么bin/hex文件,都能够写入,不怕变砖。

感谢大神的思路,确实让我了解的很多,以前一直以为只要是有hex文件或者bin文件直接烧写就行了,没想考虑到您说的这些
言归正传,如果要是从U盘烧写到flash的话是不是需要有文件管理系统呢,具体操作的话是不是通过文件管理系统,从U盘里拷贝hex或者bin文件到flash里呢?
回复 支持 反对

使用道具 举报

该用户从未签到

133

主题

4688

帖子

239

蝴蝶豆

版主

最后登录
2021-4-10
发表于 2021-1-20 10:07:39 | 显示全部楼层
一般是先运行BootLoader程序,判断是否有需要升级的问题。没有升级文件,跳转到APP程序。
从U盘中读取到bin文件后,按照APP的起始地址开始写入到FLASH。
回复 支持 反对

使用道具 举报

该用户从未签到

39

主题

394

帖子

6

蝴蝶豆

金牌会员

最后登录
2021-9-15
 楼主| 发表于 2021-1-20 15:09:26 | 显示全部楼层
安 发表于 2021-1-20 10:07
一般是先运行BootLoader程序,判断是否有需要升级的问题。没有升级文件,跳转到APP程序。
从U盘中读取到bin ...

我看好多思路也是这样的,现在我没搞懂的是怎么从U盘读取文件,正在学习关于U盘的知识,读出来以后就可以写入了,写入FLASH这个事儿我会做,因为以前用过FLASH当存储用
回复 支持 反对

使用道具 举报

该用户从未签到

39

主题

394

帖子

6

蝴蝶豆

金牌会员

最后登录
2021-9-15
 楼主| 发表于 2021-1-20 15:12:13 | 显示全部楼层
radio2radio 发表于 2021-1-19 22:28
首先,你的升级U盘是不是PC写出来的,PC一般最常见的也是FAT32或者FAT16/FAT12格式化的了。
那么你的Boot ...

嗯,感谢大佬的指导,U盘中的文件是keil编译后的HEX文件或者BIN文件,U盘的话一般格式化成fat32格式的,例程的话暂时还没找到,感觉网上这方面的资料挺少的,或者是我找的方式不对,大佬如果有例程的话方便发一个让小弟学习一下吗
回复 支持 反对

使用道具 举报

该用户从未签到

20

主题

621

帖子

152

蝴蝶豆

论坛元老

最后登录
2023-11-13
发表于 2021-1-20 15:50:40 | 显示全部楼层
hhhhhhhaa 发表于 2021-1-20 15:12
嗯,感谢大佬的指导,U盘中的文件是keil编译后的HEX文件或者BIN文件,U盘的话一般格式化成fat32格式的, ...

不好意思,我详细没有研究过这方面,不能提供例程。 看看其他网友能不能提供参考例程。

不知道你的MCU型号。 如果一定要读U盘,就要有USB主机的硬件,也就是能实现USB的HOST模式。
不然,就只能用SPI来读TF卡的方法,这个常见。 GitHub大把。

随便参考一个Bootloader例程,可以解决写Flash和跳转APP的问题。我搞过一个YAB可以参考
再找一套读U盘/TF卡的,数据就有了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-30 00:25 , Processed in 1.189477 second(s), 39 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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