硬汉嵌入式论坛

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

[有问必答] STM32F103内部Flash模拟U盘 IAP升级资源求助

  [复制链接]

2

主题

20

回帖

26

积分

新手上路

积分
26
发表于 2018-1-16 21:09:37 | 显示全部楼层 |阅读模式
本帖最后由 a_lanmao 于 2018-3-6 14:36 编辑

如题,小弟最近在学习STM32的IAP升级,如果使用内部flash模拟U盘,然后将Bin文件复制到模拟的U盘里面,则可以方便的实现固件升级,产品的维护。现在我已经实现将内部flash模拟成U盘,并在电脑端成功识别,接下来升级的问题,遇到了些麻烦,对于Bin文件,不知道该怎么读取操作,写入flash中
在百度搜索了一下,发现某论坛中已有高人做过类似的尝试,https://www.amobbs.com/thread-5638746-3-1.html
小弟没有该论坛的账号,所以无法下载,希望有该论坛账号的坛友们,给些帮助,帮忙下载一下该资源,不胜感激!


资源下载

资源下载
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106679
QQ
发表于 2018-1-17 00:27:56 | 显示全部楼层
帮顶下,这个不能忙你去弄了,否则我自己的账号会被封锁,非常抱歉楼主
回复

使用道具 举报

2

主题

20

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2018-1-17 12:16:05 | 显示全部楼层
没事的,谢谢硬汉哥帮顶!
回复

使用道具 举报

6

主题

88

回帖

106

积分

初级会员

积分
106
发表于 2018-1-27 11:59:06 | 显示全部楼层
a_lanmao 发表于 2018-1-17 12:16
没事的,谢谢硬汉哥帮顶!

这个简单,我有现成的STM32F103C8的,IAP  上下位机源码,包括AES 128加密
回复

使用道具 举报

2

主题

20

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2018-1-31 09:36:15 | 显示全部楼层
mygod 发表于 2018-1-27 11:59
这个简单,我有现成的STM32F103C8的,IAP  上下位机源码,包括AES 128加密

不好意思,这几天在忙其他的了,刚看到回复,AES128加密,这个厉害了,如果可以的话,这位仁兄能否共享一下相关的资料,共同学习一下。
回复

使用道具 举报

9

主题

160

回帖

187

积分

初级会员

积分
187
发表于 2018-2-4 14:04:28 | 显示全部楼层
直接搜索名字,其他论坛也可以下的
回复

使用道具 举报

9

主题

160

回帖

187

积分

初级会员

积分
187
发表于 2018-2-4 14:25:53 | 显示全部楼层
抽了点时间看下,https://github.com/cedar-renjun/usb_msd_bootloader,这就是阿莫论坛上的那一份代码,应该是原版
回复

使用道具 举报

2

主题

20

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2018-2-4 21:56:13 | 显示全部楼层
avita 发表于 2018-2-4 14:25
抽了点时间看下,https://github.com/cedar-renjun/usb_msd_bootloader,这就是阿莫论坛上的那一份代码,应 ...

谢谢这位仁兄分享,刚才试了下代码,没有跑起来,我的电脑是WIN10系统,总是提示U盘连接,然后断开再连接。。。,明天仔细阅读学习一下源码,尝试解决这个问题。
回复

使用道具 举报

15

主题

38

回帖

83

积分

初级会员

积分
83
发表于 2018-3-6 09:07:55 | 显示全部楼层
.bin文件不是可以直接用串口发?串口能发不就可以升级了?
回复

使用道具 举报

2

主题

20

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2018-3-6 14:35:43 | 显示全部楼层
刘志伟 发表于 2018-3-6 09:07
.bin文件不是可以直接用串口发?串口能发不就可以升级了?

是的,串口进行IAP升级就简单多了,官方也有例程的。但考虑到APP升级的便捷性,使用内部Flash模拟U盘的方式进行升级,不需要使用上位机,直接把固件拖拽到U盘中即可升级,更加“傻瓜”方便。另外,掌握多种IAP升级方式,对以后的工作开展也有不少的帮助。
回复

使用道具 举报

15

主题

38

回帖

83

积分

初级会员

积分
83
发表于 2018-3-7 08:28:25 | 显示全部楼层
a_lanmao 发表于 2018-3-6 14:35
是的,串口进行IAP升级就简单多了,官方也有例程的。但考虑到APP升级的便捷性,使用内部Flash模拟U盘的方 ...

不是,我没懂你这个内部FLASH模拟U盘是什么意思?内部FLASH不是指单片机内部的ROM?
回复

使用道具 举报

2

主题

134

回帖

140

积分

初级会员

积分
140
发表于 2018-3-7 10:30:53 | 显示全部楼层
a_lanmao 发表于 2018-3-6 14:35
是的,串口进行IAP升级就简单多了,官方也有例程的。但考虑到APP升级的便捷性,使用内部Flash模拟U盘的方 ...

这样也不是不可以做  但是你底层要规定好写入的地址  文件系统上层操作是不区分地址的   另外你必须要判断拖入的是不是你要升级的固件  不能拖个垃圾文件你就升级
回复

使用道具 举报

2

主题

134

回帖

140

积分

初级会员

积分
140
发表于 2018-3-7 10:31:59 | 显示全部楼层
a_lanmao 发表于 2018-3-6 14:35
是的,串口进行IAP升级就简单多了,官方也有例程的。但考虑到APP升级的便捷性,使用内部Flash模拟U盘的方 ...

另外你不和不采用usb dfu升级  也挺方便的
回复

使用道具 举报

2

主题

20

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2018-3-7 13:51:55 | 显示全部楼层
hanzixiangel 发表于 2018-3-7 10:30
这样也不是不可以做  但是你底层要规定好写入的地址  文件系统上层操作是不区分地址的   另外你必须要判 ...

文件系统的引导区首地址定义好之后,上层应用根据引导区以及根目录区的首地址访问Flash文件系统区域中的数据是没有问题的。另外,升级前肯定会对要升级的固件进行名称和后缀名的判断,这个是最基本的。
回复

使用道具 举报

2

主题

134

回帖

140

积分

初级会员

积分
140
发表于 2018-3-7 13:58:42 | 显示全部楼层
a_lanmao 发表于 2018-3-7 13:51
文件系统的引导区首地址定义好之后,上层应用根据引导区以及根目录区的首地址访问Flash文件系统区域中的 ...

那就没有问题  另外建议校验一下固件烧写地址和堆栈起始地址  这样靠谱些   比单纯的校验名称和后缀要靠谱些  我之前做的还要校验md5
回复

使用道具 举报

2

主题

20

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2018-3-7 14:05:31 | 显示全部楼层
hanzixiangel 发表于 2018-3-7 13:58
那就没有问题  另外建议校验一下固件烧写地址和堆栈起始地址  这样靠谱些   比单纯的校验名称和后缀要靠 ...

好的,谢谢你的建议,校验确实很有必要。
回复

使用道具 举报

0

主题

2

回帖

6

积分

新手上路

积分
6
发表于 2018-6-6 00:06:01 | 显示全部楼层
额,我有实践过产品
回复

使用道具 举报

0

主题

2

回帖

6

积分

新手上路

积分
6
发表于 2018-6-6 00:10:00 | 显示全部楼层
QQ251480520
回复

使用道具 举报

6

主题

130

回帖

148

积分

初级会员

积分
148
发表于 2018-6-6 17:01:52 | 显示全部楼层
内部模拟U盘的话太消耗内存了吧
回复

使用道具 举报

95

主题

297

回帖

582

积分

金牌会员

123

积分
582
发表于 2018-9-6 15:20:55 | 显示全部楼层
本帖最后由 ssssssss 于 2018-9-6 15:23 编辑

我下载了


有没有想过,像使用U盘一样升级STM32固件,非常简单,非常方便

1:        插入电脑USB接口
2:        把升级固件拖到设备盘符
3:        升级完成



抛弃繁琐的USB DFU,抛弃落后的串口升级,让我们来谈谈U盘升级STM32

1. 为什么设计这个BOOT LOADER

在电子产品开发过程中,为了满足市场需要,经常是先开发出一个简单可用的版本,然后逐步迭代升级,修复bug,并增强系统功能
一个稳定,简单,安全的升级方式,就变得非常重要
对于嵌入式系统来说,常见的升级方式为
串口升级(私有协议或者X-Modem)
USB升级(DFU)
U盘升级(OTG)
网络升级
无线升级(OTA)
从技术来说,这几种升级方式大同小异,原理类似:都是一个Loader代理接收数据通道的数据,然后解密,烧录到FLASH中;但用户体验完全不同,拿串口升级来说,首先用户需要一个串口软件,然后对于没有硬件串口的PC来说,就需要一个USB转串口设备,对于不同PC平台,串口软件就不一样,这需要学习成本,过程繁琐;所以在一些需要用户自行升级远程设备的情况下,即便是通过电话指导,80%的用户仍然不知道怎么升级,导致失败

USB的DFU升级,也是类似的问题,它设计的初衷就是面向专业用户的,而不是小白!所以需要安装DFU软件,按照手册来一步步升级

OTA升级和网络升级,体验好些,可用做到无感升级,但不适合所有场景

而U盘升级,用户学习成本最低,U盘大家都知道,然后拷贝一个Bin文件进去,插入设备,重启设备,就完成升级了,非常简单。类似的变种,比如手机升级,是最先进的,直接将手机模拟成U盘,然后用户拷贝数据到手机,重启就好了,非常简单
在嵌入式系统中,还没这么方便的升级手段,虽然ARM的Mbed有一种类似的固件更新功能,但它是专门为调试器设计的,不能内嵌到用户MCU中
所以,我将手机升级的方案引入到嵌入式系统中,从而为大家提供一个实现稳定,安全,零学习成本的升级方案
经过一段时间的学习研究,有了这个USB MSD Bootloader

2. 功能特点

只占用15K FLASH空间
简单易用,直接拖拽文件进行固件升级,无需任何专业知识
采用USB大容量设备类,不用安装任何驱动
支持各种系统(Windows/Linux/Mac/Android)
不用开发任何上位机,提高产品效率
支持各种加密算法(AES256等),轻松安全升级
自动识别Bin,Hex,自定义加密固件(后缀为sec)文件
支持MD5文件校验机制,保证固件升级的完整性
显示设备升级状态信息
支持长文件名升级
多种措施保证系统健壮性,保证Bootloader不会被误擦除,保证APP合法性
支持用户自定义加密算法和完整校验算法,极致安全

3. 系统原理

系统开机上电后,Bootloader接管系统,初始化USB硬件,等待USB连接
Bootloader在启动后1秒内,检测USB是否连接PC:如果连接PC,则进入固件升级模式,执行第3步;超时则跳转第8步,尝试执行用户APP
Bootloader模拟成MSD设备,构建FAT16虚拟文件系统,U盘名为”Bootloader”,容量为100M,但具体实际可用空间,根据用户MCU来确定,建议不要复制除APP之外的无关文件
当用户复制文件到U盘时,Bootloader会判断文件后缀和判断文件size,如果size大于实际的MCU可用FLASH或者文件后缀不合法,则进入错误状态,更新状态文件,重新枚举USB
文件后缀和size通过检测后,Bootloader会截获PC发送文件数据流,并写入MCU 对应的Flash中
如果写入过程中出错,则终止操作,擦除APP内容,进入错误状态,更新状态文件,重新枚举USB
成功写入后,Bootloader更新状态文件,重新枚举USB,显示升级完成;但不会运行APP,只有拔掉USB后,再次重启,才会进入第8步,尝试运行APP
Bootloader检查APP固件的栈和入口函数合法性,只有通过检测后,才开始执行APP。检测判断条件是栈指针必须在RAM地址空间内,入口函数地址必须处于THUMB模式,并LSB为1
停止USB设备,关掉所有的中断,执行APP,APP开始接管系统


4. 支持芯片
STM32F101/3/5/7
重点来了,点击下面链接,下载固件

usb_msd_bootloader-master.zip

1.38 MB, 下载次数: 371

回复

使用道具 举报

29

主题

514

回帖

606

积分

金牌会员

积分
606
QQ
发表于 2018-9-7 10:39:27 | 显示全部楼层
105/107支持OTG功能,直接连接小U盘升级。
Releasing your creativity
回复

使用道具 举报

2

主题

20

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2018-9-7 14:36:48 | 显示全部楼层

谢谢分享!
回复

使用道具 举报

2

主题

20

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2018-9-7 14:37:05 | 显示全部楼层

谢谢分享!下载下来,学习一下
回复

使用道具 举报

2

主题

20

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2018-9-7 14:38:36 | 显示全部楼层
廷润 发表于 2018-9-7 10:39
105/107支持OTG功能,直接连接小U盘升级。

105/107的OTG不太了解,回头学习一下
回复

使用道具 举报

3

主题

73

回帖

82

积分

初级会员

积分
82
发表于 2018-9-11 14:13:41 | 显示全部楼层
掉的一批,但是好像用途不大,网上有开源的IAP支持无线OTA的。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 12:25 , Processed in 0.362422 second(s), 34 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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