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。
安装步骤其实很简单,我列一下:
- 下载安装包:去Python官网,选对应操作系统的版本。Windows就下载exe,Linux用源码编译或者apt/yum都行。
- 安装时勾选"Add Python to PATH"——这个很重要。我第一次装的时候就忘了勾,后面命令行敲python提示找不到,折腾了半天才发现是PATH没加。
- 验证安装:打开终端,敲
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安装,最后跑通Hello World。每一步都是下一步的前提,缺一不可。
1.6 环境验证清单
最后,我列个清单。你照着检查一遍,确保环境没问题:
| 检查项 | 验证命令 | 预期结果 |
|---|---|---|
| Python版本 | python --version |
3.8 ~ 3.11 |
| 虚拟环境 | pip list |
包列表干净,无全局包污染 |
| SDK安装 | python -c "import pylink" |
无报错 |
| 硬件连接 | 运行hello_burner.py | 输出芯片ID |