=
EDM , AndesCore , debug system
![](http://gg.eefocus.com/www/delivery/lg.php?bannerid=1869&campaignid=534&zoneid=212&loc=http%3A%2F%2Fwww.eefocus.com%2Fembedded%2F318362&referer=http%3A%2F%2Fwww.eefocus.com%2Fembedded%2Flist&cb=9b4bee0e55)
EDM安全存取是AndesCore 内建的功能(option),应用在安全存取的控管。EDM安全存取有二种的控管方式:debug access indication和EDM access restriction.第一种控管方式(debug access indication)提供了一个sideband signal用于指示从调试器(Debug host)的请求。第二种控管方式, 控制AndesCore的input port(edm_restrict_access )达到EDM存取的限制。更详细的内容在后续章节会有更深入的介绍。
1.EDM功能介绍
一个debug system包含一个debug host和一个target system.EDM主要的功能就是translate debug host发出的TAP指令来存取系统memory或是CPU.下图为基本的debug系统方块图。
![](http://upload.semidata.info/article/image/2013/03/12/513ea5b8f1561-thumb.jpg)
图表1 基本的debug系统方块图
下图说明TAP 指令的种类
![](http://upload.semidata.info/article/image/2013/03/12/513ea5b96ddec-thumb.jpg)
图表2 TAP 指令的种类
2.控制EDM存取的限制
使用EDM的访问方式会被一个sideband signal (edm_restrict_access) 所影响。当这个signal值是high,仅仅只能对EDM MISC registers做读取的动作。而想要存取CPU/System Bus/Local Memory的动作将会被封锁住并且会得到下面的结果:
读为零写忽略
不正确的JTAG instruction(JTAG ICE debugger会timeout)
下图说明EDM限制存取方块图。
![](http://upload.semidata.info/article/image/2013/03/12/513ea5b9db1fe-thumb.jpg)
图表3 EDM限制存取方块图
在启用存取限制功能后,下图说明出每个TAP指令的行为。
![](http://upload.semidata.info/article/image/2013/03/12/513ea5bf5737b-thumb.jpg)
图表4 在启用存取限制功能后,下图说明出每个TAP指令的行为
如何实现EDM存取限制,在系统设计上有很多种实现方法,以控制edm restrict access的signal.两种基本的设计方案说明如下:
eFUSE方式使用Chip重新编程管理控制
SOC方式使用软件管理控制
hardware实现控制edm_restrict_access的示意图如下:
![](http://upload.semidata.info/article/image/2013/03/12/513ea5bfc2f33-thumb.jpg)
图表5 hardware实现控制edm_restrict_access的示意图
software实现控制edm_restrict_access的例子如下:
sethi $r2,#0x80000
ori $r2,$r2,#0x8c
sethi $r3,#0x04030
ori $r3,$r3,#0x201
swi $r3,[$r2+#0]
3.EDM 存取指示
AndesCore增加一个额外的sideband signal,xdebug_access(active-high),根据此sideband signal来决定request的host是否为EDM.而device就能根据此sideband signal决定是否要把request的data内容传回到host.
sideband signal的名称根据bus interface的类型而有所不同。对于AndesCore处理器,基本的信号名称如下所示:
AHB/AHB-Lite => hdebug_access
APB => pdebug_access
EILM => eilm_debug_access
EDLM => edlm_debug_access |