打印
[应用相关]

【交流】STM32用IAP实现Firmware的免开机USB升级

[复制链接]
8397|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设备会断开,然后再接上

使用特权

评论回复
5
McuPlayer|  楼主 | 2008-5-27 20:48 | 只看该作者

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

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

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

338

主题

7307

帖子

26

粉丝