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();

 

 

posted @ 2024-07-22 15:07  oTvTo  阅读(91)  评论(0编辑  收藏  举报