# PyOCD 的基本使用 ## 1. 基本命令 - erase:擦除 Flash; - load:烧写 Flash,带擦除和校验; - gdbserver:启动 GDB Server 服务器; - list:列出已连接的调试器; - rtt:控制 SEGGER RTT 兼容接口。 ## 2. pack 管理 PyOCD 可以使用 .pack 文件(CMSIS-Packs),许多芯片尤其是国产芯片,只提供 .pack 文件来支持开发和调试。 PyOCD 通过 --pack 指定 .pack 文件。 ## 3. 指定芯片型号 使用 --target 参数指定烧录芯片型号: ```bash pyocd erase --chip --target stm32f103rc ``` 如果需要指定国产新,则需要结合 --pack 参数,例如: ```bash pyocd erase --chip --target n32l406cb --pack <"/Path/To/Nationstech.N32L40x_DFP.0.9.0.pack"> ``` ## 4. 擦除芯片 使用 erase 命令擦除芯片,需要指定擦除方法,如:--chip、--sector、--mass。 ```bash # 擦除整个芯片 pyocd erase --chip --target --pack <"/Path/To/Nationstech.N32L40x_DFP.0.9.0.pack"> ``` ## 5. 烧写芯片 使用 load 命令烧写新,需要指定烧写的起始地址和要烧写的程序。load 命令会自动擦除 Flash 并校验,可以指定擦除和校验方法。 ```bash pyocd.exe load --trust-crc --base-address <"/Path/To/Program.hex"> --target --frequency {Examples: "1000", "2.5khz", "10m"} --erase {auto,chip,sector} --pack <"/Path/To/Nationstech.N32L40x_DFP.0.9.0.pack"> ``` ## 6. GDB Server 调试 使用 gdbserver 命令启动 gdbserver 服务,然后可以使用 gdb 客户端进行连接调试。 ```bash pyocd gdbserver --port 50000 --telnet-port 50001 --target --pack <"/Path/To/Nationstech.N32L40x_DFP.0.9.0.pack"> ``` ## 7. RTT 控制 项目中如果兼容 RTT 接口,则可以通过 PyOCD 查看 RTT 输出。集成 RTT 的方法为,将 [RTT 接口](./RTT.zip) 文件解压后添加到项目中,代码中增加: ```c #include "SEGGER_RTT.h" SEGGER_RTT_ConfigUpBuffer(0, "RTTUP0", NULL, 0, SEGGER_RTT_MODE_NO_BLOCK_SKIP); SEGGER_RTT_ConfigDownBuffer(0, "RTTDOWN", NULL, 0, SEGGER_RTT_MODE_NO_BLOCK_SKIP); SEGGER_RTT_SetTerminal(0); ``` 进行配置,使用: ```c SEGGER_RTT_printf(0, "Hello\r\n"); ``` 进行打印。 该方法不但支持 Jtag,还支持 CMSIS-DAP/DAPLink 等调试器。 ```bash pyocd.exe rtt --target --pack <"/Path/To/Nationstech.N32L40x_DFP.0.9.0.pack"> ``` 其他参数: - --help - --address - --up-channel-id - --down-channel-id - --log-file ## 8. 外部参考资料 1. [PyOCD Command reference](https://pyocd.io/docs/command_reference.html)