中级会员
 
- 积分
- 214
- 金钱
- 214
- 注册时间
- 2016-7-19
- 在线时间
- 43 小时
|
5金钱
本帖最后由 Loyslf_璞野 于 2018-2-13 13:20 编辑
我最近在写 f105的 USB host U盘 IAP 程序 bootloader 的大体流程是
先初始化
usb外设 文件系统 然后枚举U盘
检测是否有U盘插入 如果 反复检测 1000次 大概一两秒钟的时间 还没有检测到U盘 就直接跳转到 APP程序的flash区执行App
如果检测到U盘并且U盘里面有 名字是 STM32F105VCT6.bin的升级文件 就进行升级(将bin写入flash里)
写入完成就跳转到APP程序的flash区执行App
如果没有跳转成功就会 调入到 bootloader主循环中去 执行 System_Reset();
app程序 就是 设置中断向量表地址 初始化之前的外设 并进入 app主循环 printf
但是我遇到了很诡异的问题 之前使用 usart IAP 都没出现过的问题
(过程中U盘一直插着)
第一回刚上电 可以实现 一次下载 一次跳转 这是我想要的结果
按下复位 可以实现app的更新 但是跳转不了 然后 落入到 bootloader主循环 执行 软件复位
执行bootloader再次检测到U盘 下载app成功 跳转app成功
以后每回按 复位 都会是 下载 第一次 app成功 跳转不成功 下载第二次成功 跳转成功
这是怎么回事呢???
有没有什么解决办法????
@正点原子
|
最佳答案
查看完整内容[请看2#楼]
我没有找到具体问题出在哪里,可能是刷写flash的程序有问题,因为我选择每回下载程序时擦除片内所有flash以后,再运行iap升级时就可以跳转了,所以我把程序改成,检测到升级文件以后,运行flash擦除程序把app程序区域的flash都擦掉,然后再写入新的app,这样就可以实现每回升级完成都可以正常跳转了。
|