CH573 通过U-Disk实现IAP问题

Hi 

    我的项目现在需要使用CH573的USB接口插入U盘来更新固件,但是我遇到以下这些问题。

    1.参考USB_IAP工程,jumpApp()这个函数我看到实际上只是通过宏定义一个函数指针,但是我不太清楚最终是在哪里调用这个函数实现跳转。


    2.在startup_CH573.S文件中,USB_IAP以及OnlyUpdateApp_IAP工程中这个值和OnlyUpdateApp_Peripheral值不一样,请问这个参数有什么影响,开发U盘升级功能,这个参数需要修改吗?该如何修改?

image.png

您好,EVT包里暂无这样的代码。接入USB来实现升级,要求CH573作为USB主机;而例程中CH573是作为从机与电脑上位机进行通信。您可以参考IAP例程中的收发/校验固件的逻辑,移植到CH573的USB主机例程中实现U盘升级。

①由于APP层代码中,进入IAP的判断依据是是否按下了PB4按键,触发IAP升级后会复位,代码从头在IAP中运行,会跑到下图位置。一般手动操作,按下按键的滞留时间足够跳过下方的if判断,进入到IAP升级初始化。如果说操作手速极快,在按下按键复位后10ms内就松开了按键,那就会再次跳转到APP层代码,不会进入IAP升级模式。

这个IAP升级触发的识别逻辑仅供参考,可以改成自定义的触发逻辑。

image.png

image.png

②多出来的0x18XX这两位,是配置为机器模式的特权模式,在机器模式下才可以修改中断向量表。从IAP跳转到APP层代码,是会从.S文件中重新加载中断向量表的;在IAP中,需要配置为机器模式,才可以在运行APP前有权限重新配置中断向量表。

IAP工程中的启动文件需要修改为0x1888即启用机器模式,APP层代码的启动文件保持为0x88。如果担心出错,可以直接拷贝.S文件。做U盘升级也是需要在IAP层工程中修改此处的。

image.png


好的,感谢解答,目前测试可以正常。


只有登录才能回复,可以选择微信账号登录