必要知识
IAP在程序中编程(In-Application Programming – IAP)可以使用微控制器支持的任一种通信接口(如I/O端口、USB、CAN、UART、I 2 C、SPI等)下载程序或数据到存储器中。IAP允许用户在程序运行时重新烧写闪存存储器中的内容。然而,IAP要求至少有一部分程序已经使用ICP烧到闪存存储器中。
ICP- 在线编程(In-Circuit Programming – ICP)方式用于更新闪存存储器的全部内容,它通过JTAG、SWD协议或系统加载程(Bootloader)下载用户应用程序到微控制器中。ICP是一种快速有效的编程方法,消除了封装和管座的困扰。
ISP(In-System Programming)在系统可编程,指电路板上的空白器件可以编程写入最终用户代码, 而不需要从电路板上取下器件,已经编程的器件也可以用 ISP 方式擦除或再编程。相关知识链接
- 链接文件知识小猫爪:嵌入式小知识05-IAR icf链接文件操作-链接代码至RAM_iar 链接-CSDN博客
- 嵌入式IDE(1):IAR中ICF链接文件详解和实例分析_iar icf文件-CSDN博客
- STM32升级方法(一):IAP升级_stm32不复位可以isp升级吗-CSDN博客
- 通信协议 【通信协议学习】关于Xmodem、Ymodem、Zmodem、ASCII、Binary传输协议-CSDN博客
- RTOS系列文章(6):Cortex-M3/4之SP,MSP,PSP,Thread模式、Handler模式、内核态、用户态_arm sp msp psp-CSDN博客
iap知识章节
- 分区规划
- 分散加载
- boot规划
- app跳转
- 配置管理
- 固件传输
- 固件升级
- 异常处理
- 跳转到sdram
项目框架
- bootloader组件,负责程序启动,检测有无APP程序,检测app升级、无app等待烧录、app启动失败处理
- bootloader配置,负责配置启动行为,flash分区划分
- download,app下载校验
- 重启行为控制
- app中反向升级bootloader
项目示例
本项目采用的LPC4088主控频率120M 外置SDRAM(32M),FLASH(4M),内部EEPROM(4KB),RTC时钟芯片(eeprom 32KB)
由于当前项目已经使用了RTC作为关键数据的存储,本次项目的存储使用FAL管理,划分如下
名称 | 位置 | 起始地址 | 大小 | 说明 |
---|---|---|---|---|
bootloader | onchip | 0x0000 | 64kb | 裸机启动位置 |
app0 | onchip | 64k | 448kb | 片内程序 |
eeprom0 | onchip | 0 | 4kb | bootload配置数据 |
data | extflash | 0 | 1M | 用户app数据地址 |
download | extflash | 1M | 3M | app镜像 |
app | SDRAM | 0 | 4M | APP运行位置 |
从分区可知,bootloader规划64kb空间,APP一共规划了2个分区,尽可能照顾到所有应用场景,非GUI项目,代码量少于448KB采用片内直接运行方式,GUI项目大于1M,将考虑使用外置download存储代码,后续将代码搬运到SDRAM起始地址处执行(extflash执行效率非常差),也就是说一个片子最多可以规划3.5M代码用户app多版本存储
而app与bootloader交互方式通过片内的eeprom0,这个分区采用flashDB进行管理,提高可读性。
后续笔记将根据这个应用场景展开。