|
求助:stm32 用内部flash虚拟u盘进行IAP
http://www.amobbs.com/thread-5592581-1-1.html
(出处: amoBBS 阿莫电子论坛)
原帖如上
好了,各位大神,这个东西搞了我1天1夜,各种奇葩问题解决后,总结如下
其实根本没有所谓0x5800,0x5000,0x8000,0x8800,这些破事.
原作者的就是对的,至于为什么原帖楼主会出现0x8800,这个是因为win8系统导致,
更加准确的说法是,自动系统还原导致的.
win8在格式化后,强行率先建立System Volume Information ,这个就占据了0x5000-0x5800.就是这个原因导致可用起始地址偏移了,
这里就有人,甚至原作者也说修改
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8800);
这个是非常不好,因为用户中间有win8的,也有其他系统,也有关闭了系统还原的(不会生成System Volume Information )
就是说,如果用0x8800 不能在非win8系统玩,
用0x8000,不能在win8玩,
产品兼容性变差.
这里要说解决的办法,
如果是iap对文件进行搜索,判断准确的其实位置.这个难度较高.
这个就失去原作者的简便iap的意图.
简单解决办法,那就是先删除 System Volume Information ,
再拷贝 *.bin到U盘,让bin文件占据0x8000,就可以正常运行.
新的问题来了.
我搞了半天都没有找到好的办法删除 System Volume Information .
有没有大神给一个简单的,客户能完成删除的System Volume Information 办法.
格盘是不可能的,因为格盘后win8会立马新建 System Volume Information .
这么说吧,只要客户不对虚拟U盘格式化,就没有这些破事.
这里再补充说一点,先用xp等系统完成虚拟u盘iap系统后,在客户不格盘的情况下,升级仍然有局限.
局限:升级bin必须小于等于原bin大小.
因为插入win8系统后,系统会在bin文件尾部建立数据
这个时候,如果新的bin大于原文件,bin文件会被切开多截存放.
单片机就会运行System Volume Information 的数据,就会出错.
要解决这个问题,最好的办法就是客户能简单清空虚拟U盘.
请各位大神,先试过后再来提建议,那种要注册表的,要打命令行的,客户是不可能完成的.
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|