一、串口烧录概述

什么是串口烧录

串口烧录,说白了就是通过串口(UART)把固件写到芯片里去。你想想看,一个刚出厂的芯片,里面空空如也,啥也没有。你得想办法把程序塞进去,让它能跑起来。串口烧录就是最常用的一种方式。

我刚开始做嵌入式那会儿,用的最多的就是串口烧录。那时候JTAG调试器贵得要命,一根线就好几百。串口线呢?几块钱一根,遍地都是。所以很多产品出厂烧录,用的都是串口。

串口烧录的原理其实不复杂。芯片内部有一段固化好的启动代码(我们叫它Bootloader),上电后先跑这段代码。Bootloader会检测串口有没有数据过来,如果有,就按照约定好的协议接收固件,然后写到Flash里。就这么简单。

核心要点:串口烧录依赖芯片内部预置的Bootloader程序,它负责通过串口接收固件并写入存储介质。

串口烧录的应用场景

实际项目中,串口烧录的应用场景还挺多的。我列几个常见的:

  • 产线批量烧录:一条产线一天要烧几千片芯片,串口烧录成本低,工装好做。我见过一个工厂,用一台PC带8个串口,同时烧8块板子,效率还不错。
  • 现场固件升级:设备已经部署到客户现场了,总不能拆开壳子接JTAG吧?串口就方便多了,一根线插上去就能升级。
  • 开发调试阶段:原型验证时,串口烧录可以快速迭代。改一行代码,编译,烧录,看效果,整个流程也就十几秒。
  • Bootloader损坏恢复:嗯,这个我遇到过。有一次OTA升级把Bootloader搞坏了,设备变砖。还好预留了串口烧录接口,用工具重新刷了一遍Bootloader,救回来了。

我的建议:不管产品用不用串口烧录作为主要方式,都建议在硬件设计时保留串口烧录接口。关键时刻能救命。

串口烧录 vs JTAG/SWD烧录

很多新手会问:串口烧录和JTAG/SWD烧录到底有啥区别?哪个更好?

其实没有绝对的好坏,看场景。我做个表格对比一下:

对比项 串口烧录 JTAG/SWD烧录
硬件成本 低,只需TX/RX两根线 高,需要专用调试器
速度 较慢,通常115200bps~1Mbps 快,可达10Mbps以上
调试功能 无,只能烧录 支持断点、单步、变量查看
依赖条件 需要芯片预置Bootloader 需要芯片支持JTAG/SWD接口
适用阶段 量产、现场升级、恢复 开发调试、底层问题定位

你看,串口烧录的优势在于简单、便宜、通用。JTAG/SWD的优势在于功能强大、速度快。两者不是替代关系,而是互补关系。

我个人习惯是:开发阶段用JTAG/SWD调试,方便定位问题。量产和现场升级用串口烧录,成本低、操作简单。

注意:串口烧录虽然方便,但有个坑——它依赖Bootloader。如果Bootloader本身有bug,或者Flash里存的Bootloader被擦除了,串口烧录就废了。我曾经遇到过一批芯片,Bootloader版本有bug,导致串口烧录成功率只有70%。后来跟芯片原厂沟通,换了新版本的Bootloader才解决。

串口烧录的核心流程

为了让你更直观地理解串口烧录的全过程,我画了一张流程图:

串口烧录核心流程图 芯片上电复位 Bootloader启动 检测串口 是否有数据? 是 接收固件数据 (按协议解析) 写入Flash (校验+编程) 烧录完成 否 跳转到 应用程序 启动/初始化 条件判断 烧录流程 跳转应用

这张图把串口烧录的完整流程画出来了。核心就是:上电 → Bootloader启动 → 检测串口数据 → 有数据就接收固件并写入Flash,没有数据就跳转到应用程序执行。

你可能会问:Bootloader怎么知道串口有没有数据?其实很简单,就是等一小段时间(比如几百毫秒),如果收到主机发来的特定握手信号,就进入烧录模式。超时没收到,就认为不需要烧录,直接跑应用程序。

避坑指南:我曾经遇到过一个问题——串口波特率不匹配导致烧录失败。主机设的是115200,但芯片Bootloader默认是9600,结果死活连不上。后来我养成了一个习惯:先看芯片手册,确认Bootloader默认波特率,再配置烧录工具。

好了,串口烧录的基本概念就讲到这里。记住三个关键词:Bootloader、串口协议、Flash编程。后面的章节我们会逐一深入讲解。

可可精品资料库