一、什么是下载电路

单片机的下载电路是指用于将编写好的程序(固件)下载到单片机(微控制器)内部存储器的硬件电路。这个过程通常也被称为编程或烧录。下载电路包括与单片机的调试接口,以及相应的电路设计,确保数据可以稳定、可靠地传输到单片机的闪存或其他类型的存储器中。

二、单片机的“调试接口”

主流的调试接口主要有两种:JTAG(Joint Test Action Group) 和 SWD (Serial Wire Debug)。这些接口可以连接到外部调试器/编程器(如 ST-Link, J-Link……),用于程序下载和调试。
有关各种调试器以及调试接口,大多数初学者总是搞不清楚,我们可以把这团乱麻分成两个部分,一部分是计算机和单片机之间通信方式(调试接口),另一部分是充当单片机和计算机之间通信桥梁的硬件(调试器)。调试接口主流的有两种是JTAG 和 SWD。调试器主流的有J-Link系列、ST-LINK系列……,这些调试器大都同时支持JTAG 和 SWD,至于为什么明明我们烧录程序(SWD)只需几根线,但调试器上有一大堆引脚,这是因为调试器通常设计得足够灵活,以支持多种不同的调试和编程协议,以及适应各种不同的目标板需求。

JTAG 和 SWD有什么区别?我们应该选用哪一种?

JTAG接口

JTAG(Joint Test Action Group)是一种标准化的测试接口,最初被设计用于电路板的生产测试,后来其用途被扩展到了编程、调试和仿真等方面。JTAG接口的正式标准名称为IEEE 1149.1,它定义了在电路板和芯片级别上用于测试电路连通性的方法。

JTAG的特点

  • 测试访问端口(TAP):JTAG定义了一个测试访问端口,包括几个信号引脚,最主要的是TCK(测试时钟)、TMS(测试模式选择)、TDI(测试数据输入)和TDO(测试数据输出)。可选的第五个引脚是nTRST,用于异步复位TAP控制器。

  • TAP控制器:JTAG接口通过一个有限状态机(TAP控制器)来管理测试逻辑。这个状态机通过TCK和TMS来控制,通过不同的状态序列来完成不同的测试和编程操作。

  • 边界扫描:JTAG使用边界扫描寄存器来访问芯片的所有I/O引脚,从而可以测试芯片引脚之间以及多个芯片间的连通性。通过边界扫描,可以在不干扰芯片正常运行的情况下进行测试。

  • 链式结构:多个支持JTAG的设备可以通过串行连接,形成一个调试链。通过这种方式,可以同时对多个设备进行测试和调试,只需使用同一组TAP信号。

优点

  1. 多设备链:JTAG支持将多个设备连接在一个调试链上,可以同时对多个设备进行操作。
  2. 完备性:JTAG接口提供了对单片机所有功能的完全访问,包括芯片级测试和调试。

缺点

  1. 引脚数量:一个典型的JTAG接口需要至少4个引脚(TMS, TCK, TDI, TDO),加上一个可选的复位引脚(nTRST),这会占用更多的I/O资源。
  2. 复杂性:JTAG协议相对复杂,对于初学者来说可能不太容易掌握。
  3. 物理空间:由于需要更多的引脚,因此在板级设计中需要占用更多的空间。

引脚定义

JTAG引脚图:

SWD接口

SWD(Serial Wire Debug)是ARM推出的一种两线调试协议,旨在为ARM Cortex系列微控制器提供一种简洁而高效的调试接口。SWD作为JTAG的替代品,仅使用两个数据线,而非JTAG的四线或五线,它基于一个双向数据协议来实现数据传输和设备控制。

SWD接口的主要特点:

  1. 线数少:SWD最大的优点之一是它仅需要两条线,这对于小型化设备或者引脚受限的设计非常有利。

  2. 高效的数据传输:通过优化的协议和数据封装方式,SWD提供了与JTAG相媲美的数据传输效率。

  3. 简化的协议:SWD的协议设计较为简单,易于实现和调试。

  4. 调试和系统级调试(Debug and System Trace):SWD不仅支持调试,还可以与Serial Wire Viewer(SWV)和Serial Wire Output(SWO)等技术结合,提供系统级的跟踪功能。

SWD接口的引脚定义:

SWD接口主要包含以下引脚:

  1. SWCLK (Serial Wire Clock): 这是时钟信号线,用于同步数据传输。

  2. SWDIO (Serial Wire Debug Data I/O): 这是双向数据线,用于传输命令、地址和数据。

这两条线取代了JTAG的TCK, TMS, TDI和TDO。

可选的额外引脚包括:

  1. nRESET (Optional): 用于对目标设备执行硬件复位。

  2. SWO (Serial Wire Output, optional): 用于单向通信,如从目标设备传输跟踪数据到宿主机。

SWD的工作原理:

SWD使用一个16位的数据包来进行通信,每个数据包包括一个8位的头信息,后跟数据和校验位:

  • Start Bit:数据包的开始。
  • APnDP Bit:区分访问调试端口(DP)还是辅助端口(AP)。
  • RnW Bit:指示是读操作还是写操作。
  • A[2:3] Bits:两位地址,指示访问DP或AP的哪个寄存器。
  • Parity Bit:奇偶校验位,确保头部信息的完整性。
  • Stop Bit:数据包的结束。
  • Park Bit:固定为1,确保总线释放。

数据传输由SWCLK同步,而SWDIO在读写期间,根据需要切换其方向。在写操作中,主机会在SWDIO上发送数据,然后设备在随后的时钟周期中回复ACK响应。在读操作中,设备在接收到请求后,会在SWDIO上发送数据回主机。

使用SWD接口的优点:

  1. 引脚和空间节省:由于只需要两条线,SWD可以节省宝贵的PCB空间和微控制器的I/O资源。

  2. 调试效率:SWD提供了快速的调试能力,包括内存访问和寄存器操作。

  3. 易于布线:相较于JTAG接口的多线布线,SWD只需要考虑两条线的布局,简化了PCB设计过程。

  4. 实时追踪:结合SWO,SWD可以实现实时数据追踪和分析,对于性能调试非常有用。

缺点

  1. 链式调试有限:与JTAG不同,SWD不支持多个设备的链式连接,只能用于单个目标设备。
  2. 通用性较差:SWD主要是为ARM处理器设计的,其它架构的处理器可能不支持这种接口。

我应该选择哪一种?

因为我们制作的面相入门的STM32核心板,考虑到复杂的和物理体积的限制,我们可以毫无保留的选择SWD接口

电路分析



可以看到,SWD仅使用了四根线,大大节省了IO数量,简化了下载电路的设计,SWDIO和SWDCLK分别连接34、37引脚。这里的电容C1起到的作用是去耦,平滑供电线上的瞬时电压波动。