OTA流程
- APP下载阶段
- 下载固件:==使用一个线程+MQTT+断点续传==将加密固件分段下载到RAM,并发送到外挂flash的A区域上存储
- 校验与写flag:==使用CRC==校验外挂flash上的固件,校验成功,则将需要更新的flag写到eeprom上
- BL更新阶段
- 读flag:检查eeprom的flag值,为“需要更新”才更新,否则直接跳转到app
- 解密并转移固件:==使用AES解密==将A区域固件分段拿到RAM中解密,然后发送到外挂flash的B区域上存储
- 备份APP:将APP复制到A区域,作为备份区域
- 更新固件:将B区域的固件,复制到APP
- 二次校验-复位-跳转阶段
- 校验栈顶地址、复位向量:略
- 关闭全局中断:__disable_irq()
- 关闭所有中断:NVIC->ICER和NVIC->ICPR全部置0xFFFFFFFF
- deinit时钟、所有外设
- 设置msp与特权级:__set_CONTROL(0)
- 设置SCB->VTOR
- 跳转到复位向量