搜索
bottom↓
回复: 15

stm32 用内部flash虚拟u盘进行IAP>>>>>>注意事项

[复制链接]

出0入0汤圆

发表于 2014-11-11 12:09:15 | 显示全部楼层 |阅读模式
求助: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周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2014-11-11 12:44:44 | 显示全部楼层
不错的说,感谢楼主的热心。

出0入0汤圆

发表于 2014-11-19 20:32:33 | 显示全部楼层
我看了那个帖子也试了一下,确实是win8造成困扰。
对于app程序来说,编译时候需要知道向量表偏移量,而这个偏移量取决于文件放在U盘内的地址;
如果没有win8问题,让客户每次格式化一下就是了,但是有wen8造成编译APP时不知道偏移量,这才是最大的问题.

出0入0汤圆

发表于 2014-11-19 22:00:17 | 显示全部楼层
如果自己建个System Volume Information再存bin会怎样,win8应该不会再去建个,所以bin起始地址就固定了吧。现在回复用的电脑不是win8,没试过有错请指出。

出0入0汤圆

发表于 2014-11-21 16:03:29 | 显示全部楼层
我也遇到了楼主所描述的问题,我测试了XP,WIN 7都可行,唯有WIN 8会在格式化后立即写入SystemVolumeInformation文件夹。
我用ST的读FLASH功能,把全片全读出来,存为BIN文件格式,然后查看了地址偏移情况,截了四个图,分别为:
一、在WIN 8下,单元大小为2048字节(即FLASH页大小)格式化后,在WIN 8下拷入用户程序后的偏移情况;
二、在WIN 8下,单元大小为默认格式化后,在WIN 8下拷入用户程序后的偏移情况;
三、在WIN XP下,单元大小只有默认一项可选,在WIN XP下格式化后拷入用户程序后的偏移情况;
四、在WIN XP下,单元大小默认格式化,然后再插入WIN 8中拷入用户程序后的偏移情况;

SystemVolumeInformation文件夹确实烦人,查看了用户程序后,有一个共同点,对于用户程序,起始地址区是中断向量表所在,因此,可以在引导程序中查找如上四图中的数据,第一个4字节为:0x20000900,为了保险,确定查找到的是用户程序,可以继续查找接下来的第二个,第三个字节,分别为:0x08009147  0x080111bd  0x0800d279,  好像是有点规律,以0x08xxxxxx的数据,确认后即返回用户程序的跳转地址,这样应该可以适应系统是否写入SystemVolumeInformation的影响。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-11-21 16:04:21 | 显示全部楼层
正在学习,谢谢

出0入0汤圆

发表于 2015-5-26 15:48:47 | 显示全部楼层
顶起!!!
已经使用此方法,感谢楼主

出0入0汤圆

发表于 2015-5-26 16:17:08 | 显示全部楼层
不过目前发现一个小问题。
我的app是采用freertos系统,系统调度之前的东西都可以执行,但是好像没执行系统调度啊

出0入0汤圆

发表于 2015-5-26 16:39:27 | 显示全部楼层
自己解决问题。忘记在app里主程序设置中断向量表了
就是这句 NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000);

出0入0汤圆

发表于 2015-7-10 11:32:34 | 显示全部楼层
stm32 用内部flash虚拟u盘进行IAP.标记下。感谢楼主!

出0入0汤圆

发表于 2015-7-10 12:16:11 来自手机 | 显示全部楼层
这个功能不错,标记下以后有可能用到

出0入0汤圆

发表于 2015-7-11 17:14:08 | 显示全部楼层
正在学习U盘读写

出0入0汤圆

发表于 2015-12-7 10:01:21 | 显示全部楼层
http://www.amobbs.com/thread-5638810-1-1.html 这个贴子能有帮助吗?

出0入0汤圆

发表于 2015-12-8 12:23:55 | 显示全部楼层
感谢分享!

出0入0汤圆

发表于 2015-12-9 10:11:57 | 显示全部楼层
WIN8还没用过

出0入0汤圆

发表于 2015-12-14 12:03:25 | 显示全部楼层
学习了。太方便了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 14:59

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表