单片机
返回首页

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

2019-06-01 来源:eefocus

在原子论坛偶尔搜到一篇 利用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文件加密和解密,增加安全性。如下图

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 用NE555制作定时器

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 带有短路保护系统的5V直流稳压电源电路图

  • 如何构建一个触摸传感器电路

  • 如何调制IC555振荡器

  • 基于ICL296的大电流开关稳压器电源电路

    相关电子头条文章