SWD 协议入门指引及实际寄存器读写波形示例

本文围绕Cortex M0芯片的SWD协议展开,介绍了SWD协议文档,阐述通过SWD连接目标芯片的流程,分析底层波形,包括LineReset、读写DP/AP寄存器等情况,还给出读写DP/AP区寄存器的示例,如读取IDCODE、设置CPU地址读写位宽等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如需源码,请移步SWD协议 源码 入门示例_smartpower的博客-CSDN博客_swd tar

1. SWD协议文档

Cortex M0芯片的SWD协议白皮书请参考如下文档:

这个文档的目录如下所示。

2. 通过SWD连接到目标芯片的流程

发起LineReset -> 读写DP区域寄存器->写DP寄存器以使能AP区域寄存器->读写AP区域寄存器。

通过对AP区域寄存器作为桥即可读写目标芯片的寄存器。

3. 底层波形

3.1 LIneReset

3.2 写DP/AP寄存器

其中Trn周期,Host和Slave均不驱动SWDIO,用于总线转换方向。

3.3 读DP/AP寄存器

其中Trn周期,Host和Slave均不驱动SWDIO,用于总线转换方向。

4.读写DP/AP区寄存器示例

4.1DP区寄存器列表

4.2AP区寄存器列表

4.3 读取IDCODE(DP区寄存器DPIDR),其地址为0x00。

STAT固定为1;

读DP故APnDP为0;

本次为读操作故RnW为1;

寄存器地址为0x00故A2,A3均为0;

Parity为由前面几位计算出为奇校验值;

Stop及Park分别为固定值0和1。

ACK后,返回的IDCODE为0x0BC11477。这就是我们在Keil里看到的芯片的序号。

4.4 写DP区寄存器以开启AP区寄存器使能

向CTRL/STAT寄存器写入0x50000000

4.5 写DP区寄存器SELECT以选中BANKF

向SELECT寄存器写入0x000000F0,AP区的BankF中具有4个寄存器。为下一步读取AP区的ID寄存器做准备。

4.6 读取AP区寄存器IDR

读取AP区寄存器,不能直接读出。需要首先对AP区目标寄存器发起一次读操作;再读取DP区寄存器RDBUFF才能真的读到AP区目标寄存器的值。

下图中对AP区的IDR读出的实际值为0x04770031。

4.7 设置CPU地址的读写位宽

需要对AP区CSW寄存器进行行配置,以确写读写的位宽。CSW寄存器位于Bank0,需要配置SELECT寄存器内的BANK寄存器。

4.8 读取CPU可访问的地址

操作分成三步完成:将待读取的地址写入AP区的TAR寄存器;对AP区DRW寄存器发起读操作;对DP区的RDBUFF发起读操作即可读出目标地址的值。

下方示例为读取0xE000ED00寄存器的值。

4.8 向CPU可访问的地址写入数据

操作分成两步完成:将待写入的地址写入AP区的TAR寄存器;对AP区DRW寄存器发起写操作。

下方示例为向0xE000EDF0写入0xA05F0001

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值