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

前言

我们常见的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 内存中启动代码,进行快速的程序调试,等程序调试完成后,再将程序烧录
  • 61
    点赞
  • 285
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
nanoDAP-wl 是实验室推出的基于cmsis-dap的无线调试器,即插即用,速度快,支持虚拟串口。无线调试器包括发射机/接收机,基于2.4G无线通信,可对10m范围内的目标进行调试下载、单步调试等操作,在某些有线仿真器不便调试的场景,如目标始终处于移动状态(飞行器、小车、机器人等),目标已经组装成产品形态,并且已安装在墙上或者高处等。此时使用无线调试器能较好的解决这些场景下调试问题,有效提高研发效率。 产品特点 使用极简,PC端无需安装额外软件,只需将发射机和接收器分别上电,等待连接成功,即可开始调试 支持SWD协议,典型的基于ARM Cortex-M系列芯片均支持SWD调试,常见的芯片如STM32系列,GD32系列,ATMEL-SAM系列,NORDIC-NRF51/52系列,NXP-LPC系列等芯片均支持SWD调试下载 支持JTAG协议,配合开源调试器OpenOCD可支持全球范围内几乎所有SoC芯片的调试,如ARM Cortex-A系列、DSP、FPGA、MIPS等,因为SWD协议只是ARM自己定义的私有协议,而JTAG则是国际IEEE 1149标准 支持虚拟串口,而且支持同时进行仿真调试和串口输出 接收机支持向目标板供电(5V、3.3V),以及从目标板取电(5V、3.3V)两种方式进行工作 支持MDK/IAR/OpenOCD,支持Windows/Linux/Mac 下进行调试开发 软件基于CMSIS-DAP实现,使用USB HID协议,无需安装驱动即可下载调试 v1.0版本硬件开源、固件开放,可供爱好者自行制作 使用场景用于调试飞行器,小车,机器人,由于调试目标为通常处于移动状态,若使用传统下载器不仅下载比较麻烦,而且无法进行单步调试。 目标板已经组装好外壳,成为产品形态,此时传统的有线方式不便调试。 产品安装在高处,如路灯、高塔等位置,此时使用有线方式不便调试。 产品链接(见附件) 说明 nanoDAP-wl v1.0 版本硬件开源,供爱好者自行制作研究。 固件针对个人开放,请大家加入QQ群 698319017 向群主索取。 更多信息 更多详情,用户手册和原理图等,请在https://github.com/wuxx/nanoDAP-wireless查看。 感兴趣的朋友请加入QQ群 698319017 研究讨论学习。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

流云IoT

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

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

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

打赏作者

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

抵扣说明:

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

余额充值