CH32V003 IAP问题

参考了下USART_IAP历程,发现APP生成的bin文件好像是和位置相关的

1685458928366.png


我现在的需求是一个Bootloader 两个APP(APP0 和APP1) 通过Bootloader来判断是执行APP0还是APP1,请教下这样能实现吗?

这样我就能在APP0中升级APP1,在APP1中升级APP0,如果生成的APP bin文件和位置无关,那我只需要维护一份APP版本就可以了。

您好,


        1.V003提供的USART_IAP例程,下载地址为0x1FFFF000,即BOOT区域,并非您截图中的那样,请检查是否为V003参考例程。


        2.使用Bootloader跳转多个APP是可以实现的,通过判断Flash内预先存储的信息,可以选择性的跳转到不同的APP中,目前我们没有提供相关的参考程序,需要您自行开发。


        3.生成的APP的确与起始位置相关,在Bootloader中需要正确跳转到对应的地址,即APP起始地址,单片机才能够正常进行工作。


        4.V003内Flash空间较小,在使用时要注意空间的分配问题。





您好:

  1. 我参考的是V103的IAP上面是这么讲的,V003应该是类似的

  2. 如果生成的APP与位置相关,那么我每次发软件版本都需要提供APP0和APP1两个,因为我不确定MCU当前是在APP0运行还是在APP1运行,能否生成一个与位置无关的APP,即这个APP既可以在以地址A的APP0运行,也可以在以地址B的APP1运行?这样我只需要管理一个升级bin文件就行。


您好,


        没明白您的意思,前面已经解释过了,如果希望跳转,就需要在跳转到具体的地址,单片机想要执行程序,总归要先知道程序存在那个地址吧。如果在升级或下载的时候,希望一次完成,可以将iap、app0、app1拼接起来,一次性下载到芯片内。希望知道当前运行的app,可以直接在Flash中指定一个空闲的地址,保存下当前的处于哪一个app的标志位,需要查询的时候直接读取Flash就好了。


是这样一种升级场景:boot loader只负责跳转到对应的APP ,不负责升级。

APP0运行的时候,会下载APP1的固件,APP1运行的时候,会下载APP0的固件,我的问题是:可否生成一个APP bin文件,而不用考虑当前运行的是APP0还是APP1?


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