N32L40x基于串口IAP实现(含升级工具)

bootloader实现要点

bootloader 设计要点
1.分配Flash空间,一部分用于bootloader 一部分用于 APP  ,这里bootloader分配了7K空间,APP分配了121K空间
2.需要准备一个通讯接口,可以是串口,也可以时can等
3.准备mcu的内部flash驱动,可以实现连续读写的函数,flash擦除在写函数内部自动判定
4.bootloader内部延时函数不要使用systick的中断实现,否则进入freertos后创建任务立即出现野指针问题,导致hardfault
5.跳转到app复位函数

实现流程:

  1. 设备开机初始化gpio用于数据led便于提示用
  2. 初始化串口,串口使用接收中断+空闲中断的方式
  3. 初始化flash
  4. 检测是否收到升级指令,收到进入app升级状态,等待app数据,未收到app数据等待超时时进入app
  5. 收到app数据,首先检测数据头尾和检验,成功后将数据写入app地址区域0x8007800开始的地址空间,app收到的数据每次都是1K,当收到的数据小于1K代码代表app数据发送完成
  6. 进入appp

2个核心的bootloader函数

//设置栈顶地址
//addr:栈顶地址
__asm void MSR_MSP

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-11 07:14:06       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-11 07:14:06       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-11 07:14:06       87 阅读
  4. Python语言-面向对象

    2024-03-11 07:14:06       96 阅读

热门阅读

  1. Go微服务: 基于Go Micro框架实现微服务调用

    2024-03-11 07:14:06       41 阅读
  2. ChatGPT 基本用法!ChatGPT4的prompt的使用例子!

    2024-03-11 07:14:06       64 阅读
  3. 四大组件的工作过程

    2024-03-11 07:14:06       35 阅读
  4. vim搜索和替换

    2024-03-11 07:14:06       49 阅读
  5. Haproxy

    Haproxy

    2024-03-11 07:14:06      31 阅读