1. 脚本开发环境搭建:Python环境配置、烧录工具SDK安装、第一个Hello World脚本

说实话,很多工程师拿到烧录工具的第一反应就是——点开GUI,选个文件,点烧录,完事。但真正到了产线量产、或者遇到特殊芯片需要定制流程的时候,你就会发现,GUI那套东西根本不够用。

我最早接触自定义烧录脚本是在一个量产项目上。当时一天要烧两千片,每片还得校验三次。手动点鼠标?手都得废掉。从那以后,我就彻底转向脚本化烧录了。今天咱们就从零开始,把环境搭起来。

1.1 Python环境配置

烧录脚本我们选Python。为什么?因为生态好,库多,上手快。你想想看,要是用C写个烧录脚本,光编译环境就能折腾半天。Python这边,装好解释器就能跑。

推荐版本:Python 3.8 ~ 3.11

我个人习惯用3.10。3.12刚出的时候我试过,有些烧录SDK的依赖还没跟上,踩了个坑。所以建议你稳一点,选3.10或者3.11。

安装步骤其实很简单,我列一下:

  1. 下载安装包:去Python官网,选对应操作系统的版本。Windows就下载exe,Linux用源码编译或者apt/yum都行。
  2. 安装时勾选"Add Python to PATH"——这个很重要。我第一次装的时候就忘了勾,后面命令行敲python提示找不到,折腾了半天才发现是PATH没加。
  3. 验证安装:打开终端,敲 python --version。如果显示版本号,就说明装好了。

小技巧:Windows用户建议用py命令代替python。py是Python Launcher,会自动帮你选系统中合适的Python版本。特别是你电脑上装了多个版本的时候,py比python靠谱得多。

1.2 虚拟环境——别偷懒,这一步省不了

你可能会想:不就是装个烧录SDK吗,直接pip install不就完了?嗯,我以前也这么干。直到有一次,我同时做两个项目,一个需要烧录SDK v1.2,另一个需要v2.0。两个版本互相冲突,pip装完这个那个就炸了。

从那以后,每个项目我都建独立的虚拟环境。做法很简单:

# 创建虚拟环境
python -m venv burner_env

# 激活(Windows)
burner_env\Scripts\activate

# 激活(Linux/Mac)
source burner_env/bin/activate

# 退出
deactivate

激活之后,终端前面会出现 (burner_env) 的标识。看到这个,就说明你已经在虚拟环境里了。后面所有pip安装的包,都只在这个环境里生效,不会污染全局。

1.3 烧录工具SDK安装

不同厂商的烧录工具,SDK的安装方式不太一样。但大体上分两类:

类型 安装方式 常见厂商
pip包 pip install flasher-sdk J-Link、ST-Link、OpenOCD
本地whl/zip 下载后 pip install xxx.whl 部分国产烧录器、私有协议工具

我这里以J-Link的SDK为例,演示一下安装过程:

# 确保在虚拟环境中
pip install pylink-square

# 验证安装
python -c "import pylink; print(pylink.__version__)"

如果输出了版本号,就说明SDK装好了。没输出?别急,检查两件事:

  • 虚拟环境有没有激活?
  • 网络能不能连上PyPI?

注意:有些烧录SDK依赖底层驱动。比如J-Link需要先装J-Link Commander,否则SDK连不上硬件。我遇到过好几次,SDK装好了,一跑就报"Failed to connect",结果发现驱动没装。所以装SDK之前,先把厂商的驱动装好。

1.4 第一个Hello World脚本

环境搭好了,咱们写个脚本试试。别一上来就搞复杂的烧录流程,先让脚本能跑起来,能连上烧录器,就算成功。

# hello_burner.py
# 我的第一个烧录脚本

import pylink

def main():
    # 创建J-Link连接
    jlink = pylink.JLink()
    
    # 打开J-Link
    jlink.open()
    
    # 打印固件版本
    print(f"J-Link固件版本: {jlink.firmware_version}")
    
    # 连接目标芯片(以STM32F103为例)
    jlink.connect('STM32F103C8')
    
    # 读取芯片ID
    chip_id = jlink.read_memory(0xE0042000, 4)
    print(f"芯片ID: {hex(chip_id[0])}")
    
    # 断开连接
    jlink.close()
    print("Hello, Burner World!")

if __name__ == "__main__":
    main()

跑一下试试:

python hello_burner.py

如果一切正常,你会看到类似这样的输出:

J-Link固件版本: J-Link V10 compiled Jan 15 2024 14:30:00
芯片ID: 0x12345678
Hello, Burner World!

看到"Hello, Burner World!"了没?恭喜,你的第一个烧录脚本跑通了。

避坑指南:如果你跑的时候报"JLink not found",别慌。检查一下J-Link驱动有没有装,USB线有没有插好。我曾经有一次折腾了半小时,结果发现USB线是坏的——对,就是那种只能充电不能传数据的线。换根线就好了。

1.5 本章知识体系

我把这章的核心逻辑画了张图,方便你理解整个环境搭建的脉络:

脚本开发环境搭建 - 知识体系 目标:运行第一个烧录脚本 ① Python环境 ② 虚拟环境 ③ SDK安装 Python 3.8~3.11 下载安装 勾选 Add to PATH 验证:python --version python -m venv burner_env 激活虚拟环境 隔离项目依赖 避免版本冲突 pip install pylink-square 先装驱动 再装SDK 验证:import pylink Hello, Burner World! 核心:环境隔离 + SDK连通性验证 = 可复用的烧录脚本基础

这张图把整个流程串起来了。从Python环境开始,到虚拟环境隔离,再到SDK安装,最后跑通Hello World。每一步都是下一步的前提,缺一不可。

1.6 环境验证清单

最后,我列个清单。你照着检查一遍,确保环境没问题:

检查项 验证命令 预期结果
Python版本 python --version 3.8 ~ 3.11
虚拟环境 pip list 包列表干净,无全局包污染
SDK安装 python -c "import pylink" 无报错
硬件连接 运行hello_burner.py 输出芯片ID