3、串口烧录工具实战:MobaXterm、SecureCRT与Python pyserial

说到串口烧录,很多新手第一反应就是「找个工具,点一下发送文件」。嗯,理论上没错。但实际量产时你会发现——工具选不对,效率少一半;脚本写不好,加班到通宵。

今天我就把这三款工具掰开揉碎了讲。MobaXterm适合快速调试,SecureCRT适合稳定量产,Python pyserial则是自动化烧录的终极武器。咱们一个一个来。

3.1 用MobaXterm进行串口烧录

MobaXterm这工具,我个人很喜欢。它集成了终端、串口、SFTP,甚至还有个X服务器。做嵌入式开发时,一个窗口全搞定。

第一步:打开串口会话

点击「Session」→「Serial」,然后设置参数:

  • 波特率:115200(常用,具体看芯片手册)
  • 数据位:8
  • 停止位:1
  • 校验位:None
  • 流控:None

第二步:进入烧录模式

大多数芯片需要先拉低某个引脚(比如BOOT0)再上电。我习惯在MobaXterm里先敲个回车,看看有没有反应。如果出现「C」或者「等待下载」之类的提示,说明芯片已经就绪。

小技巧: 在MobaXterm里,右键粘贴特别方便。我经常把烧录指令提前写好,复制粘贴就行,省得手敲出错。

第三步:发送固件

MobaXterm没有内置的YMODEM/XMODEM协议按钮?别急。你可以用外部工具配合。比如用lrzsz工具包:

# 在MobaXterm的本地终端里执行
sz -b firmware.bin > /dev/ttyUSB0 < /dev/ttyUSB0

或者直接用cat命令把二进制文件怼过去:

cat firmware.bin > /dev/ttyUSB0

不过说实话,MobaXterm更适合调试阶段。量产时用它一个个点,手会抽筋的。

3.2 用SecureCRT进行串口烧录

SecureCRT是老牌工具了。我十年前刚入行时就在用。它稳定、脚本功能强,很多工厂的产线都在用。

配置串口连接

打开SecureCRT,点击「Quick Connect」:

  • Protocol: Serial
  • Port: COM3(根据实际端口选)
  • Baud rate: 115200
  • 勾选「RTS/CTS」?不,量产时建议关掉流控,否则容易卡死
注意: 我曾经在产线上遇到过一个问题——SecureCRT明明配置对了,但就是发不了数据。查了半天,发现是USB转串口线的驱动版本太旧。嗯,驱动问题永远是第一排查点。

使用脚本实现自动烧录

SecureCRT支持VBScript和Python脚本。我一般用VBScript写个简单的循环:

# $language = "VBScript"
# $interface = "1.0"

Sub Main
    Dim objTab
    Set objTab = CRT.GetScriptTab
    
    ' 发送烧录指令
    objTab.Screen.Send "loadbin 0x08000000" & vbCr
    objTab.Screen.WaitForString "Ready to download"
    
    ' 发送固件文件
    objTab.SendFile "firmware.bin", "YMODEM"
    
    ' 等待烧录完成
    objTab.Screen.WaitForString "Download OK"
    
    ' 复位芯片
    objTab.Screen.Send "reset" & vbCr
End Sub

这个脚本在产线上跑了两年,烧了十几万片芯片,没出过问题。稳定,是真的稳定。

3.3 用Python pyserial实现自动烧录脚本

如果你问我,量产烧录最推荐的方案是什么?我的答案是:Python + pyserial。原因很简单——可控、可定制、可集成到CI/CD流水线。

安装pyserial

pip install pyserial

基础烧录脚本框架

import serial
import time
import struct

def calculate_checksum(data):
    """计算校验和,很多芯片协议需要"""
    return sum(data) & 0xFF

def send_firmware(port, baudrate, firmware_path):
    """
    串口烧录固件
    :param port: 串口号,如 'COM3' 或 '/dev/ttyUSB0'
    :param baudrate: 波特率
    :param firmware_path: 固件文件路径
    """
    ser = serial.Serial(
        port=port,
        baudrate=baudrate,
        bytesize=8,
        parity='N',
        stopbits=1,
        timeout=5
    )
    
    # 等待芯片就绪
    print("等待芯片进入烧录模式...")
    time.sleep(2)
    ser.write(b'\r\n')
    response = ser.read(100)
    
    if b'C' not in response:
        print("芯片未就绪,请检查硬件连接")
        ser.close()
        return False
    
    # 读取固件
    with open(firmware_path, 'rb') as f:
        firmware_data = f.read()
    
    # 发送固件(以YMODEM协议为例)
    # 实际协议需要根据芯片手册调整
    print(f"开始发送固件,大小:{len(firmware_data)} 字节")
    
    # 这里简化处理,实际需要实现完整协议
    chunk_size = 128
    for i in range(0, len(firmware_data), chunk_size):
        chunk = firmware_data[i:i+chunk_size]
        # 发送数据包
        ser.write(chunk)
        time.sleep(0.01)
        
        # 读取ACK
        ack = ser.read(1)
        if ack != b'\x06':  # ACK
            print(f"发送失败,位置:{i}")
            ser.close()
            return False
    
    print("固件发送完成")
    ser.close()
    return True

if __name__ == '__main__':
    success = send_firmware('COM3', 115200, 'firmware.bin')
    if success:
        print("烧录成功!")
    else:
        print("烧录失败!")
核心要点:
  • 协议实现要完整——很多芯片有握手、校验、重传机制
  • 超时设置要合理——太短容易误判失败,太长浪费产线时间
  • 日志要详细——出问题时能快速定位

量产增强版脚本

在实际产线中,我还会加入以下功能:

  • 自动检测串口:遍历所有可用串口,找到目标芯片
  • 烧录次数统计:记录成功/失败次数,生成报表
  • 多线程并行烧录:一个工位同时烧4块板子
  • 校验机制:烧录完成后读回校验,确保数据正确
def auto_detect_port(vid_pid_list):
    """自动检测指定VID/PID的串口"""
    import serial.tools.list_ports
    ports = serial.tools.list_ports.comports()
    for port in ports:
        for vid_pid in vid_pid_list:
            if vid_pid in port.hwid:
                return port.device
    return None
避坑指南: 我曾经在产线上遇到一个诡异问题——烧录10片后有1片校验失败。查了三天,发现是USB延长线太长导致信号衰减。后来换成带屏蔽的短线,问题解决。嗯,硬件问题往往最隐蔽。

三种工具对比总结

工具 适用场景 优点 缺点
MobaXterm 开发调试、小批量 界面友好、集成度高 自动化能力弱
SecureCRT 中等批量、产线稳定 脚本稳定、支持协议多 收费、配置稍复杂
Python pyserial 大批量、自动化集成 完全可控、可定制 需要编程能力

我个人建议:调试用MobaXterm,产线用SecureCRT或Python脚本。如果你有编程基础,直接上Python——它给你最大的自由度。而且,当你看到几十块板子同时自动烧录时,那种成就感,嗯,很爽。

最后说一句: 不管用哪个工具,校验这一步绝对不能省。烧录完成后一定要读回数据对比,否则芯片跑到客户手里出问题,那代价就大了。

串口烧录工具实战知识体系 MobaXterm SecureCRT Python pyserial 串口配置 进入烧录模式 发送固件 快速连接 VBScript脚本 自动烧录循环 pyserial安装 协议实现 量产增强 调试用MobaXterm → 产线用SecureCRT/Python

可可精品资料库