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文件加密和解密,增加安全性。如下图
STM32F103VET6利用片内FLASH虚拟U盘,使用文件复制方式实现IAP相关推荐
- 【单片机笔记】基于STM32F103C8的 USB 外部flash虚拟U盘
学习stm32已经很长时间了,但是一直没有过多的学习stm32的USB部分,因为实际工作还是用的比较少.说起USB那就有的说了,因为USB的功能很强大,这里主要重点记录一下STM32的USB部分,这个 ...
- HAL-STM32-USB内部Flash虚拟U盘更新程序
1.IAP部分 添加fat32文件(修改Flash擦除代码,F401ccu6按扇区删除,F103按页删除) static bool _fat32_write_firmware(const uint8_ ...
- STM32使用片内FLASH制作小U盘(STM32+FLASH+MSC)
STM32使用片内FLASH制作U盘(STM32+FLASH+MSC) 配套代码 https://download.csdn.net/download/qq_40824852/84998391 文章目 ...
- STM32Cube MX USB虚拟U盘+FATFS+W25Q128
第一次写CSDN,把这两天做的一个小实验记个笔记.写的不好请见谅,有错误欢迎指正,欢迎讨论.在做之前也参考其他博主的一些文章Carry_王的博客 USB基本概念不做介绍,不懂的可以先去了解,主要说明实 ...
- STM32Cube MX USB双设备MSC+CDC 实现虚拟U盘+虚拟串口
前言 在上一篇文章实现USB虚拟U盘之后,项目需要用同一个USB口同时实现MSC和CDC功能,既能进行串口通信又能读取片外FLASH虚拟U盘.对于USB通用串行总线如果要真正搞明白这个协议还是比较困难 ...
- Linux自学之旅-基础命令(mount挂载FAT32文件系统U盘设备文件)
mount挂载U盘设备文件 文章目录 前言 一.前言 二.挂载使用 前言 1.上一节我们讲述了mount对光盘设备文件进行一个挂载,还没看的可点击下方链接进入观看:mount挂载光盘设备文件 2.这一 ...
- U盘GPIO文件系统映射-STM32利用内置FLASH做U盘
受到linux对一切设备的控制都当成文件对待的启发 于是便有了这个将GPIO映射到U盘中的想法,这样一来便可以在任何支持U盘的设备中扩展系统的硬件功能了 我的QQ是243786753,这属于原创作品, ...
- 利用Windows内置工具winsat测试硬盘速度(SSD机械盘对比)
利用Windows内置工具winsat测试硬盘速度(SSD&机械盘对比) 以下是红色内容是在命令行运行: C:\Users\Administrator>winsat disk Windo ...
- 【STM32CubeMx你不知道的那些事】第十章:STM32CubeMx的SPI外置FLASH(W25Q128)+文件系统(FATFS)+虚拟U盘
这一张我们主要讲解一下STM32CUBEMX新版本 片外FLASH(W25Q128)+FATFS文件系统+虚拟U盘. 一.准备工作 这里我们要想配置SPI和文件系统 并验证需要的准备工作如下: 1 ...
最新文章
- 时间同步失败_跨系统历史数据同步脚本实战
- 外星人计算机产品介绍,你对外星人电脑了解吗?感兴趣快看看!
- c语言中读取内存的文件,c++从内存中读取文件内容,内容写到内存 实现文件的内存共享代码实例...
- jQuery利用JSONP解决AJAX跨域请求
- vue --- 2.0响应式补充
- 一建机电实务教材电子版_必背!一建《机电实务》高频考点,每日一背
- ab plc软件_从GuardLogix 和 CIP Safety认识安全PLC控制器
- CentOS7 安装git服务器
- 果蔬连连看java源代码_《基于Qt的连连看游戏的设计》-毕业论文.doc
- Python_Python处理JSON文件
- Nginx惊群问题分析及解决
- codeforces 679B
- MATLAB—隐函数绘图
- 全国计算机城市排名,这五大城市教育资源全国领先,各城市优质高校排行榜一定要收藏!...
- 使用jxls模板解析导出数据时添加单元格样式
- 文件 - 介绍 含PEM文件
- Spring Boot Configuration Annotation Processor not configured
- 路由器的网络连接模式(桥接模式和路由模式)
- 计算机启动 滴的一声,电脑开机后滴的一声是什么意思?
- 搜索框(SearchView)详解
热门文章
- vm虚拟机安装VMware Tools弹出‘安装程序无法自动安装
- 手机图片怎么压缩大小,用什么软件可以压缩
- 大数据白皮书材料整理
- Barycentric coordinate system(重心坐标系)
- 国产汽车半导体极限突围
- python requests cookie的获取和使用
- unity3d用动画遮罩(avatar mask)实现动画切换
- Excel导出报错 You can define up to 4000 styles in a .xls workbook
- 1x pcie 引脚_pcie1x是什么插口
- 三足鼎立c语言,三足鼎立_Coolbreeze_新浪博客