1、烧录基础认知:串口烧录原理、常见协议对比、硬件接线规范

大家好,我是你们的嵌入式讲师。今天咱们聊聊串口烧录这件事。

说实话,我刚入行那会儿,烧录程序就是插上USB转串口线,点一下下载按钮完事。后来踩了不少坑,才明白这里面门道挺多。你想想看,一个产品量产时,烧录效率直接决定了你的产能和成本。所以,把基础打扎实了,后面才能快起来。

1.1 串口烧录到底在干什么?

串口烧录,说白了就是通过串行通信接口,把编译好的固件(二进制文件)传输到芯片的Flash或ROM里。

为什么用串口?因为简单、通用、成本低。几乎所有的MCU都带UART接口,不需要额外的编程器。你只需要一根USB转TTL线,就能搞定。

我个人的理解是:烧录过程就像给芯片“喂饭”。PC是厨师,芯片是婴儿,串口就是勺子。你得按正确的节奏、正确的格式,一口一口喂进去。

核心流程:

  1. PC端烧录软件读取固件文件(.hex / .bin)
  2. 通过UART发送握手信号,唤醒芯片的Bootloader
  3. 双方协商通信参数(波特率、数据位、校验位)
  4. PC按固定协议分包发送固件数据
  5. 芯片接收并写入Flash,每包回复确认
  6. 全部发送完毕,芯片校验并跳转到用户程序

这里有个关键点:Bootloader。芯片出厂时内部有一段固化的启动代码,它负责检测烧录条件(比如某个引脚电平、串口数据)。检测到了就进入烧录模式,否则直接运行用户程序。

我在项目中遇到过一个问题:某次量产时,有5%的板子烧录失败。排查了半天,发现是Bootloader的检测窗口太短,串口握手信号没来得及响应。后来我调整了上电时序,问题就解决了。嗯,细节决定成败。

1.2 常见协议对比:UART、ISP、DFU

很多人把UART、ISP、DFU混为一谈。其实它们不是一个层面的东西。我习惯这样区分:

  • UART:物理层通信协议,定义了电平、波特率、帧格式
  • ISP:一种烧录方式,利用芯片内置Bootloader通过串口烧录
  • DFU:另一种烧录方式,通常通过USB接口,由芯片的DFU模式实现

下面这张表是我自己整理的,你一看就明白:

特性 UART(串口烧录) ISP(在系统编程) DFU(设备固件升级)
物理接口 TX/RX/GND UART/SPI/I2C USB
是否需要外部编程器 否(USB转TTL即可) 否(依赖芯片Bootloader) 否(USB直连)
速度 较慢(通常115200~921600bps) 取决于接口(SPI可更快) 较快(USB 2.0全速12Mbps)
适用场景 开发调试、小批量 量产、现场升级 消费电子产品、USB设备
典型芯片 STM32、ESP32、ATmega STM32、NXP LPC STM32 DFU、nRF52

你可能会问:“那我该用哪个?”

我的建议是:开发阶段用UART串口烧录,简单直接,出问题了容易排查。量产阶段用ISP,因为可以配合自动化夹具,效率高。产品上市后升级用DFU,用户插上USB就能更新,体验好。

小技巧: 如果你用STM32,可以同时保留UART和DFU两种方式。开发时用UART,出货前切到DFU。我之前的项目就是这么干的,省了不少事。

1.3 硬件接线规范——别让线毁了你

接线看起来简单,但80%的烧录问题都出在这里。我曾经因为一根杜邦线接触不良,排查了整整一个下午。后来我总结了一套规范,分享给你:

1.3.1 标准接线

  • GND → GND:必须接,共地是通信的基础
  • TX → RX:PC的发送接芯片的接收
  • RX → TX:PC的接收接芯片的发送
  • VCC(可选):如果USB转TTL模块能输出3.3V/5V,可以给目标板供电。但我不建议这么做——万一电流不够,板子会异常重启。

警告: 千万不要把TX和TX直接连在一起!我见过有人接反了,还问为什么烧录失败。TX接TX,两边都在说话,没人听,能成功才怪。

1.3.2 电平匹配

这是个大坑。很多USB转TTL模块默认输出5V电平,但现在的MCU很多是3.3V甚至1.8V。直接接上去,轻则通信异常,重则烧毁芯片IO口。

我的做法是:

  • 确认目标板的工作电压
  • 使用支持电平转换的烧录器(比如FT232、CP2102带电平选择)
  • 或者加一个电平转换模块(TXS0108、BSS138)

1.3.3 线长与干扰

串口烧录的线最好不要超过20cm。线越长,信号衰减越严重,误码率越高。尤其是在高波特率下(比如921600),线长超过30cm基本就废了。

我量产时用的都是定制排线,长度控制在10cm以内,屏蔽层接地。效果很好,几乎没有烧录失败的情况。

1.3.4 特殊引脚处理

有些芯片需要拉高或拉低特定引脚才能进入烧录模式。比如:

  • STM32:BOOT0拉高,BOOT1拉低
  • ESP32:GPIO0拉低,EN拉高
  • ATmega328P:RESET拉低再释放

这些细节一定要看芯片手册。我见过有人把ESP32的GPIO0直接接地,结果芯片一直处于下载模式,永远跑不了用户程序。

1.4 知识体系总览

为了让你更直观地理解这一章的内容,我画了一张图:

串口烧录基础认知知识体系 烧录原理 • PC读取固件文件 • 握手信号唤醒Bootloader • 协商通信参数 • 分包发送固件数据 • 芯片写入Flash • 校验并跳转程序 关键:Bootloader检测窗口 协议对比 • UART:物理层协议 • ISP:在系统编程 • DFU:设备固件升级 速度对比: UART: 115200~921600bps ISP: 取决于接口 DFU: USB 12Mbps 建议:开发用UART,量产用ISP 硬件接线规范 • GND→GND(必须) • TX→RX,RX→TX • 电平匹配(3.3V/5V) • 线长<20cm • 特殊引脚处理 避坑:TX接TX必失败 避坑:电平不匹配烧芯片 核心:理解原理 → 选对协议 → 规范接线 → 高效烧录

这张图把三个核心模块串起来了。你从原理出发,理解烧录的本质;然后对比协议,选对工具;最后规范接线,避免低级错误。这三步走扎实了,烧录效率自然就上来了。

我的经验: 刚开始学的时候,别急着追求速度。先拿一块开发板,用串口手动烧录一次,观察每个步骤的波形和日志。你亲手走一遍流程,比看十遍文档都管用。

好了,这一章就到这里。记住:烧录是嵌入式开发的“最后一公里”,这公里跑顺了,后面的路就好走了。

可可精品资料库