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

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

  1. 【单片机笔记】基于STM32F103C8的 USB 外部flash虚拟U盘

    学习stm32已经很长时间了,但是一直没有过多的学习stm32的USB部分,因为实际工作还是用的比较少.说起USB那就有的说了,因为USB的功能很强大,这里主要重点记录一下STM32的USB部分,这个 ...

  2. HAL-STM32-USB内部Flash虚拟U盘更新程序

    1.IAP部分 添加fat32文件(修改Flash擦除代码,F401ccu6按扇区删除,F103按页删除) static bool _fat32_write_firmware(const uint8_ ...

  3. STM32使用片内FLASH制作小U盘(STM32+FLASH+MSC)

    STM32使用片内FLASH制作U盘(STM32+FLASH+MSC) 配套代码 https://download.csdn.net/download/qq_40824852/84998391 文章目 ...

  4. STM32Cube MX USB虚拟U盘+FATFS+W25Q128

    第一次写CSDN,把这两天做的一个小实验记个笔记.写的不好请见谅,有错误欢迎指正,欢迎讨论.在做之前也参考其他博主的一些文章Carry_王的博客 USB基本概念不做介绍,不懂的可以先去了解,主要说明实 ...

  5. STM32Cube MX USB双设备MSC+CDC 实现虚拟U盘+虚拟串口

    前言 在上一篇文章实现USB虚拟U盘之后,项目需要用同一个USB口同时实现MSC和CDC功能,既能进行串口通信又能读取片外FLASH虚拟U盘.对于USB通用串行总线如果要真正搞明白这个协议还是比较困难 ...

  6. Linux自学之旅-基础命令(mount挂载FAT32文件系统U盘设备文件)

    mount挂载U盘设备文件 文章目录 前言 一.前言 二.挂载使用 前言 1.上一节我们讲述了mount对光盘设备文件进行一个挂载,还没看的可点击下方链接进入观看:mount挂载光盘设备文件 2.这一 ...

  7. U盘GPIO文件系统映射-STM32利用内置FLASH做U盘

    受到linux对一切设备的控制都当成文件对待的启发 于是便有了这个将GPIO映射到U盘中的想法,这样一来便可以在任何支持U盘的设备中扩展系统的硬件功能了 我的QQ是243786753,这属于原创作品, ...

  8. 利用Windows内置工具winsat测试硬盘速度(SSD机械盘对比)

    利用Windows内置工具winsat测试硬盘速度(SSD&机械盘对比) 以下是红色内容是在命令行运行: C:\Users\Administrator>winsat disk Windo ...

  9. 【STM32CubeMx你不知道的那些事】第十章:STM32CubeMx的SPI外置FLASH(W25Q128)+文件系统(FATFS)+虚拟U盘

      这一张我们主要讲解一下STM32CUBEMX新版本 片外FLASH(W25Q128)+FATFS文件系统+虚拟U盘. 一.准备工作 这里我们要想配置SPI和文件系统 并验证需要的准备工作如下: 1 ...

最新文章

  1. 时间同步失败_跨系统历史数据同步脚本实战
  2. 外星人计算机产品介绍,你对外星人电脑了解吗?感兴趣快看看!
  3. c语言中读取内存的文件,c++从内存中读取文件内容,内容写到内存 实现文件的内存共享代码实例...
  4. jQuery利用JSONP解决AJAX跨域请求
  5. vue --- 2.0响应式补充
  6. 一建机电实务教材电子版_必背!一建《机电实务》高频考点,每日一背
  7. ab plc软件_从GuardLogix 和 CIP Safety认识安全PLC控制器
  8. CentOS7 安装git服务器
  9. 果蔬连连看java源代码_《基于Qt的连连看游戏的设计》-毕业论文.doc
  10. Python_Python处理JSON文件
  11. Nginx惊群问题分析及解决
  12. codeforces 679B
  13. MATLAB—隐函数绘图
  14. 全国计算机城市排名,这五大城市教育资源全国领先,各城市优质高校排行榜一定要收藏!...
  15. 使用jxls模板解析导出数据时添加单元格样式
  16. 文件 - 介绍 含PEM文件
  17. Spring Boot Configuration Annotation Processor not configured
  18. 路由器的网络连接模式(桥接模式和路由模式)
  19. 计算机启动 滴的一声,电脑开机后滴的一声是什么意思?
  20. 搜索框(SearchView)详解

热门文章

  1. vm虚拟机安装VMware Tools弹出‘安装程序无法自动安装
  2. 手机图片怎么压缩大小,用什么软件可以压缩
  3. 大数据白皮书材料整理
  4. Barycentric coordinate system(重心坐标系)
  5. 国产汽车半导体极限突围
  6. python requests cookie的获取和使用
  7. unity3d用动画遮罩(avatar mask)实现动画切换
  8. Excel导出报错 You can define up to 4000 styles in a .xls workbook
  9. 1x pcie 引脚_pcie1x是什么插口
  10. 三足鼎立c语言,三足鼎立_Coolbreeze_新浪博客