IAP
1.IAP流程(当不需要更新的时候)
1.上电后首先进入一个必须要进入的不可控的区
2.然后跳转到boot
3.然后跳转到cfg,查询状态是否更新(例如,常态是5555,但是查询到是5555,代表不需要更新程序)
4.跳回boot
5.跳转到APP,执行程序
2.IAP流程(当需要更新的时候)
APP程序运行中通过串口(中断)监测到更新程序的指令,首先改写cfg标志位,然后跳转到boot
boot查cfg,监测的需要更新程序,擦除flash,写入bin文件,cfg置位
3.伪代码
上电
进入boot程序
if( 查询标志位==没有程序 )
灯快速闪,表示等待发送程序
上位机通过串口发送程序
boot程序收到串口发过来的固件,擦写flash
擦写完成
改写标志位:标志位=有程序
跳转到APP程序
APP程序运行
if 需要在线升级程序
app程序等待串口发命令或者数据
改写标志位:标志位=没有程序
跳转到boot
endif
endif
elseif( 查询标志位==有程序 )
直接跳转到APP程序
APP程序运行
if 需要在线升级程序
app程序等待串口发命令或者数据
改写标志位:标志位=没有程序
跳转到boot
endif
endif
4.服务器交互
5.APP生成bin
main函数中中断向量表指向应用程序
SCB->VTOR = (uint32_t)APPLICATION_ADDRESS;
fromelf.exe可以把.axf转.bin文件,在Run #1中写入fromelf路径(只需要--bin前需要改动)
6.103flash空间分配
//total 128K 0x08000000-----0x08020000 //20000-->131072-->128K
//bootloader 32K 0x08000000
//application 80K 0x08008000
//flag 1K 0x0801C000
//config 15K 0x0801C400
注意:flash最小单位为1K字节,里面的驱动函数慎重修改