ARM external debug寄存器的访问

在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。

此条目发表在ARM分类目录,贴了, 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。