STM32F103VET6利用片内FLASH虚拟U盘,使用文件复制方式实现IAP

在原子论坛偶尔搜到一篇 利用STM32片内FLASH虚拟U盘,使用文件复制方式实现IAP的帖子http://www.openedv.com/forum.php?mod=viewthread&tid=39012&extra=page%3D1  按照楼主提供的代码修改了一下发现不能用,仔细阅读相关zizi资料(《5 分钟用 STM32的内置 Flash 做一个超小 U 盘》)发现了我用的是STM32F103VET6属于大容量的,片内FLASH是2K一页,所以要修改相关代码,贴出来修改的相关代码

一.修改memory.c 文件

修改Data_Buffer数组为2K,BULK_MAX_PACKET_SIZE宏定义为64,所以BULK_MAX_PACKET_SIZE*4*2*sizeof(unit32)=2KB的容量。

二.修改mass_mal.c 文件

1.  FLASH_START_ADDR   0x800300 这个是IAP的存储容量12K ,要确保IAP不会超过这个容量,同时也是虚拟U盘的内存起始地址。

2.  FLASH_SIZE   0x7D000   这个是U盘的内存大小他的计算原则是 单片机总容量512K减去IAP的空间容量,即512-12 = 500K 也就是0x7D000

3.  FLASH_PAGE_SIZE   0x800     这个是Flash页大小,STM32大容量产品Flash分页是2K 小容量是1K zhed这点要注意修改

4.  FLASH_WAIT_TIMEOUT    100000 这个就不修改

 

三.计算跳转地址

1. #define ApplicationAddress 0x0800A800   这个数据计算比较麻烦,首先要插入STM32虚拟U盘,电脑会提示格式化U盘,这个时候格式化U盘,使用FAT默认格式格式化U盘。格式化完成后会出现我们虚拟的U盘。查看U盘属性得到U盘可用存储空间如下图。我的格式化以后有470K可用,这样就可以计算跳转地址512K-470K = 42K 即0xA800  ApplicationAddress = 0x8000000+0xA800 = 0x0800A800

到此虚拟U盘IAP程序修改完成,接下来修改APP程序

 

四.修改APP的地址生成Bin文件

1.修改APP起始地址

改成刚刚计算的跳转地址

2.生成Bin文件

添加对应目录下的fromelf.exe

3.重新编译APP程序,找到生成的BIN文件把他复制到我们虚拟的U盘里面 如下图

五.断电重启或者按下复位键,IAP就会自动跳转到APP设置的起始地址执行相应的代码。至此整个升级过程结束。

六.如何进入IAP

IAP程序里面设置检测引脚状态,刚上时单片机运行IAP程序,检测引脚判断是跳转还是执行IAP初始化虚拟U盘。拉低该引脚则初始化虚拟U盘,这个时候连接到电脑USB就能看到虚拟的U盘。

七.安全问题

这种升级fa方式没有安全性,仅仅用作测试。在此t可提供一种假设,把IAP存储空间扩大后然后虚拟U盘,虚拟U盘空间相应减小(要能放下BIN文件才可以),这样就相当于IAP空间有一部分未使用,可以用来存放真正的用户程序,然后把加密(AES128等加密算法)的BIN文件复制到U盘。再次上点后IAP程序检测虚拟U盘的指定位置,如果有数据就把该数据全部复制到IAP存储的可用空间,在复制的同时实现Bin文件的解密。这样就可以间接对bin文件加密和解密,增加安全性。如下图

 

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值