使用 Geehy Link 进行 pyOCD 和 OpenOCD .hex/.bin 文件烧录指南
本文介绍了两种在嵌入式开发中使用pyOCD和OpenOCD工具支持Geehy芯片的方法。方法A推荐快速入门,通过直接加载Geehy提供的CMSIS-Pack文件实现编程调试;方法B则通过手动集成闪存算法实现更灵活的控制。文章详细说明了两种方法的操作步骤,包括获取设备名称、烧录固件、生成Python算法等关键环节,并对比了pyOCD在CLI友好性、性能和命令丰富度方面的优势。此外还介绍了使用Geeh
在不断发展的嵌入式开发领域,命令行界面(CLI)工具正变得越来越重要,主要用于自动化、持续集成(CI)以及轻量级的基于 GCC 的集成开发环境(如 VS Code 或 Eclipse)设置。
pyOCD 是一个开源的基于 Python 的调试工具,具有极佳的灵活性。结合支持 CMSIS-DAP V2 的 Geehy-Link 调试器,它为编程和调试 APM32 和 G32 系列芯片提供了高速、可靠的解决方案。


目前,Geehy 产品不能通过标准的 pyOCD pack install 命令直接安装。
然而,开发者可以通过以下两种方法之一启用完整支持。此外,我们还将介绍如何使用定制的 pyOCD 和 OpenOCD 版本来支持 Geehy 芯片。
使用 pyOCD
为什么选择 pyOCD?
- CLI 友好:非常适合脚本和自动化。
- 性能:充分发挥 Geehy-Link(CMSIS-DAP V2)的速度。
- 丰富的命令:广泛支持寄存器、复位控制、擦除和闪存。
- 集成开发环境准备:为在 Eclipse 和 VS Code 中使用 GCC 进行调试打下基础。
方法 A:直接使用 CMSIS-Pack(推荐用于快速入门)
如果你拥有 Geehy SDK 或特定的 .pack 文件,可以直接加载,无需修改 pyOCD 源代码。
你可以在 https://www.geehy.com/design/software 中搜索“Pack”以获取“.pack”文件。

可以从 Geehy SDK 获取 .pack CMSIS-Pack 文件、.FLM 闪存算法文件以及 .svd 散布文件。

1. 确定芯片名称
首先,你必须找到 CMSIS Pack 中定义的“设备名称”。
运行以下命令以列出特定包中的设备:
# Syntax: pyocd list -t -s pack --pack <Path_To_Your_Pack_File>
pyocd list -t -s pack --pack "D:\Geehy_SDK\Package\Geehy.APM32E1xx_DFP.1.0.3.pack"
输出:终端将列出可用的目标(例如, APM32E103ZE , APM32E103VC )。请记下你需要的具体名称。

2. 刷写固件
一旦你知道了目标名称,使用 flash 命令。
关键参数:
-f <frequency>:调试时钟频率,单位为 Hz(例如, 4000000 表示 4MHz)。-t <target>:在步骤 1 中找到的设备名称。--pack <path>:你的.pack文件的绝对路径。-a <address>:仅对.bin文件需要,用于指定起始地址。
场景 1:烧录 Hex/Elf 文件
Hex 和 Elf 文件包含地址信息,因此不需要地址参数。
pyocd flash --pack "D:\Geehy_SDK\Package\Geehy.APM32E1xx_DFP.1.0.3.pack" -t APM32E103ZE -f 4000000 project.hex

场景 2:闪存二进制(.bin)文件
对于原始二进制文件,必须指定闪存起始地址(通常为 0×08000000 )。
pyocd flash --pack "D:\Geehy_SDK\Package\Geehy.APM32E1xx_DFP.1.0.3.pack" -t APM32E103ZE -f 4000000 -a 0x08000000 project.bin
方法 B:手动闪存算法集成(高级)
此方法从 SDK 中提取闪存算法并将其嵌入到 pyOCD 中。这对于创建一个不依赖外部 Pack 文件的独立 Python 环境非常有用。我们将以 APM32F103 为例。
1. 准备工作
安装 Python 3.7+ 和 pyOCD:
pip install pyocd
获取 .FLM 文件:
从 Geehy SDK 中提取 Geehy.xxxxxxxx_DFP.x.x.x.pack 文件。找到 xxxxxx.FLM 文件。
获取转换脚本:
从 pyOCD 的 GitHub 仓库下载 generate_flash_algo.py (位于 scripts/ 文件夹中)。
2. 生成 Python 算法,即 APM32F103xB
运行脚本将 .FLM 文件转换为 Python 字典。

python generate_flash_algo.py -o apm32f103_flash_algo.py APM32F10x_128.FLM

3. 创建目标文件
进入你的 pyOCD 安装目录(例如, .../site-packages/pyocd/target/builtin )。创建一个名为 target_APM32F103xB.py 的新文件。
复制生成文件中的整个 FLASH_ALGO 字典,并定义该类:
from ...coresight.coresight_target import CoreSightTarget
from ...core.memory_map import (FlashRegion, RamRegion, MemoryMap)
# Paste the generated FLASH_ALGO dictionary here
FLASH_ALGO = {
'load_address': 0x20000000,
# ... (instructions data) ...
}
class APM32F103xB(CoreSightTarget):
VENDOR = "Geehy"
MEMORY_MAP = MemoryMap(
FlashRegion(
start=0x08000000,
length=0x20000, # 128KB
blocksize=0x400,
is_boot_memory=True,
algo=FLASH_ALGO
),
RamRegion(
start=0x20000000,
length=0x8000 # 32KB
)
)
def __init__(self, session):
super(APM32F103xB, self).__init__(session, self.MEMORY_MAP)
4. 注册目标
在同一目录( pyocd/target/builtin/ )中编辑 __init__.py 文件以注册新芯片:
from . import target_APM32F103xB
BUILTIN_TARGETS = {
# ... other targets ...
"apm32f103xb": target_APM32F103xB.APM32F103xB,
}


5. 验证与测试
你现在可以直接使用芯片名称,而无需引用包文件。
- 检查清单:
pyocd list --targets(查找apm32f103xb)
- 擦除芯片:
pyocd erase --chip -t apm32f103xb - 烧录固件:
pyocd flash -t apm32f103xb firmware.hex
使用 OpenOCD
对于偏好使用 OpenOCD 的开发者,Geehy 提供了一个定制版本,包含适用于 APM32/G32 芯片的配置文件。
1. 下载适用于 Geehy 的 OpenOCD
请从以下提供的资源中下载 Geehy 定制的 OpenOCD 软件包。
2. 烧录命令
安装完成后,您可以使用命令行下载 .hex 文件。确保指向包中包含的正确接口和目标配置文件。
openocd -c "source [find interface/cmsis-dap.cfg]" \
-c "transport select swd" \
-c "source [find target/apm32e0x.cfg]" \
-c "adapter speed 10000" \
-c init \
-c "reset halt" \
-c "wait_halt; flash write_image erase path/to/your_firmware.hex" \
-c reset \
-c shutdown
参数解析:
-f interface/cmsis-dap.cfg:指定调试器接口(Geehy-Link 使用 CMSIS-DAP)。-f target/apm32fxxx.cfg:指定目标芯片配置(从 target 文件夹中选择与您的芯片型号匹配的.cfg文件)。-c "...":执行编程序列:program <file>:将文件写入闪存。verify:检查写入是否成功。reset:编程完成后重置芯片。exit:关闭 OpenOCD。
更多推荐
所有评论(0)