ARM 代码烧录
(一)ICP(In Circuit Programing)
1.在电路编程:通过 DAP(Debug Access Port)使用仿真器/烧录器串行方式下载程序
为方便烧录程序,将CPU固定在系统板中,引出 Debug Interface 下载程序
常用接口:JTAG 与 SWD 接口 ——> JLINK 与 ST-LINK 仿真调试器
2.烧录过程:PC ——> 仿真器 ——> Debug Interface ——> MCU
(1)使用 仿真器 烧录程序到 主存储器
(2)系统复位,从主存储器开始执行用户代码
(二)ISP(In System Programing)
1.在系统编程:厂家自定义 ISP 程序(UART/USB 协议),直接使用 USB 编程
(1)ISP 程序 存放在某一存储器中
2.烧录过程:PC ——> USB ——> (系统内置 JTAG/SWD 接口)——> MCU
(1)使用 USB串口 将程序下载到 指定存储器 中
(2)系统复位,执行 ISP 程序,利用 UART/USB 协议解析 hex 地址,将代码写入到 主存储器 中
- 特殊情况:系统内置 JTAG/SWD 接口,使用USB转接方式也属于 ISP 编程
(3)系统复位,然后从主存储器中开始执行用户代码
注意:厂商定义通讯协议下载程序可以有很多种,最常用的是 使用 USB 串口通信
(三)IAP(In Application Programing)
1.在应用编程:用户根据需要自定义 IAP 程序,在系统运行过程中更新程序
(1)与 ISP 不同的是,用户定义的 IAP程序是存放在主存储器中的
(2)IAP编程也是通过 ICP/ISP 方式下载到MCU中
2.烧录过程:ISP/ICP ——> MCU ——> IAP 程序 ——> Application 用户程序
(1)使用 ICP/ISP 方式烧录程序到 主存储器中,程序分为:IAP 程序 + Application 应用程序
(2)系统复位,执行主存储器中的 IAP程序,引导加载 将 Application 程序移到 指定地址
(3)系统根据 中断向量表 跳转执行 Application 程序
- 不使用 IAP时,中断向量表默认位置在主存起始位置,应用程序的起始地址是默认的
- 在 IAP 模式下,需要在 IAP 代码中重新设置中断向量表和应用程序的起始地址
3.IAP的常见应用是用来升级代码的,甚至远程升级代码
不使用 IAP 方式升级代码,会将原程序代码完全覆盖,可能造成不好的影响,且对用户不友好
(1)普通升级:利用外部存储介质存储升级代码,然后使用 IAP 程序将升级代码写到指定地址
(2)远程升级(OTA):利用网络协议远程升级固件代码
- 使用 Dowlander 区暂存升级固态代码,然后 IAR 程序检查 该区域是否有代码升级,然后写入
- 一些措施:加密检查、差分升级(补丁)、恢复分区、断点续传技术等等