一、串口烧录概述:从一根线到一颗芯片的灵魂注入

大家好,我是你们的讲师。今天咱们聊聊串口烧录。说白了,就是把编译好的固件,通过串口这根物理链路,写进芯片的 Flash 或者 RAM 里。听起来简单,对吧?但这里面的门道,我做了十几年硬件,踩过的坑能绕实验室三圈。

你想想看,一个芯片刚焊到板子上,里面空空如也,跟白纸一样。你怎么让它跑起来?总得先把程序装进去吧。串口烧录,就是最基础、最通用的一种方式。

1.1 什么是串口烧录?

串口烧录,也叫 ISP(In-System Programming,在系统编程)。它利用芯片内部预置的 Bootloader(引导程序),通过 UART(通用异步收发器)接口接收数据,然后写入非易失性存储器。

嗯,这里要注意:芯片出厂时,厂商会在 ROM 里固化一段启动代码。上电后,如果检测到特定引脚电平(比如拉低 BOOT0),就会进入烧录模式。这时候,你的 PC 通过 USB 转串口工具,就能和芯片对话了。

核心流程:

  1. 芯片上电或复位,Bootloader 检查烧录条件。
  2. PC 端烧录软件(如 STM32 Flash Loader、ESP32 的 esptool.py)通过串口发送握手信号。
  3. 双方建立连接,协商通信参数(波特率、数据位等)。
  4. PC 将固件分包发送,芯片逐帧接收并写入 Flash。
  5. 校验完成后,芯片退出烧录模式,跳转到用户程序执行。

我个人习惯,把串口烧录比作「给芯片喂饭」。Bootloader 是嘴,串口线是勺子,固件就是饭。你得一口一口喂,不能噎着。

1.2 串口烧录的应用场景

串口烧录的应用场景,其实比你想的广得多。我随便列几个,你看看是不是都遇到过:

  • 产品原型验证: 刚画好的板子,焊好第一片样机。JTAG 接口没留?没关系,串口烧录就能搞定。我在项目中遇到过,客户急着看效果,PCB Layout 时忘了加 SWD 接口,全靠串口救场。
  • 小批量生产: 几十到几百台的量,用编程器一个个烧录太慢。串口烧录配合工装夹具,一次烧 4 片、8 片,效率翻倍。
  • 现场固件升级: 产品已经部署到客户现场了,总不能拆机壳焊线吧?串口(或者通过 RS-485 转串口)是唯一能远程升级的手段。我曾经给一个水表项目做过 OTA,底层就是串口烧录协议。
  • Bootloader 开发: 你自己写 Bootloader 时,第一版必须用串口烧录进去。然后才能通过这个 Bootloader 去升级应用程序。
  • 调试与诊断: 有些芯片的 Bootloader 支持读取 Flash 内容、修改选项字节。串口烧录工具也能当调试器用。
场景 典型芯片 波特率 备注
STM32 系列 STM32F103, STM32G0 115200 ~ 921600 需拉低 BOOT0
ESP32 系列 ESP32, ESP8266 115200 ~ 921600 自动下载电路
NXP LPC 系列 LPC1768, LPC11U68 9600 ~ 115200 ISP 引脚拉低
国产 RISC-V GD32, CH32 115200 ~ 256000 兼容 STM32 协议

小提示: 串口烧录的波特率不是越高越好。我见过有人用 921600 烧录,结果线长了点,数据就错。稳定第一,量产时我一般用 115200 或 256000。

1.3 串口烧录 vs JTAG vs SWD

很多新手会问:既然有 JTAG 和 SWD,为什么还要用串口烧录?这个问题问得好。咱们来掰扯掰扯。

JTAG(Joint Test Action Group,联合测试行动组): 标准 5 线接口(TMS, TCK, TDI, TDO, nTRST)。功能最强,不仅能烧录,还能在线调试、边界扫描。但缺点也明显:占用引脚多,布线麻烦。

SWD(Serial Wire Debug,串行线调试): ARM 公司搞的简化版,2 线接口(SWDIO, SWCLK)。保留了 JTAG 的调试能力,但引脚少了一半。现在主流 ARM 芯片都支持。

串口烧录: 只需要 TX、RX 两根线(加上 GND 共 3 根)。成本最低,但功能也最弱——只能烧录,不能单步调试。

你想想看,JTAG 和 SWD 就像手术刀,精密但昂贵。串口烧录就像螺丝刀,简单但够用。选哪个,看你的场景。

避坑指南: 我曾经在一个量产项目上,为了省成本,只留了串口烧录接口。结果有一批芯片 Bootloader 损坏,串口烧录死活连不上。最后只能拆芯片下来用编程器重写。从那以后,我设计的板子至少会保留 SWD 接口,哪怕不焊座子,也要留测试点。

下面这张图,帮你理清三者的关系:

串口烧录 vs JTAG vs SWD 对比图 烧录方式对比 串口烧录 (ISP) JTAG SWD 引脚:TX, RX, GND (3线) 功能:仅烧录 速度:中 (115200~921600) 成本:最低 引脚:TMS,TCK,TDI,TDO (5线) 功能:烧录+调试+边界扫描 速度:高 (10MHz~100MHz) 成本:高 (需专用调试器) 引脚:SWDIO, SWCLK (2线) 功能:烧录+调试 速度:高 (10MHz~50MHz) 成本:中 (需调试器) 总结:串口烧录适合量产和现场升级 JTAG/SWD 适合研发调试,功能更强大

我个人的经验是:研发阶段用 SWD,量产阶段用串口烧录。 为什么?研发时你需要单步调试、看变量、设断点,SWD 是刚需。量产时,你只需要把固件灌进去,串口烧录成本低、速度快、接口简单,工装也好做。

但话说回来,串口烧录也有它的局限性。比如:

  • 依赖 Bootloader: 如果 Bootloader 被擦除了或者损坏了,串口烧录就废了。这时候只能上编程器。
  • 速度瓶颈: 再快也就 1Mbps 左右,跟 JTAG 的几十 MHz 没法比。烧录大固件(比如 2MB 以上)时,等得让人心焦。
  • 无调试能力: 烧录进去跑飞了,你只能干瞪眼。串口打印是唯一的调试手段。

一句话总结: 串口烧录是嵌入式开发的「基本功」,简单、可靠、低成本。JTAG/SWD 是「进阶工具」,强大、灵活、高成本。两者不是替代关系,而是互补关系。一个合格的嵌入式工程师,两种方式都得会。