一、串口烧录概述
什么是串口烧录
串口烧录,说白了就是通过串口(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怎么知道串口有没有数据?其实很简单,就是等一小段时间(比如几百毫秒),如果收到主机发来的特定握手信号,就进入烧录模式。超时没收到,就认为不需要烧录,直接跑应用程序。
避坑指南:我曾经遇到过一个问题——串口波特率不匹配导致烧录失败。主机设的是115200,但芯片Bootloader默认是9600,结果死活连不上。后来我养成了一个习惯:先看芯片手册,确认Bootloader默认波特率,再配置烧录工具。
好了,串口烧录的基本概念就讲到这里。记住三个关键词:Bootloader、串口协议、Flash编程。后面的章节我们会逐一深入讲解。