求助:stm32 用内部flash虚拟u盘进行IAP

2019-12-11 18:39发布

求助:stm32 用内部flash虚拟u盘进行IAP

现在我虚拟出来了(stm32f103c8t6) iap程序8k 虚拟出来是52k,格式化后32k(1024字节)
转跳程序.png (16.48 KB, 下载次数: 0) 下载附件 转跳程序 2014-8-21 21:14 上传
iap_load_app(0x08008000);        无法转跳,直接进入IAP
iap_load_app(0x08008800); 死机



我直接将app程序强制写进0x08008000,iap转跳成功(IAP设置转跳地址为08008000)..

求助..为啥直接放bin不能转跳.bin不是直接可以读取的文件?我找到bin真地址转跳不就行了?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
95条回答
FlandreUNX
1楼-- · 2019-12-13 12:07
本帖最后由 FlandreUNX 于 2014-8-23 00:07 编辑

结束此帖子
自己解决了问题..
发现问题
1.MDK 编译BIN时路径打错.编译了未设置成转跳的APP 导致 中断向量表PC无法指向进图hault
2.模拟u盘程序的USB库过老 不兼容3.6的标准库 更新到4.0的USB库后根据官方例程修改实现.另外官方例程中usb_desc.c+desc.h要用自己的desc.c替换.不然下载后USB无法枚举 并且会将SWD卡死.只能ISP下载
3.转跳到APP前务必将总中断关闭.不然很容易进入HAULT
我上传一下我的IAP分享经验.看到很少人讨论.很心酸

IAP使用方法
本人是F103C8T6
判断按钮是否按下(上拉输入),按下则初始化USB
然后格式化U盘
将随意的修改好地址的APP编译成BIN放进U盘 接着重启
然后就完成了升级

希望以后能有更多人跟帖.讨论更多好玩而且安全的IAP Flash-Udisk-IAP.rar (513.75 KB, 下载次数: 565) 2014-8-23 00:07 上传 点击文件名下载附件



richards
2楼-- · 2019-12-13 17:20
FlandreUNX 发表于 2014-8-22 22:25
分区表是上位机格式化时写进去的.自己下位机也可以写分区表..目前无论啥文件,除了System Volume Informat ...

你好 , “文件(0x0005000以前) ” 这是指什么,另外看了你的代码恍然大悟,分区表不需要我自己产生。我的想法是将分区表放入ram 这样避免空间的浪费,而且重新枚举成功,由于分区表已经刷新了,固件是无法直接读出的。
FlandreUNX
3楼-- · 2019-12-13 19:21
richards 发表于 2014-8-23 10:29
你好 , “文件(0x0005000以前) ” 这是指什么,另外看了你的代码恍然大悟,分区表不需要我自己产生。我 ...

对.分区表只能针对一个设备.如果你想从USB->RAM->FLASH的话可以试一下将RAM虚拟成U盘,判断BIN传输是否完成.然后再copy到FLASH里面.只需要改mal.c里面的接口代码
FlandreUNX
4楼-- · 2019-12-13 21:58
richards 发表于 2014-8-23 10:29
你好 , “文件(0x0005000以前) ” 这是指什么,另外看了你的代码恍然大悟,分区表不需要我自己产生。我 ...

你好 , “文件(0x0005000以前) ” 这是指什么
flash将物理地址0x08003000以后的空间划分到U盘.所以0x08003000就是U盘的首地址.在PC看来就是0x00000000.而FLASH写入只能是先一页的擦除.所以当格式化完成时.0x08003000(0x00000000)到一段地址是为FAT分区表.大概是到0x08008000(0x00005000)
按照道理当复制一个文件进入U盘时就应该从0x08008000开始(0x00005000).但是实际看啦并不是.而是从0x08008800开始(0x00005800)
这就解析了为什么当我转跳地址填0x08008000时 过不了第一条栈顶判断
craigtao
5楼-- · 2019-12-14 00:20
 精彩回答 2  元偷偷看……
FlandreUNX
6楼-- · 2019-12-14 02:18
craigtao 发表于 2014-8-23 17:25
楼主,支持,能共享原理图吗? 谢谢,我最近也在使用这款芯片,不过只是刚刚入门而已,谢谢, ...

没啥原理图..就是标准的STM32接USB 然后自己加个按钮..网上抓一大把

一周热门 更多>