前言
单片机的 BOOT0、BOOT1 两个引脚有什么作用?单片机的三种启动模式有什么区别?JTAG、SWD 是什么,有什么区别?单片机的下载方式有哪些?下面我们以 STM32 单片机为例,来解答这些问题。
启动模式
STM32 单片机可通过 BOOT0、BOOT1 两个引脚选择三种不同的启动模式,如下表所示:
BOOT0 | BOOT1 | 启动模式 | 说明 |
---|---|---|---|
0 | x | 从主闪存存储器启动 | 主闪存存储器是 STM32 内置的 Flash,该启动方式是让程序正常运行的启动方式。 |
1 | 0 | 从系统存储器启动 | 系统存储器是 STM32 内部的一块特定的 ROM,在 STM32 出厂时,由 ST 在这个区域预置了一段 BootLoader,用户无法修改。 |
1 | 1 | 从内置 SRAM 启动 | 内置 SRAM,既然是 SRAM,自然没有断电存储的能力,所以该模式一般用于程序调试。 |
需要注意的是,当 STM32 上电时,无论哪种启动模式,程序都将会从地址 0x0000 0000 开始执行,三种启动模式只是将各自的存储空间映射到地址 0x0000 0000。
调试接口
JTAG(Joint Test Action Group)和 SWD(Serial Wire Debug)是两种常用的调试接口,均可用于程序的下载和调试。
- JTAG 这个名字是由该标准的制定者 —— 联合测试行动小组(Joint Test Action Group)的名字缩写而来。它是一种标准化的测试接口,最初用于检测电路板上的连接错误,后来被广泛应用于芯片内部逻辑测试、边界扫描、调试和编程等领域。
JTAG 接口通常由 4 或 5 根信号线组成,分别是:- TCK(Test Clock):测试时钟线,提供同步时钟信号;
- TMS(Test Mode Select):测试模式选择线,用于控制 JTAG 状态机的转换;
- TDI(Test Data Input):测试数据输入线,用于向目标芯片发送数据;
- TDO(Test Data Output):测试数据输出线,用于从目标芯片接收数据;
- TRST(Test Reset)(可选):测试复位线,用于复位 JTAG 状态机。
- SWD(Serial Wire Debug)是一种两线调试接口,由 ARM 公司提出,用于替代 JTAG 接口,提高调试效率和降低成本。
SWD 接口只需要两根信号线,分别是:- SWCLK(Serial Wire Clock):串行时钟线,提供同步时钟信号;
- SWDIO(Serial Wire Data Input/Output):串行数据输入输出线,用于双向数据传输。
需要注意的是,玩单片机的还会经常见到 STLink、JLink、DAPLink、CMSIS DAP 等名词,这些属于是仿真器的类型,而不是调试接口。
下载方式
单片机的下载方式分为 ICP(In Circuit Programing)、ISP(In System Programing)和 IAP(In Application Programing)三种:
- ICP(In Circuit Programing):
在电路编程,使用 JTAG/SWD 等调试接口进行编程,如下图所示:
- ISP(In System Programming):
在系统编程,使用系统存储器中预置的 BootLoader 和外围 UART/SPI/IIC 等通讯接口进行编程,如下图所示:
- IAP(In Application Programming):
在应用编程,使用内置 Flash 中用户自定义的 BootLoader 和外围 UART/SPI/IIC 等通讯接口进行编程。这种方式将内置 Flash 分成了两个区域,一个区域用于存储用户自定义的 BootLoader,另一个区域用于存储真正需要运行的 APP 程序。如下图所示:
调试方式
- 在 Flash 中调试:
即将程序下载到内置 Flash 中进行调试,这是一般情况下 Keil、IAR 等集成开发环境默认的调试方式。 - 在 SRAM 中调试:
即将程序下载到内置 SRAM 中进行调试。这种调试方式具有下载速度快、不改写 Flash 中原有程序的优点,但是需要对 Keil、IAR 等集成开发环境进行相应的配置(具体如何配置此处不在展开),并且需要将 STM32 单片机的 BOOT0、BOOT1 两个引脚均拉高(从内置 SRAM 启动)。
在没有特殊需求的情况下,我们选择默认的在 Flash 中调试即可。在 SRAM 中调试虽然下载更快,但是操作比较繁琐。
总结
本篇文章依次讲述了启动模式、调试接口、下载方式、调试方式,下面来总结一下它们之间的对应关系,如下表所示:
下载与调试方式 | 对应的接口 | 对应的启动模式(BOOT0 BOOT1) |
---|---|---|
ICP | JTAG/SWD 等调试接口 | 从主闪存存储器启动(0 x) |
ISP | UART/SPI/IIC 等通讯接口 | 从系统存储器启动(1 0) |
IAP | UART/SPI/IIC 等通讯接口 | 从主闪存存储器启动(0 x) |
在 Flash 中调试 | JTAG/SWD 等调试接口 | 从主闪存存储器启动(0 x) |
在 SRAM 中调试 | JTAG/SWD 等调试接口 | 从内置 SRAM 启动(1 1) |
参考文章
https://blog.csdn.net/qq_46187594/article/details/107836761
https://blog.csdn.net/hbsyaaa/article/details/116141061
https://blog.csdn.net/weixin_43764974/article/details/131464428
https://blog.csdn.net/zyxhangiian123456789/article/details/79100920