weiqi7777

ARM external debug寄存器的访问

0
阅读(3150)

在ARM处理器的内部,实现了若干的external debug(以下简称ED)寄存器,用来实现处理器的external debug功能。

一、ED寄存器访问的条件

对于ED寄存器的访问,是有条件限制的,一般是如下的几个条件。

  • OFF: core状态是power down还是power up
  • DLK: double lock 状态是lock还是unlock
  • OSLK: os lock状态是lock还是unlock
  • SLK: software lock状态是lock还是unlock

1、OFF

OFF表示core是power down状态还是power up状态。如果要对ED寄存器访问,那肯定是需要core是power up状态的。但是,有一些ED寄存器,在core是power down的情况下,也是可以访问的。

2、DLK

对于DLK,DLK只会在core要进入power down时需要用到的,因为core进入power down,是需要一个序列的,而这个序列是不能被打断的,也就是在执行这个序列时,外部的debugger是不能对core有影响的。此时debugger不能访问ED寄存器,core的halting也是禁止的。

由OSDLR_EL1寄存器来控制目前DLK的状态。

在复位之后,这个DLK为0,表示正常情况下,DLK都为0,即double lock是unlock的。只有当core要进入power down时,就需要软件将这一位置1,表示double lock给lock住。此时core完全禁止debugger对ED寄存器的访问,并且core的external debug功能被禁止掉。

3、OSLK

对于OSLK,用来禁止外部的debugger对一些ED寄存器的访问。由OSLSR_EL1寄存器来决定当前的os lock的状态。

该位是cold reset的,warm reset没有影响。

不过OSLSR_EL1是一个只读寄存器,要通过修改OSLAR_EL1寄存器才可以修改OSLK状态。该寄存器是一个只写的寄存器。

OS lock不会影响PE进入到debug state,但是会影响对debug 寄存器的访问。因此在进入debug state前,还是要将os lock给unlock的。

4、SLK

software lock,用来禁止外部的debugger对一些ED寄存器的写操作,并且让寄存器的读取没有side-effect。

由EDLSR寄存器(ED寄存器)来控制

这个是一个只读的寄存器,而修改该寄存器的SLK位,要通过修改EDLAR寄存器(ED寄存器),往这个寄存器写入0xc5acce55,就将software lock给unlock,如果写入其他值,那么就将software lock给lock。

这两个寄存器,都是memory map的方式,即程序通过ldr,str来进行访问。debugger通过DAP去访问。

5、ED寄存器访问权限

以下是ED寄存器的访问权限的列表:

表中的访问权限,如下表所示,比如RO,就表示只读。

EDAD,表示是否允许外部debugger访问ED寄存器。

从上图可以看出,大多数寄存器当OFF,DLK,OSLK下,是不能访问的,因此有Error,这里的Error体现在APB访问时,APB总线上的PSLVERR信号会拉高,表示访问出现error。

而SLK下,会将很多RW的寄存器变为WO或WI。

Baidu
map