通过SWD下载程序的ARM相关寄存器

SWD的时序图:

  1. start单个起始位,值为1(HIGH)
  2. APnDPA单比特,指示要访问DP还是AP。0用于访问DP(DPACC),1用于访问AP(APACC)
  3. RnWA单个位,指示访问是读(1)还是写(0)
  4. A[2:3]2位,给出DP或AP寄存器地址的A[3:2]地址字段。对于DPACC,是SW-DP中寄存器的地址;对于APACC,被寻址的寄存器取决于A[3:2]值和DP的SELECT寄存器中的值。注:[3:2]值首先传输LSB,这就是它显示为“A[2:3]”的原因。
  5. Parity 前一个数据包的单个奇偶校验位。使用偶数奇偶校验:如果设置为1的位数为奇数,则奇偶校验位设置为1。对于数据包请求,将对APnDP、RnW和A[2:3]位进行奇偶校验。对于数据传输(RDATA和WDATA),奇偶校验是在32数据位。
  6. stop 单个停止位,始终为0
  7. Park 1位。调试主机不驱动此位的线路,并且线路被DP拉高。目标将此位读取为1。
  8. Trn Turnaround。这是一段时间,在此期间线路未被驱动,线路的状态未定义。周转周期的默认长度为一个时钟周期,可以通过在SW-DP的线路控制寄存器中写入TURNROUND字段来更改(通常不需要)
  9. ACK[0:2]3位目标到主机响应。ACK值首先在线路上传输LSB,因此它显示为ACK[0:2]
  10. 32位写入数据,从主机到目标。WDATA值首先在导线上传输lsb,因此它显示为WDATA[0:31]。
  11. RDATA[0:31]从目标到主机的32位读取数据。RDATA值首先在导线上传输lsb,因此它显示为RDATA[0:31]。

电源控制:

DAP模型支持多个功率域;可以有三个电源域:

•常开域

•系统电源域

•调试电源域

DP寄存器位于常开域中,CTRL/STAT寄存器中有两个控制位:

•Bit[28],CDBGPWRUPREQ,用于请求系统电源管理器在调试电源域中完全通电并启用时钟。

•Bit[30],CSYSPWRUPREQ,用于请求系统电源管理器完全通电并启用系统电源域中的时钟。

初始化期间需要设置这两个位,以确保MCU完全通电并启用时钟

DP 寄存器:

AP 寄存器:

ABORT寄存器:

ABORT:AP中止寄存器始终存在于所有DP实现中,仅写,始终可访问。它的主要目的是强制DAP中止,也用于清除错误和粘性标志条件。当APnDP位=0时,它在写入操作时处于地址0x0。对AP中止寄存器的访问不受选择寄存器中CTRLSEL位值的影响。

当调试器发现错误标志被设置为1,或者粘性比较标志被设置成1时,它必须写入AP中止寄存器以将错误或粘性比较标志清除为0。如果有必要,可以使用对AP中止寄存器的一次写入来将多个标志清除为0

IDCODE寄存器:

标识码寄存器是只读的,并且始终可以访问,存在于所有调试端口实现中。它提供有关ARM调试接口的标识信息。当APnDP位=0时,它在读取操作时位于地址0b00

Bits

Function

Description

[31:28]

Version

Version code, implementation defined.

[27:12]

PARTNO

0xba10 for SW-DP

[11:1]

DESIGNER

Defaults to 0x23b

[0]

-

Always 1

Control/Status寄存器:

这个重要的寄存器提供DP的控制和状态。当APnDP位=0并且选择寄存器中的CTRLSEL位设置为0时,它在读写操作中处于地址0x4

SELECT寄存器:

AP选择寄存器始终存在,其主要目的是选择当前访问端口和该访问端口中的活动4字寄存器窗口,它还选择调试端口地址组。当APnDP=0时,它在写入操作时位于地址0b10,并且仅写入。对AP选择寄存器的访问不受CTRLSEL位值的影响

Bits

Function

Description

[31:24]

APSEL

Selects the current AP.0x00 = AHB-AP (We use this!)0x01 = APB-AP 0x02 = JTAG-AP 0x03 = Cortex-M3 if present.Reset to Unpredictable.

[23:8]

Reserved. Should be 0, read as 0.

[7:4]

APBANKSEL

Selects the active 4-word register window on the current AP. Reset to Unpredictable

[3:1]

Reserved. Read as 0, Should be 0.

[3:0]

CTRLSEL

(As mentioned many times above) SW-DP Debug Port address bank select. Reset to 0. However the register is WO, so we can’t201430of61read its value.

RDBUFF寄存器:

当APnDP位=0时,RDBUFF在读取操作中位于地址0b11,并且是只读寄存器。对读取缓冲区的访问不受SELECT寄存器中CTRLSEL位的值的影响。

执行读取读取缓冲区从访问端口捕获数据,该数据是上一次读取的结果,而无需启动新的访问端口事务。这意味着读取读取缓冲区将返回上次访问端口读取访问的结果,而不会生成新的AP访问。读取“读取缓冲区”后,其内容将不再有效。读取缓冲区的第二次读取结果未定义。如果需要读取访问端口寄存器的值,则该读取之后必须是以下其中之一:

•第二个访问端口寄存器读取。可以读取控制/状态寄存器(CSW),以确保第二次读取没有副作用。

•对DP读取缓冲区的读取。

根据使用的选项,对访问端口或调试端口的第二次访问将暂停,直到恢复

WCR寄存器:

有线控制寄存器的目的是选择与SW-DP的物理串行端口连接的操作模式。当选择寄存器中的CTRLSEL位设置为b1时,在读写操作中,它是地址为0b01的读/写寄存器。线控寄存器的许多功能都是由实现定义的。

对于SWD编程,不需要配置此寄存器。

RESEND寄存器:

读取重新发送寄存器使读取数据能够从损坏的调试器传输中恢复,而无需重复原始AP传输。它是一个32位只读寄存器,在读取操作时位于地址0b10。对读重新发送寄存器的访问不受SELECT寄存器中DPBANKSEL位值的影响。对RESEND寄存器执行读取不会从访问端口捕获新数据。它返回上次AP读取或DP RDBUFF读取返回的值。读取RESEND寄存器可以从损坏的传输中恢复读取数据,而无需重新发出原始读取请求或生成新的DAP或系统级访问。RESEND寄存器可以被多次访问。它总是返回相同的值,直到对DP RDBUFF寄存器或访问端口寄存器进行新的访问

MEM-AP的访问:

MEM-AP寄存器:

CSW寄存器:

CSW寄存器通过MEM-AP配置和控制对连接的存储器系统的访问或从连接的存储系统的访问。CSW是一个R/W寄存器,但有些位是只读的。CSW位于MEM-AP寄存器空间中的偏移0处,因此它是第一寄存器组中的第一个寄存器。对于SWD编程,我们可以将CSW设置为(2<<0|1<<4|1<<24|1<<25),使其访问为32位,递增单个,特权访问,作为调试器访问。

TAR寄存器:

该R/W寄存器保存要访问的32位系统存储器地址;它在MEM-AP寄存器空间中处于偏移0x04。当使用数据读/写寄存器(DRW)时,TAR指定要访问的内存地址,并且在成功访问DRW时可以自动递增

DRW寄存器:

这个R/W寄存器保存一个32位的数据值。在写入模式下,DRW将当前传输要写入的值保存到TAR中指定的地址;在读取模式下,DRW保持从TAR中指定的地址在当前传输中读取的值。DRW寄存器将AP访问直接映射到一个32位内存访问:对DRW的写入命令MEM-AP启动对内存系统的写入访问DRW的读取命令MEM-AP启动对内存系统的读取访问。请注意,在内存访问完成之前,AP访问不会完成

CORE DEBUG:

DCRDR寄存器:

DCRDR寄存器是一个数据临时缓存,用于读取和写入ARM核心寄存器、专用寄存器和浮点扩展寄存器。DCRDR也可以单独使用,在外部调试器和处理器上运行的调试代理之间提供消息传递资源

DHCSR寄存器:

这个寄存器有两个字段排列视图:当读取时,[31:16]是一些状态位;写入时,[31:16]是一个“调试密钥”值,必须将其设置为0xA05F才能更新[15:0]。

DCRSR寄存器:

使用DCRDR,此寄存器提供对ARM核心寄存器、专用寄存器和浮点扩展寄存器的调试访问。对DCRSR的写入指定要传输的寄存器、方向(读/写)并开始传输。

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: SWD(Serial Wire Debug)协议是一种用于调试和下载程序的协议,主要用于ARM架构的处理器。它是一种串行的、双线的调试接口,可以实现在目标芯片和调试设备之间进行通信和数据传输。 SWD协议的研究主要包括对协议本身进行深入理解和分析,以及对协议在实际应用中的性能和可靠性进行评估。研究人员需要理解SWD协议的工作原理、数据传输格式、状态机和时序等方面的内容,并且需要考虑在不同的环境和条件下的适应性。 针对SWD协议的应用,还需要设计相应的ARM程序下载器。这个下载器需要根据SWD协议的规范进行硬件和软件的设计。硬件方面,需要设计支持SWD协议的调试接口电路,以及与目标芯片连接的电路。软件方面,需要编写相应的驱动程序和通信协议栈,以实现与目标芯片的连接和数据传输。 ARM程序下载器的设计需要考虑多个方面的需求。首先,下载器需要能够支持不同型号和系列的ARM处理器,因此要设计兼容性强的接口。其次,下载器需要提供简单易用的操作界面和用户指南,以方便用户进行调试和程序下载。此外,下载器的稳定性和可靠性也是非常重要的,要确保在高频率和大数据量的传输下仍能保证正确性和可靠性。 总而言之,SWD协议的研究和ARM程序下载器的设计是在具体应用中对ARM处理器进行调试和程序下载所必需的工作,它们的研究和设计需要深入理解和掌握SWD协议的工作原理和规范,并且需要考虑实际应用中的各种需求和条件。 ### 回答2: .swd协议是一种用于ARM处理器中的调试和程序下载的协议。它通常用于开发人员在调试和下载ARM芯片上的程序时使用。 .swd协议的研究是为了提供ARM处理器的高效调试和程序下载方式。通过使用.swd协议,开发人员可以连接调试工具和目标设备,以便实时监控和调试目标设备上的程序。.swd协议具有高效、可靠的特点,可以在调试过程中传输大量的数据,并且可以对目标设备进行控制和配置。 针对.swd协议,需要设计一个ARM程序下载器来实现程序下载工作。ARM程序下载器的设计需要考虑以下方面: 1.硬件设计:下载器需要与目标设备进行连接,并且能够与.swd协议兼容。因此,硬件设计中需要包含对应的接口和电路,以便与目标设备进行通信。 2.软件设计:下载器需要具备相应的软件来控制通信,并实现程序下载功能。软件设计中需要编写与.swd协议兼容的通信协议,并提供相应的接口供开发人员使用。此外,还需要提供调试和错误检测的功能,以确保下载程序能够正确地加载到目标设备中。 3.性能优化:下载器的设计还需要考虑性能的优化,以提高下载的速度和可靠性。通过优化通信协议和硬件设计,可以减少数据传输的延迟和错误,并提高下载的效率。 总之,对于.swd协议的研究和ARM程序下载器的设计需要综合考虑硬件和软件两方面的因素。通过合理的设计和实现,可以实现高效、可靠的ARM程序下载和调试功能。 ### 回答3: .swd协议是一种用于调试和下载ARM处理器的协议。ARM处理器是一种常用的低功耗处理器架构,广泛应用于移动设备、嵌入式系统等领域。.swd协议提供了一种可靠和高效的方式来进行调试和下载ARM程序。 研究.swd协议是为了深入了解和理解ARM处理器的调试和下载机制。通过研究.swd协议,我们可以掌握如何通过SWD(Serial Wire Debug)接口与ARM处理器进行通信,了解其工作原理和调试功能,并能够编写相关的控制程序和工具。 设计一个ARM程序下载器需要考虑以下几个方面: 首先,需要确定使用哪种通信接口与ARM处理器进行通信。一般来说,可以选择SWD接口或者JTAG接口。SWD接口是一种双线调试接口,相对简单,适用于低成本的下载器设计;而JTAG接口是一种更为复杂的多线调试接口,功能更加强大。 其次,需要设计硬件电路用于与ARM处理器进行连接。这包括需要连接到ARM处理器的引脚、连接线路以及调试器电路的设计等。在设计硬件时,需要充分考虑电路的稳定性、可靠性和兼容性。 然后,需要开发相应的控制软件或驱动程序。这些程序可以控制下载器与目标ARM处理器之间的通信,并实现下载程序、读写寄存器以及调试等功能。软件的开发需要熟悉.swd协议的细节和相关编程技巧。 最后,需要测试和验证下载器的性能和功能。这包括测试下载速度、稳定性、可靠性以及对不同型号的ARM处理器的兼容性等。通过测试,可以确保下载器的设计符合预期要求。 总之,.swd协议的研究及ARM程序下载器的设计需要深入了解ARM处理器的调试和下载机制,结合相关的硬件和软件技术,实现与ARM处理器的通信和控制,从而达到下载、调试和测试ARM程序的目的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值