[应用相关] 【交流】STM32用IAP实现Firmware的免开机USB升级

[复制链接]
9191|4
 楼主| McuPlayer 发表于 2008-5-26 11:16 | 显示全部楼层 |阅读模式
我的应用中有PC软件通过USB和STM32103通讯。
我需要客户把机器拿走后仍可以升级,不想客户用ST提供的DFU,那个封装不够好,而且是UART的,而且难以整合的我们的PC软件中。

最后参考ST提供的2个sample实现了USB IAP升级,软件初始化时候自动比较当前目录下的Firmware文件和STM32里Firmware的版本,如果需要升级则提示user根据user选择操作。如果用户选择升级,则自动更新Firmware,类似ULINK的做法。

这两个sample是USB Virtual COMM 和 AN2557的IAP程序。

可以修改USB Virtual COMM实现USB Firmware,再增加IAP部分,可实现免开机升级。
 楼主| McuPlayer 发表于 2008-5-26 11:18 | 显示全部楼层

IAP自动USB升级已经实现了,但很不稳定,还要找原因

因为IAP Loader和IAP App是两个独立的firmware,来回跳转使用了中断向量的切换,所以经常会造成PC机连线中途挂掉。
 楼主| McuPlayer 发表于 2008-5-27 11:13 | 显示全部楼层

USB在两组Firmware之间无法热切换

现在用的是模拟插拔的方式,在loader和App之间切换的。
热切换需要把所有USB的状态变量都copy过去,但USB用的ST提供的Lib,实在不想自己从头在做一个了,模拟插拔的缺点是浪费几秒的Delay时间。
simon21ic 发表于 2008-5-27 13:17 | 显示全部楼层

这个好像就是我做的STM32USBBoot的功能

为什么不用软件复位来切换?
可以在Backup区写一个标记,然后调用软件复位命令,不过这样,USB设备会断开,然后再接上
 楼主| McuPlayer 发表于 2008-5-27 20:48 | 显示全部楼层

软复位切换和JMP切换区别不是太大

关键是USB要重新枚举,PC端要Delay两三秒再次连接,而且切换前PC端要关闭USB Device否则可能下次打开失败。

我也打算做USB不重新枚举,但是要深入研究STM32的USB寄存器,实在没有那么多精力,只好作罢,浪费三秒算了。
另外一种方式是,不更新USB通讯部分,只更新功能部分,这样就不用USB重新枚举了,但是二进制映像的产生以及相关地址的连接,在编译的时候要处理好。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

338

主题

7307

帖子

26

粉丝
快速回复 在线客服 返回列表 返回顶部