-
Notifications
You must be signed in to change notification settings - Fork 0
/
openocd.cfg
44 lines (43 loc) · 2.76 KB
/
openocd.cfg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 注意,debug 模块是 Cortex 内部的,也就是说 swd 或 jtag 的引脚是直接从 Cortex 核心中引出来的
# 具体可以查阅 STM32F413 的 Debug Support 章节
# DAPLink 使用的配置文件同 CMSIS-DAP
# 准确来说,CNSIS-DAP 是 Cortex 通用的 debug 协议,而 DAPLink 是实现了这个协议的软件+硬件
# 注意下面这行的配置文件来自于 OpenOCD,并非是我们给出的
source [find interface/cmsis-dap.cfg]
# 设置 DAPLink 与目标板的通信方式为 SWD
# 其实不指定也会自动识别为 SWD
transport select swd
# 设置 DAPLink 连接的目标板为 STM32F4 系列
source [find target/stm32f4x.cfg]
# 设置 DAPLink 的运行速度
# 速度越高、刷写和读取的速度越快
# 由于我所使用的 DAPLink 支持 10MHz 的速度,这里我们将其修改为 10000(单位是 kHz)
adapter speed 10000
# 之后我们配置 RTT(一种替代 ITM 和 Semihost 的 printf 风格的 trace 工具)
# RTT 一般会首先载入内存,所以我们在内存起始处搜索 "SEGGER RTT",搜索的范围为向后 0x7FF 字节
# 就可以让 OpenOCD 获得 RTT 的 handle
#
# 特别注意的是,这个搜索范围只能说是我测试中大概率能找到 "SEGGER RTT" 的范围
# 但并不代表着 "SEGGER RTT" 一定就会出现在这个范围内,比如,如果程序中有大量的静态量(static),那么 "SEGGER RTT" 就会向后偏移很多
# 同时,若一个程序没有使用 RTT,那么给出过大的搜索值,openocd 所要搜索的内容范围就越大,也越费时间
#
# 最后是,"SEGGER RTT" 的搜索范围不应该超过 MCU 的 RAM 的范围,因为 "SEGGER RTT" 是不会放置在 RAM 之外的地方的
# 比如我手上的 MCU,它的 RAM 就只有 SRAM,它的范围也就是 0x2000_0000 到 0x2002_0000,因此无论如何,搜索范围最大也就是
# rtt setup 0x20000000 0x20000 "SEGGER RTT"
#
# 另外,还需要注意,如果你还使用了同一个目录下的 launch.json 文件,那么其中所有的 rtt setup 指令也需要跟着一并修改
rtt setup 0x20000000 0x07FF "SEGGER RTT"
# 配置完成后,我们让 OpenOCD 执行初始化命令
#
# 注意
# 在这条命令执行前,DAPLink 应该被插入 Host 电脑中
# 如果你不想在这个脚本中执行初始化操作,则需要注释掉包含该行在内的下方的所有的命令,
# 并添加一条 noinit 指令
# 之后通过 telnet 控制 OpenOCD,再执行 init 命令
init
# 然后我们让 OpenOCD 启动 RTT 的收发
rtt start
# 之后让 OpenOCD 转发收到的 RTT 信息
# 由于同时可以有多个 RTT 收发对存在,因此这里指定,将 RTT 序号 0 的数据转发到端口 8888 上(使用的是 TCP 协议)
# 成功之后,我我们就可以使用 netcat、PuTTY 等软件
rtt server start 8888 0