搜索
bottom↓
回复: 139

续: ST32 IAP 功能, mass storage+spi flash +fatfs IAP --EASY

  [复制链接]

出0入8汤圆

发表于 2013-9-22 21:29:37 | 显示全部楼层 |阅读模式
本帖最后由 skype 于 2013-9-23 00:08 编辑

续:
ST32 IAP 功能, 要让所有的人都可以轻松搞定 (串口IAP)


还是那句话,高手请走开,只对新手!

硬件说明:
  使用STM32F106RBT6单片机, SPI1外挂SPI FLASH w25q32(4Mbytes)。以stm32 mass storage功能将spi flash (sd\tf card也一样)处理成U盘 + fatfs 完成IAP功能!


第一步,以stm32 mass storage功能将spi flash处理成U盘:


demo板显示界面:


第二步,格式化 U盘


第三步, 将Update.bin文件拷到SPI FLASH u盘中,(IAP boot在开始时会扫描U盘中的文件,如果发现Update.bin,就开始升级APP)




第四步,找到Update.bin文件后就开始对APP FLASH进行操作,先擦除,后写入!


写入:


demo板显示:


第五步,标准的APP跳转,就不用说了吧:


本帖子中包含更多资源

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

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入8汤圆

 楼主| 发表于 2013-10-13 21:30:11 | 显示全部楼层

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2013-9-22 21:32:01 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2013-9-22 21:32:46 | 显示全部楼层
这个牛B  必须顶                                                                                                  

出0入0汤圆

发表于 2013-9-22 21:32:53 | 显示全部楼层
支持

正好用得着

出0入8汤圆

 楼主| 发表于 2013-9-22 21:33:13 | 显示全部楼层
   谢谢!

出0入0汤圆

发表于 2013-9-22 21:33:20 | 显示全部楼层
本帖最后由 mvip 于 2013-9-22 21:35 编辑

你太愤青啦,谢谢分享收藏

楼主你再搞个u盘升级和无线gprs升级或网络就更完美啦

出0入0汤圆

发表于 2013-9-22 21:33:32 | 显示全部楼层
新手支持一下,收藏了

出0入0汤圆

发表于 2013-9-22 21:33:44 | 显示全部楼层
支持,顶一下,其实不如直接支持U盘IAP更好

出0入0汤圆

发表于 2013-9-22 21:48:03 | 显示全部楼层
谢谢分享,学习下

出0入8汤圆

 楼主| 发表于 2013-9-22 21:59:46 | 显示全部楼层
skyhu 发表于 2013-9-22 21:33
支持,顶一下,其实不如直接支持U盘IAP更好

什么是U盘?

出0入0汤圆

发表于 2013-9-22 22:04:17 | 显示全部楼层
skype 发表于 2013-9-22 21:59
什么是U盘?

USB接口的U盘,很多时候现场可没有电脑给你用

出0入0汤圆

发表于 2013-9-22 22:11:12 来自手机 | 显示全部楼层
楼主辛苦了

出100入85汤圆

发表于 2013-9-22 22:12:43 | 显示全部楼层
很用心,很无私

出0入8汤圆

 楼主| 发表于 2013-9-22 22:15:03 | 显示全部楼层
skyhu 发表于 2013-9-22 22:04
USB接口的U盘,很多时候现场可没有电脑给你用

出0入30汤圆

发表于 2013-9-22 22:16:14 | 显示全部楼层
不错。帮顶。

出0入0汤圆

发表于 2013-9-22 22:43:50 | 显示全部楼层
bucuo ,谢谢分享。

能做成U盘或SD卡,可能更方便些。

出0入0汤圆

发表于 2013-9-23 02:37:25 来自手机 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2013-9-23 08:12:20 | 显示全部楼层
支持                  

出0入0汤圆

发表于 2013-9-23 08:37:48 | 显示全部楼层
能否讲一下stm32 mass storage的实现过程,以前搞过一次没成功,想不明白电脑是怎么处理的,驱动用的是哪个?是系统自带的还是自己编的。谢谢

出0入0汤圆

发表于 2013-9-23 08:53:02 | 显示全部楼层
顶一下!
STM32F4就能用u盘升级程序,stm32f103是不行的。

出0入0汤圆

发表于 2013-9-23 08:58:54 | 显示全部楼层
顶。谢谢。            

出100入18汤圆

发表于 2013-9-23 09:32:41 | 显示全部楼层
很好,收藏了。

出0入0汤圆

发表于 2013-9-23 09:40:50 | 显示全部楼层
不错,很牛

出0入0汤圆

发表于 2013-9-23 09:50:07 | 显示全部楼层
来晚了?怎么没有附件下载呀。

出0入0汤圆

发表于 2013-9-23 10:58:45 | 显示全部楼层
建议上完整工程

出0入0汤圆

发表于 2013-9-23 11:35:39 | 显示全部楼层
楼主辛苦了,顶一下!

出0入0汤圆

发表于 2013-9-23 11:43:17 | 显示全部楼层
牛b!没放完整代码?

出0入8汤圆

 楼主| 发表于 2013-9-23 11:57:39 | 显示全部楼层
mvip 发表于 2013-9-22 21:33
你太愤青啦,谢谢分享收藏

楼主你再搞个u盘升级和无线gprs升级或网络就更完美啦 ...

GPRS TCPIP联网升级对于远程终端设备来说是很有必要的,不过对于自带TCPIP协议堆的模块来说,也是很简单的,只不过是一个GSM驱动+写芯片flash而已!
现已有明确的构思,国庆后再抽时间完成!

出0入0汤圆

发表于 2013-9-23 11:58:53 | 显示全部楼层
真心还是不错的,thanks!顶!

出0入0汤圆

发表于 2013-9-23 11:59:02 | 显示全部楼层
顶顶

出0入0汤圆

发表于 2013-9-23 12:01:43 | 显示全部楼层
支持非常支持

出0入0汤圆

发表于 2013-9-23 12:08:53 | 显示全部楼层
没看见代码

出75入88汤圆

发表于 2013-9-23 23:19:23 | 显示全部楼层
谢谢!受教了!

出0入0汤圆

发表于 2013-9-23 23:57:12 | 显示全部楼层
mark,我也试试看

出0入0汤圆

发表于 2013-9-24 00:12:59 来自手机 | 显示全部楼层
STM32u盘iap升级2011年做过

出0入0汤圆

发表于 2013-9-24 01:27:21 | 显示全部楼层
楼主是来勾引我们的么?怎么没有源代码

出0入0汤圆

发表于 2013-9-24 08:39:45 | 显示全部楼层
牛B,有点明白怎么远程升级了

出0入0汤圆

发表于 2013-9-24 08:48:09 | 显示全部楼层
楼主,你认为有必要对HEX文件进行加密吗?

出0入8汤圆

 楼主| 发表于 2013-9-24 08:50:15 | 显示全部楼层
本帖最后由 skype 于 2013-9-24 09:00 编辑

呵呵,IAP就是STM32读写本身芯片的FLASH而已,理论看多了,反而迷糊了,就不知道从何下手了! 我就是这么过来的,杯具呀!

出0入8汤圆

 楼主| 发表于 2013-9-24 08:52:47 | 显示全部楼层
mypear 发表于 2013-9-24 08:39
牛B,有点明白怎么远程升级了

各种IAP升级方式,不过是外设驱动+读写芯片本身的flash而已!

出0入0汤圆

发表于 2013-9-24 08:54:28 | 显示全部楼层
厉害的。 IAP真是个不错的功能。

出0入8汤圆

 楼主| 发表于 2013-9-24 08:59:02 | 显示全部楼层
meirenai 发表于 2013-9-24 08:48
楼主,你认为有必要对HEX文件进行加密吗?

看个人吧,如果hex文件是给第三方的话,加密还是有必要的.实际上HEX加密本身用处不大,是要基于芯片本身不能被破解吧!

出0入0汤圆

发表于 2013-9-24 09:04:41 | 显示全部楼层
skype 发表于 2013-9-24 08:52
各种IAP升级方式,不过是外设驱动+读写芯片本身的flash而已!

明白明白~~~

出0入0汤圆

发表于 2013-9-24 09:07:07 | 显示全部楼层
能否连外部spif flash也省了就好,若内部flash足够大,或是搬运一部分到ram

出0入8汤圆

 楼主| 发表于 2013-9-24 09:12:26 | 显示全部楼层
futurekwong 发表于 2013-9-24 09:07
能否连外部spif flash也省了就好,若内部flash足够大,或是搬运一部分到ram

呵呵,钱多??

出0入0汤圆

发表于 2013-9-24 11:06:46 | 显示全部楼层
用这种方法可以把FLASH当做EEPROM来用吗?有什么注意的事项吗?效率?可靠性如何呢?

出0入0汤圆

发表于 2013-9-24 11:17:52 | 显示全部楼层
源码呢,找了半天没见着源码。参考下

出0入0汤圆

发表于 2013-9-24 20:08:42 | 显示全部楼层
思路很好,能开放源码供研究研究不?

出0入0汤圆

发表于 2013-9-24 21:33:11 | 显示全部楼层
谢谢分享!

出0入0汤圆

发表于 2013-9-27 10:33:24 | 显示全部楼层
粗俗的楼主惹人爱····iap 留爪子,晚上来看····新手帮顶

出0入0汤圆

发表于 2013-10-13 20:55:56 | 显示全部楼层
发现一个问题,在USB初始化完成后,如果用FATFS写入文件,就会导致FAT文件系统损坏,不知楼主怎么解决的?

出0入0汤圆

发表于 2013-10-13 21:17:18 | 显示全部楼层
过来支持一下

出0入8汤圆

 楼主| 发表于 2013-10-13 21:29:15 | 显示全部楼层
黑暗深处 发表于 2013-10-13 20:55
发现一个问题,在USB初始化完成后,如果用FATFS写入文件,就会导致FAT文件系统损坏,不知楼主怎么解决的? ...

把代码发出来,你参考一下吧!

出0入0汤圆

发表于 2013-10-13 21:31:39 | 显示全部楼层
skype 发表于 2013-10-13 21:29
把代码发出来,你参考一下吧!

十分感谢

出0入0汤圆

发表于 2013-10-13 22:13:51 | 显示全部楼层
mark,NB>.

出0入0汤圆

发表于 2013-10-13 23:05:46 | 显示全部楼层
最省事的方式还是把内部FLASH虚拟成U盘,然后直接向这个虚拟U盘复制程序文件,复位就可以直接运行了,免去了电脑IAP软件,傻瓜式的升级方式。

出0入0汤圆

发表于 2013-10-13 23:14:03 | 显示全部楼层
看到楼主用的是原子的mini板 我也可以学习一下了

出0入8汤圆

 楼主| 发表于 2013-10-14 07:57:46 | 显示全部楼层
yuangaoping 发表于 2013-10-13 23:05
最省事的方式还是把内部FLASH虚拟成U盘,然后直接向这个虚拟U盘复制程序文件,复位就可以直接运行了,免去 ...

那BIN文件破解的方式是不是也比较傻瓜呢,直接拷贝BIN文件就可以了吧!

出0入0汤圆

发表于 2013-10-15 16:35:47 | 显示全部楼层
这么好的帖子,忍不住要顶上来

出0入0汤圆

发表于 2013-10-18 21:52:35 | 显示全部楼层
yuangaoping 发表于 2013-10-13 23:05
最省事的方式还是把内部FLASH虚拟成U盘,然后直接向这个虚拟U盘复制程序文件,复位就可以直接运行了,免去 ...

高,实在是高,又一种思路,不过通过电脑拷过去的bin是不是里面还有很多文件系统的信息(我的猜测),要怎么滤掉这些东西呢

出0入0汤圆

发表于 2013-10-18 21:59:55 | 显示全部楼层
楼主的帖子很及时啊,爱死你了

出0入0汤圆

发表于 2013-10-18 22:02:58 | 显示全部楼层
JuniorDesinger 发表于 2013-10-18 21:52
高,实在是高,又一种思路,不过通过电脑拷过去的bin是不是里面还有很多文件系统的信息(我的猜 ...

不知道有没有人这样搞成功过

出0入0汤圆

发表于 2013-10-19 11:37:22 | 显示全部楼层
JuniorDesinger 发表于 2013-10-18 21:52
高,实在是高,又一种思路,不过通过电脑拷过去的bin是不是里面还有很多文件系统的信息(我的猜 ...

文件名是在单独的分区表,这部分确实占用部分资源,但拷进去的BIN是干净的文件,直接可以执行。

出0入0汤圆

发表于 2013-10-19 15:01:26 | 显示全部楼层
yuangaoping 发表于 2013-10-19 11:37
文件名是在单独的分区表,这部分确实占用部分资源,但拷进去的BIN是干净的文件,直接可以执行。 ...

学习了,还想问下,如果文件大小变化了,那文件分区表的大小和位置会不会也变化,如果变化怎么办

出0入0汤圆

发表于 2013-10-19 15:04:58 | 显示全部楼层
顶,超级有用的

出0入0汤圆

发表于 2013-10-19 18:26:25 | 显示全部楼层
JuniorDesinger 发表于 2013-10-19 15:01
学习了,还想问下,如果文件大小变化了,那文件分区表的大小和位置会不会也变化,如果变化怎么办 ...

划定分区后,分区表大小是固定的。文件的起始位置和大小等具体数据是在分区表中存放的,在IAP时,仅仅需要将文件复制进来,不需要进行太多的文件操作,因此可以直接使用格式化后的干净分区表。这种情况下,BIN文件每次都是从文件系统起始位置开始存放的,大小变化不会影响程序运行。当然,前提是剩余空间要能存下文件。
我用C8,IAP用一部分,3K,剩余做程序空间,格式化后仅剩下32K空间,因此文件大小不能超过32K了。

出0入8汤圆

 楼主| 发表于 2013-10-20 10:28:12 | 显示全部楼层
yuangaoping

您好,开个贴子给个sample code吧,让我们也学习一下!

出0入0汤圆

发表于 2013-10-20 11:23:32 | 显示全部楼层
顶楼主               

出0入0汤圆

发表于 2013-10-20 11:44:14 | 显示全部楼层
yuangaoping 发表于 2013-10-19 18:26
划定分区后,分区表大小是固定的。文件的起始位置和大小等具体数据是在分区表中存放的,在IAP时,仅仅需 ...

出0入0汤圆

发表于 2013-10-31 01:24:20 | 显示全部楼层
本帖最后由 yuangaoping 于 2013-10-31 01:27 编辑

利用片内FLASH虚拟U盘,使用文件复制方式实现IAP
USART IAP功能想必大家都很熟悉了,我们通过USART  IAP,可以很方便的实现程序升级。
但是在实际工作中,遇到一些特殊情况时,USART  IAP功能却不像我们应用中那么方便,甚至成了一大制约因素:
1.板子交给远方的用户,用户手头没有带串口的电脑。
2.用户找到带串口的电脑,却仍然没有合适的串口连接线。
3.终于找到了合适的串口连接线,仍没有IAP软件。
4.IAP软件连同HEX文件一同发给用户,用户却不会操作。在我们手头很简单的操作,到用户手里,却总也搞不定(即便是简单的超级终端,想要远程教会用户,也是很考验功力的)。
5.不是所有的板子都设计有串口,没有串口的板子,呵呵……
幸好STM还给我们提供了DFU升级方式,基本可以解决以上多数问题,只需要流出USB接口就行。
但是DFU方式,仍然对用户的要求很高,需要用户熟悉软件的操作过程和流程(见制约因素4)。
只有找到一种更简单的方式,只要简单的复制、粘贴操作,就可以实现程序更新,才能最大限度解决以上问题。
现在我们通过虚拟U盘IAP程序,将程序存储的FLASH空间虚拟为U盘,只要将程序文件复制到这个U盘,就完成了程序更新,消除了用户升级操作的学习过程。

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2013-10-31 02:46:04 | 显示全部楼层
程序实现过程:
1.IAP程序
IAP程序仍然占用0x8000000~0x8003000的FLASH空间,IAP的作用,是在满足IAP控制要求的情况下启动IAP功能,否则,直接跳转并执行用户程序。启动IAP功能,可以使用3个方式:
1.1.当用户程序为空时,自动启动IAP功能,做写程序准备。
1.2.当用户程序正常,但启动时按下了特定的IAP按键时,启动IAP功能。
1.3.用户程序运行中,在某个特殊位置做了IAP升级标志,判读标志后,启动IAP功能。
现在的IAP程序,仅仅实现简单的将内部FLASH虚拟为U盘功能即可。参见《5分钟用STM32的内置Flash做一个超小U盘》。当然,这个小U盘缺少了文件系统,需要重新格式化才行。
格式化后,我们的超小U盘OK了,接下来就该进行下一步了,用户程序。
2.用户程序
2.1.配置
常规的用户程序,对于我们的STM32F103C8系列,有64KFLASH,因此可供IAP程序使用的为0x8003000~0x800FFFF的FLASH空间。但我们这次的用户程序,必须要保留下文件系统,因此修改为仅使用0x8008000~0x800FFFF。这其中的0X8003000~0X8008000空间,就是格式化时保存的文件系统。
file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtmlclip1/01/clip_image002.jpg
为何修改为0x8008000而不是其它位置?因为系统告诉我们了,U盘容量=32K,因此反推:(0x800ffff+1)-32K=0x8008000(STM32F103C8系列)。
file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtmlclip1/01/clip_image004.jpg
2.2.编译用户程序
file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtmlclip1/01/clip_image006.jpg
主程序中不要忘记偏移。编译完,赶紧试试吧。可是,我们该将哪个文件存入U盘啊?file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtmlclip1/01/clip_image008.jpg
这样就会编译结束后自动生成对应的***.BIN文件,这个BIN文件,就是我们需要的升级文件。
2.3.复制文件,升级了。复制文件后复位,用户程序自动运行了。
file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtmlclip1/01/clip_image010.jpg
这时,我们可以再次回到U盘状态,删除文件,甚至是格式化这个U盘,只要没有新的文件进行覆盖,我们的程序会始终正常运行的。这是FAT表文件系统的缺陷造成的,也是数据恢复的理论基础。

出0入0汤圆

发表于 2013-10-31 02:48:03 | 显示全部楼层
图片上传太费劲,来篇文档吧

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2013-10-31 07:24:14 | 显示全部楼层
这个好用!

出0入0汤圆

发表于 2013-10-31 08:38:17 | 显示全部楼层
收藏了,

出0入0汤圆

发表于 2013-10-31 08:44:30 | 显示全部楼层
不错了,正发愁TF卡

出0入0汤圆

发表于 2013-10-31 09:20:17 | 显示全部楼层
MARK,谢谢,用到的时候好找到。

出0入0汤圆

发表于 2013-10-31 10:15:54 | 显示全部楼层
Mark, 谢谢楼主提供这么好的思路。

出0入0汤圆

发表于 2013-10-31 11:07:42 | 显示全部楼层
去你妈的,IAP,去你妈的理论。。。。顶起。

出0入0汤圆

发表于 2013-10-31 11:30:14 | 显示全部楼层
IAP,会不会每次启动都升级?

出0入0汤圆

发表于 2013-10-31 16:33:49 | 显示全部楼层
好东西啊,谢谢分享

出0入0汤圆

发表于 2013-12-18 22:26:12 | 显示全部楼层
wxty 发表于 2013-10-31 11:30
IAP,会不会每次启动都升级?

升级结束后改名或者删除文件就可以了

出0入0汤圆

发表于 2013-12-18 22:30:01 | 显示全部楼层
楼主问一个问题:
作为u盘的时候,看代码是直接写扇区的,这样你的fatfs为什么一样能识别Update.bin这个文件呢?
我看ST官方的文档,也有一个note:For mass storage class, the device firmware does not need to know or take into account the file system the host is using. The firmware just stores and sends blocks of data as requested by the host.说是不需要考虑文件系统,这块不是很明白,希望给指点一下?

出0入0汤圆

发表于 2013-12-19 03:28:50 来自手机 | 显示全部楼层
好东西,顶一个

出0入0汤圆

发表于 2013-12-19 09:07:02 | 显示全部楼层
楼主牛人啊,谢谢楼主提供那么好的代码。超级赞

出0入0汤圆

发表于 2013-12-19 12:07:42 | 显示全部楼层
只会sd卡IAP

出0入0汤圆

发表于 2014-2-17 22:20:05 | 显示全部楼层
很好的东西,手下了,有机会试试!

出0入0汤圆

发表于 2014-2-17 22:35:03 | 显示全部楼层
这个方法很方便啊 值得学习啊

出0入17汤圆

发表于 2014-2-17 23:49:05 | 显示全部楼层

很好的东西,多谢分享!

出0入0汤圆

发表于 2014-2-18 06:58:04 | 显示全部楼层
yuangaoping 发表于 2013-10-31 02:48
图片上传太费劲,来篇文档吧

这里说的IAP部分是32本来就有的还是需要自己编写啊?

出0入0汤圆

发表于 2014-2-18 09:17:35 | 显示全部楼层
貌似还没完,楼主请继续。。。。。。。。。

出0入0汤圆

发表于 2014-2-20 22:44:32 | 显示全部楼层
yuangaoping 发表于 2013-10-31 02:48
图片上传太费劲,来篇文档吧

您好,能否共享一个dome,谢谢

出0入0汤圆

发表于 2014-2-21 00:29:11 | 显示全部楼层
厉害,前来学习

出0入0汤圆

发表于 2014-2-21 14:54:33 | 显示全部楼层
相当不错呀。希望有人再来个gprs或网络升级

出0入0汤圆

发表于 2014-3-26 14:55:32 | 显示全部楼层
下了LZ的附件,压缩包点开后提示
STM32 lib3.50 usb mass storage spi flash fatfs IAP V1.0.rar: 不可预料的压缩文件末端
好像是压缩文件损坏了。

出0入0汤圆

发表于 2014-3-26 15:27:32 | 显示全部楼层
mark, thanks

出0入0汤圆

发表于 2014-3-26 15:31:42 | 显示全部楼层
不错,学习。。。

出0入0汤圆

发表于 2014-3-27 22:23:21 来自手机 | 显示全部楼层
好东西,留记号到

出0入0汤圆

发表于 2014-3-29 21:33:03 | 显示全部楼层
留个记号。。正在做。。。

出0入13汤圆

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

本版积分规则

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

GMT+8, 2024-7-4 03:32

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

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