在不断发展的嵌入式开发领域,命令行界面(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 "..." :执行编程序列:
    1. program <file> :将文件写入闪存。
    2. verify :检查写入是否成功。
    3. reset :编程完成后重置芯片。
    4. exit :关闭 OpenOCD。
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐