bootloader实现要点
bootloader 设计要点
1.分配Flash空间,一部分用于bootloader 一部分用于 APP ,这里bootloader分配了7K空间,APP分配了121K空间
2.需要准备一个通讯接口,可以是串口,也可以时can等
3.准备mcu的内部flash驱动,可以实现连续读写的函数,flash擦除在写函数内部自动判定
4.bootloader内部延时函数不要使用systick的中断实现,否则进入freertos后创建任务立即出现野指针问题,导致hardfault
5.跳转到app复位函数
实现流程:
- 设备开机初始化gpio用于数据led便于提示用
- 初始化串口,串口使用接收中断+空闲中断的方式
- 初始化flash
- 检测是否收到升级指令,收到进入app升级状态,等待app数据,未收到app数据等待超时时进入app
- 收到app数据,首先检测数据头尾和检验,成功后将数据写入app地址区域0x8007800开始的地址空间,app收到的数据每次都是1K,当收到的数据小于1K代码代表app数据发送完成
- 进入appp
2个核心的bootloader函数
//设置栈顶地址
//addr:栈顶地址
__asm void MSR_MSP