一、串口烧录基础:串口通信原理、波特率概念、烧录流程概述

大家好,我是你们的嵌入式讲师。今天咱们聊聊串口烧录这件事。说实话,我入行那会儿,串口烧录可是基本功中的基本功。现在虽然工具越来越智能,但底层原理不懂,出了问题照样抓瞎。

串口烧录,说白了就是通过串口把程序写进芯片里。你想想看,芯片出厂时里面空空如也,总得有个方式把代码灌进去吧?串口就是最经典、最通用的方式之一。

串口通信原理

串口通信,全称叫串行通信接口。它一次只传一个比特,就像单车道公路,车一辆一辆过。与之相对的是并口,一次传多个比特,像八车道。但串口布线少、成本低、抗干扰强,所以嵌入式领域用得特别多。

串口通信有三根线就够了:

  • TXD(发送端)—— 数据发出去
  • RXD(接收端)—— 数据收进来
  • GND(地线)—— 共地,保证电平参考一致

注意啊,两个设备连接时,TXD要接对方的RXD,RXD接对方的TXD。这个叫交叉连接。我见过不少新手把TXD接TXD、RXD接RXD,结果死活通信不上。嗯,这个坑我当年也踩过。

串口通信的格式是这样的:

起始位(1位) + 数据位(5~8位) + 校验位(可选) + 停止位(1~2位)

举个例子,你发一个字符'A'(ASCII码0x41),串口会先拉低电平表示"我要开始发了",然后依次送出8个数据位,最后拉高电平表示"发完了"。接收端就按这个节奏把数据收下来。

核心要点:串口通信是异步的,没有时钟线。收发双方靠约定的波特率来同步节奏。所以波特率必须一致,否则数据就乱了。

波特率概念

波特率,就是每秒传输的比特数。单位是bps(bits per second)。常见的波特率有:

波特率(bps) 每比特时长(us) 常见应用场景
9600 104.2 调试信息输出、低速设备
115200 8.68 常用烧录速率、传感器通信
921600 1.09 高速烧录、大文件传输

我个人习惯,调试阶段先用9600,稳定后再切到115200。为什么?因为波特率越高,对时钟精度要求越高。有些便宜的晶振或者内部RC振荡器,跑高速时误差会变大,导致通信失败。

我曾经在一个项目里,用内部RC振荡器跑921600波特率,结果10片里有3片烧录失败。查了半天,发现是晶振频率偏差太大。后来降到115200,问题就解决了。所以啊,别一味追求高速,稳定才是王道。

小技巧:计算波特率误差的公式:误差 = (实际波特率 - 目标波特率) / 目标波特率 × 100%。一般要求误差在±2%以内,超过这个范围就容易丢数据。

烧录流程概述

串口烧录的流程,其实就三步:握手、传输、校验。我画了个流程图,方便大家理解:

串口烧录流程图 1. 硬件连接 TXD/RXD/GND交叉连接 2. 握手协议 同步波特率,确认芯片状态 3. 数据传输 按包发送固件数据 4. 校验完成 CRC校验,写入完成标志 ⚠️ 常见问题 • 波特率不匹配 • 接线错误 • 芯片未进入烧录模式 • 电源供电不足 • 串口驱动未安装 • 线缆过长信号衰减 • 电平不匹配(3.3V/5V) • 软件串口号选错 • 流控设置错误 • 固件格式不对 • 芯片锁死(需要解锁)

具体来说:

  1. 硬件连接:把烧录器或USB转串口模块接到目标板。注意电平匹配,3.3V的芯片别接5V的串口,会烧的。我建议用带电平转换的模块,省心。
  2. 握手协议:上位机软件发一个特定命令,比如0x7F,芯片收到后回复一个确认码。这一步是为了确认通信链路正常,同时让芯片进入烧录模式。
  3. 数据传输:把固件分成一个个数据包,每包通常256字节或512字节。发完一包,芯片回复ACK,再发下一包。如果收到NAK,就重发。这个机制叫"停等协议",简单可靠。
  4. 校验完成:所有数据发完后,上位机发一个校验命令,芯片计算CRC或累加和,跟上位机比对。一致的话,写入完成标志,然后复位运行新程序。

⚠️ 重要提醒:烧录过程中千万别断电!我见过有人烧到一半拔电源,结果芯片变砖,得用专用工具才能救回来。另外,串口线不要太长,超过2米就容易受干扰。实在要长距离,用RS485转一下。

好了,串口烧录的基础就这些。说白了就是:连好线、对上暗号、传数据、验结果。后面我们会深入讲每个环节的调优技巧,比如怎么提高烧录速度、怎么处理异常情况。这些东西,都是我在项目里一点点踩坑踩出来的经验。

记住一句话:串口烧录看似简单,但细节决定成败。一个波特率误差、一根接触不良的杜邦线,都能让你折腾半天。所以,打好基础,后面才能飞得起来。

个人经验:我习惯在烧录前先发一个"空测试"——就是只握手不烧录,确认通信正常后再开始正式烧录。这个习惯帮我避免了很多次"烧了半天发现线没接好"的尴尬。

可可精品资料库