求助: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真地址转跳不就行了?
结束此帖子
自己解决了问题..
发现问题
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
你好 , “文件(0x0005000以前) ” 这是指什么,另外看了你的代码恍然大悟,分区表不需要我自己产生。我的想法是将分区表放入ram 这样避免空间的浪费,而且重新枚举成功,由于分区表已经刷新了,固件是无法直接读出的。
对.分区表只能针对一个设备.如果你想从USB->RAM->FLASH的话可以试一下将RAM虚拟成U盘,判断BIN传输是否完成.然后再copy到FLASH里面.只需要改mal.c里面的接口代码
你好 , “文件(0x0005000以前) ” 这是指什么
flash将物理地址0x08003000以后的空间划分到U盘.所以0x08003000就是U盘的首地址.在PC看来就是0x00000000.而FLASH写入只能是先一页的擦除.所以当格式化完成时.0x08003000(0x00000000)到一段地址是为FAT分区表.大概是到0x08008000(0x00005000)
按照道理当复制一个文件进入U盘时就应该从0x08008000开始(0x00005000).但是实际看啦并不是.而是从0x08008800开始(0x00005800)
这就解析了为什么当我转跳地址填0x08008000时 过不了第一条栈顶判断
没啥原理图..就是标准的STM32接USB 然后自己加个按钮..网上抓一大把
一周热门 更多>