ARM 代码烧录方案与原理详解 --- SWD/JTAG + Bootloader + OTA (ICP + ISP + IAP)

本文详细介绍了ARM MCU的代码烧录方式,包括ICP(在电路编程)、ISP(在系统编程)和IAP(在应用编程)。讲解了JTAG和SWD接口的区别,以及STM32的Bootloader和OTA空中升级原理。此外,还探讨了Bootloader如何通过UART和USB接口实现代码烧录,以及如何通过IAP实现在系统运行过程中更新代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

我们常见的MCU / CPU 代码烧录方式主要有以下三种:

  • ICP(In Circuit Programing):在电路编程,可通过CPU的Debug Access Port 烧录代码,比如ARM Cortex的Debug Interface主要是SWD(Serial Wire Debug)或JTAG(Joint Test Action Group);
  • ISP(In System Programing):在系统编程,可借助MCU厂商预置的Bootloader 实现通过板载UART或USB接口烧录代码,比如STM32存储映射Code分区中的System memory可以预置厂商的Bootloader,让MCU支持通过UART下载(不限于UART,具体由厂商预置Bootloader实现而定);
  • IAP(In Applicating Programing):在应用编程,由开发者实现Bootloader功能,比如STM32存储映射Code分区中的Flash本是存储用户应用程序的区间(上电从此处执行用户代码),开发者可以将自己实现的Bootloader存放到Flash区间,MCU上电启动先执行用户的Bootloader代码,该代码可为用户应用程序的下载、校验、增量/补丁更新、升级、恢复等提供支持,如果用户代码提供了网络访问功能,IAP 还能通过无线网络下载更新代码,实现OTA空中升级功能。

一、ICP 与 JTAG / SWD

ICP 主要通过CPU的DAP(Debug Access Port) 烧录代码,下面以ARM Cortex-M3/M4 为例,展示Debug Interface 如下:
Cortex-M3/M4 Debug Interface
ARM Cortex 内部包含了CoreSight 调试架构,CoreSight 包括调试接口协议、调试总线协议、对调试组件的控制、安全特性、跟踪接口等。以前的ARM 处理器都提供JTAG 接口,通过它来控制对寄存器和存储器的访问,CoreSight 则通过DAP(Debug Access Port) 来控制处理器上的总线逻辑。从上图也可以看出,CoreSight 除了提供Debug Interface,还提供了Trace Interface,Trace Interface 主要用来观察数据中间值的变化、跟踪指令的执行状态等,只能单向读取跟踪数据,属于非侵入式调试,不能用于烧录代码,因此本文不对此做过多介绍。

ARM Cortex 目前支持两种Debug Interface:

  • SW-DP (Serial Wire - Debug Port):新提供的串行线调试接口SWD,只需要两条信号线(SWCLK、SWDIO);
  • JTAG-DP (Joint Test Action Group - Debug Port):广为使用的联合调试接口JTAG,至少需要四根信号线(JTCK、JTMS、JTDI、JTDO,JTRST 为可选信号线);
  • SWJ-DP (SW + JTAG - DP):支持SW-DP 与 JTAG-DP 两种接口协议。

STM32 同时支持SW-DP 和 JTAG-DP,也即支持的是SWJ-DP 调试接口协议,STM32-L4 的SWJ Debug Port 如下图所示:
SWJ-DP结构框图
从上图中可以看出,JTAG-DP 与SW-DP 两个接口都需要提供Clock 驱动信号,二者的数据传输引脚不同,SW-DP 接口使用半双工的SWDIO 引脚传输数据,JTAG-DP 接口使用两个单工的JTDI 和JTDO 引脚组成全双工通信。JTAP-DP 除了时钟引脚和数据传输引脚外,还有个重要的引脚JTMS 测试模式选择引脚,可以控制TAP(Test Access Port) 状态机的切换,JTRST 主要用来对TAP 状态机进行复位,为可选引脚(因此有四线JTAG 与五线JTAG 之分),JTMS 也可以实现TAP 状态机的复位。JTAG-DP 与SW-DP 引脚的功能描述如下:
JTAG与SWD 引脚定义
早期的MCU 是可插拔的,向其内烧录代码时常需要将其拔下来,借助烧录器或仿真调试器通过Debug Interface 将代码烧录进MCU 后,再把芯片插回到电路板上。后来MCU 直接焊接在电路板上,电路板上直接引出了Debug Interface,比如常见的JTAG 和 SWD 接口,可以借助JLINK 或 STLINK 等仿真器,通过JTAG 或 SWD 接口直接将代码烧录到MCU 中,省去了MCU 插拔操作,方便了代码烧录和调试操作。

不同的IC 厂家会自己定义自家产品专属的JTAG 接口,来下载和调试程序。嵌入式系统中常用的有20pin、14pin、10pin 等JTAG 接口类型,不同类型的JTAG 接口都包含前面提到的五个引脚,另外包括VRef 和 GND 等引脚,它们的不同之处主要在于GND引脚的数量、一些用户自定义引脚、保留引脚等。一般JTAG 接口同时支持 SWD 接口,但有些主板受空间限制,只提供了SWD 接口,只需要四个引脚,大大节约了空间。
JTAG与SWD 20pin接口有效引脚
IC 厂家提供的部分开发板上直接集成了 JLINK 或STLINK 模块,相当于将JLINK / STLINK 仿真器内置到开发板上了(比如STM32L4 Pandora 或 NRF52 DK),不再需要额外的仿真器(也不再需要板载JTAG 或 SWD 接口),直接通过USB 线连接电脑,就可以方便的进行代码烧录和调试,对于手头没有仿真器的开发者更加友好,毕竟正版仿真调试器价格还是有点贵的。

二、ISP 与 Boot Mode

ISP 可以通过USB接口(可以是UART协议或USB协议等)直接烧录代码,ARM Cortex 提供的Debug Interface 并不支持UART 或USB 协议,这就需要IC 厂商预置UART 协议或USB 协议代码,让MCU / CPU 支持UART 通讯或USB 通讯。UART 协议比较简单、传输速率比较低,比如STM32 这类MCU 支持UART 协议烧录代码;USB 协议相对复杂、传输速率比较高,比如高通骁龙这类CPU 支持USB 协议烧录代码。

以STM32 为例,先看看有哪些启动模式:
STM32 Boot Modes
STM32 有三种Boot modes 开始执行代码:

  • Main Flash memory:STM32内置的Flash,一般我们使用JTAG / SWD 烧录代码都是直接烧录到这个存储区间,重启后也直接从这里的代码开始执行;
  • System memory:这种模式启动的程序功能是由厂家设置的,STM32 在出厂时由ST 在这个存储区间内部预置了一段BootLoader(也即ISP 程序),这段程序出厂后无法修改。厂家提供的BootLoader 一般支持UART 协议,可以让我们直接通过串口将程序代码烧录到Main Flash memory 中;
  • SRAM1:这个启动模式一般用于程序调试,假如我只修改了代码中一个很小的地方,重新烧录到Flash比较费时,可以从STM32 内存中启动代码,进行快速的程序调试,等程序调试完成后,再将程序烧录到Main Flash memory 中。

Main Flash memory、System memory、SRAM1 的存储区间分布如下图所示(在博文:存储管理与虚拟内存中也有介绍):

### 回答1: STM32F103C8T6是一款性能强大的单片机芯片,具有丰富的功能和广泛的应用场景。在使用STM32F103C8T6芯片进行固件升级时,可以使用BootloaderIAPOTA等技术。 Bootloader是一段预先编写的代码,它位于芯片的内部存储器中,用于引导系统启动。它可以通过外部介质(如串口,USB等)接收升级文件,并将其写入芯片的Flash存储器中。这样,在下次启动时,新的固件将被加载和运行,实现固件升级的目的。 IAP则是In-Application Programming的缩写,意为应用内编程。它提供了一种在运行状态下编程芯片的方法,而无需将芯片链接到外部编程工具。使用IAP技术,可以通过应用程序控制,将固件程序写入芯片的Flash存储器中,实现在线升级功能。 OTA是Over-The-Air的简称,指通过无线网络进行固件的远程升级。使用OTA技术,可以通过无线通信(如WiFi、蓝牙等)将新的固件文件传输到芯片中,实现在线固件升级,而无需将芯片外部设备物理连接。 综上所述,STM32F103C8T6芯片可以通过BootloaderIAPOTA等技术实现固件的升级。Bootloader适用于通过外部介质进行升级,IAP适用于在运行状态下应用内编程,而OTA则适用于通过无线网络进行远程升级。这些技术为STM32F103C8T6芯片的开发者提供了便利,使其能够灵活、高效地进行固件的升级。 ### 回答2: STM32F103C8T6是一款基于ARM Cortex-M3内核的微控制器,具有丰富的外设和强大的计算能力。在这个型号中,"bootloader"、"IAP"和"OTA"是三个软件加载和更新相关的概念。 Bootloader是一段位于Flash内存中的程序代码,是系统启动时首先执行的部分。它提供了一些常用功能,如初始化硬件、检查Flash内存中是否存在可执行的固件代码等。同时,Bootloader还负责判断是否需要进行固件的更新,如果需要,它可以将新的固件程序加载到Flash中,然后跳转到更新后的程序IAP(In-Application Programming)是一种在应用程序运行时,通过软件的方式进行Flash存储器的编程,实现了固件的更新。相对于传统的烧录方式,它更加灵活方便,可以在不拆卸芯片的情况下对系统进行升级或修复。 OTA(Over-The-Air)则是通过无线网络将固件更新推送到设备中,无需物理连接即可实现远程升级。OTA主要用于各种智能设备,如手机、智能家居设备等。通过OTA,用户可以方便地更新和升级设备固件,提供了更好的用户体验。 综上所述,STM32F103C8T6可以利用Bootloader实现IAP,也可以通过OTA方式进行固件的远程升级。这些功能为开发者和用户提供了灵活、方便的固件加载和更新方式,使得系统的维护和升级变得更加便捷。 ### 回答3: STM32F103C8T6是STMicroelectronics公司推出的一款高性能ARM Cortex-M3内核的微控制器。它具有丰富的外设接口和强大的计算能力,在嵌入式系统领域得到广泛应用。 Bootloader是一种固件程序,用于启动设备并加载操作系统或其他应用程序。STM32F103C8T6微控制器上的Bootloader主要用于引导系统,可以从不同的存储介质(如闪存、外部Flash等)加载不同的固件程序IAP(In-Application Programming)是一种通过应用程序对设备进行编程的技术。在STM32F103C8T6微控制器中,IAP可以通过串口或其他通信接口进行固件更新,而无需通过外部编程器或者JTAG/SWD接口。 OTA(Over-The-Air)是一种通过无线网络进行固件更新的技术。在STM32F103C8T6微控制器中,OTA可以实现无线下载和安装固件更新,而无需将设备计算机连接。这为设备的远程维护提供了方便和灵活性。 综上所述,STM32F103C8T6微控制器具有BootloaderIAPOTA等功能。通过Bootloader可以引导系统并加载不同的固件程序,而IAP技术可以通过应用程序进行固件更新,OTA技术则实现了无线网络的固件更新。这些功能使得STM32F103C8T6微控制器在嵌入式系统领域具有更强大的应用和扩展能力。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流云IoT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值