USB_IAP例程讲解及移植步骤
IAP是In Application Programming的缩写,译为应用编程技术,此方式允许用户在自己的程序运行过程中对Flash存储器的部分区域进行烧写,方便地通过预留的通信口对产品中的固件程序进行更新升级。
此外,USB_IAPDemo中的两个工程可通过预留的jumpApp接口和jumpToIap接口实现地址指针的跳转进行工程切换;
IAP完整工程简略图如下:
按照Code地址的顺序,首先上电后我们会从0地址运行IAP工程,
一上来我们会去Dataflash中去读取IAP Flag,看是否需要进行IAP升级,如果不需要,则会跳转至APP程序,如果检测到标志置位,则会加载USB驱动;
USB外设初始化及驱动加载:
IAP部分一般不需要改动,按需改动进入APP的方式,然后拷贝到自己的工程下即可,
而该例程下的APP程序则只用来演示如何跳转往IAP工程以及如果升级失败如何保证重新升级,因此只有三处需要注意:
①在IAP工程中可以看到上电后会进行判断IAP标志,决定是否跳转至APP,而如果APP升级失败(也就不可能跑到APP工程中),则flag不可能会被置为APP_Flag,重新上电后跑到IAP工程中判断标志不成立依旧会跑IAP工程,直到升级成功顺利运行到APP后才会将flag置为APP_Flag;
②例程中给出的进入IAP的方式为连续两次将PB4拉低,该方式随意更改,主体函数为jumpToIap();
③记得修改APP工程的Link.ld文件的CODE起始地址为0x1000,另外启动文件Startup.s文件li t0, 0x88修改为li t0, 0x1888(机器模式);
移植步骤:
①将IAP工程拷贝到自己的应用APP工程目录下
②修改自己的APP工程Link.ld起始地址为0x1000,startup启动文件li to,0x1888(机器模式)
③自行添加标志管理(按需)
④添加void jumpToIap(void),void SwitchImageFlag(uint8_t new_flag)函数定义
⑤完善标志管理的逻辑,添加工程跳转的处理逻辑,何时调用jumpToIapI();