https://mp.weixin.qq.com/s/7suuJ7m2BKCpsHk1K2FzJQ

介绍riscv-debug的使用实例:如何使用DMI。

1. dm

Debug Module实现了调试模块。

2. dmi

Debug Module Interface是对Debug Module的访问接口。

3. DTM

dmi包含在DTM中。DTM是硬件接口相关的,可以是JTAG DTM,也可以是USB DTM。

4. JTAG DTM Registers

1) 支持的寄存器列表

a. 这里的address实际上是要存入IR中的指令编码;

b. 而这些寄存器则是数据寄存器(Data Register);

c. 使用存入IR中的指令编码来选择相应的数据寄存器(Data Register):

2) dmi Register

实现调试模块(Debug Module)访问的核心寄存器,用以实现对调试模块中各个寄存器的读写:

至于dmi寄存器自身,则通过JTAG接口进行访问:

a. 在IR中填入0x11,选择dmi数据寄存器;

b. In Update-DR, the DTM starts the operation specified in op unless the current status reported in op is sticky.

c. In Capture-DR, the DTM updates data with the result from that operation, updating op if the current op isn't sticky.

3) dmcs Register

用于对DTM进行控制以及获取状态:

5. 实例1:To read an arbitrary Debug Module register

A. scan 0x11 into IR,选择dmi数据寄存器;

B. 通过JTAG TDI引脚scan in a proper value for dmi数据寄存器:

a. with op set to 1,

b. and address set to the desired register address;

C. 在Update-DR状态,读操作开始执行;

Update-DR状态是把(可能是串行扫描入的)数据寄存器的值并行输出。这里就是把dmi寄存器的值并出到调试模块(Debug Module),进而促使调试模块开始执行dmi中指定的操作。

D. 在Capture-DR状态,读dmi寄存器的data域,获取返回的目标寄存器中的数据;

Capture-DR状态是把数据并行存入数据寄存器中,这里就是把调试模块返回的数据并行存入到dmi寄存器中。

E. 返回的不只有dmi.data,还有dmi.op,根据op是否为0来确认返回的数据是否合法。

F. 如果返回的数据不合法,则需要更新IR,选择dmcs数据寄存器,将dmireset写1清除op,方便下次再次在Capture-DR状态读取dmi寄存器,获取调试模块返回的目标寄存器的数据;

G. 如此循环,并根据此次访问的经验,来确定下一次在操作开始到返回数据之间应该等多长时间。

6. 实例2:To write an arbitrary Debug Bus register

A. scan 0x11 into IR,选择dmi数据寄存器;

B. 通过JTAG TDI引脚scan in a proper value for dmi数据寄存器:

a. with op set to 2,

b. and address and data set to the desired register address and data respectively;

C. 接下来的操作与读寄存器一样;

7. almost never scan IR?

这里说几乎不需要扫描IR,言过其实。因为要不停的扫描IR切换dmi和dmcs数据寄存器,读取数据、确定数据是否合法。

如果等待的时间合适,刚好在Capture-DR状态返回的op=0,那么就不需要切换。也就不需要更改IR的值。所以这个“almost never”应该是指最开始学习等待时间时需要使用,而后可能都不需要了。

Rocket - debug - Example: DMI的更多相关文章

  1. Rocket - debug - TLDebugModuleInner - DMI Register Control and Status

    https://mp.weixin.qq.com/s/tI41wu0xaIQ5PRq6F82tNw 简单介绍TLDebugModuleInner中生成DMI控制和状态寄存器使用到的状态. 1. abs ...

  2. Rocket - debug - DMI

    https://mp.weixin.qq.com/s/70BoeS7z4aBZK24zxdZzXA 简单介绍DMI的实现. 1. DMIConsts 定义DMI使用的常量: 其中: a. dmiDat ...

  3. Rocket - debug - Periphery

    https://mp.weixin.qq.com/s/uGxn-Xec0LkwdaSsCtQBvw 简单介绍Periphery的实现. 1. ExportDebugDMI/ExportDebugJTA ...

  4. Rocket - debug - DebugTransport

    https://mp.weixin.qq.com/s/EcsuTjb4hFF9Ncig9Gfhew 简单介绍DebugTransport的实现. 1. JtagDTMConfig 1) JtagDTM ...

  5. Rocket - debug - TLDebugModule

    https://mp.weixin.qq.com/s/EhUb1z5oiIw6dJ-90ifDJA 简单介绍TLDebugModule中的实现. 1. device device是一个设备描述符,包含 ...

  6. Rocket - debug - TLDebugModuleInner - Hart Bus Access

    https://mp.weixin.qq.com/s/deNMEyJ1idJDVoZwwo0A1A 简单介绍TLDebugModuleInner中核心总线访问(Hart Bus Access). 参考 ...

  7. Rocket - debug - TLDebugModuleOuterAsync

    https://mp.weixin.qq.com/s/PSeMVZjSjEFHJgCYZzfa9Q 简单介绍TLDebugModuleOuterAsync的实现. 1. dmi2tl dmi2tl是T ...

  8. Rocket - debug - TLDebugModuleInner - ROM Generation

    https://mp.weixin.qq.com/s/j_CgHU4PnY82NMwJzOqHYg 简单介绍Variable ROM Generation. 1. jalAbstract jalAbs ...

  9. Rocket - debug - TLDebugModuleInner - Program Buffer Access

    https://mp.weixin.qq.com/s/EJVqw7JPjjaib68tENl5AQ 简单介绍TLDebugModuleInner中的Program Buffer Access. 1. ...

随机推荐

  1. 10_CSS入门和高级技巧(8)

    图片透明 先来复习一下盒子的透明问题: opacity:0.6; 介于0~1之间,为了让IE兼容,我们要使用IE自己的滤镜: filter:alpha(opacity=60); 盒子的透明,会让里面的 ...

  2. HTTPS简单介绍

    在HTTP协议中有可能存在信息窃听或者身份伪装等问题,使用HTTPS协议通信机制可以有效地防止这些问题. 1 HTTP协议的缺点 通信使用明文,内容可能被窃听 不用验证通信方的身份,因此可能会遭遇伪装 ...

  3. .net core 3.1 在iis上的发布(踩坑)

    写这篇文章的目的是希望像我一样喜欢.net 的人在发布 core到 iis上时少走点弯路 网上找了些资料,其实实际操作比较简单,就是有几个坑很恶心 首先是你的服务器需要有core 的运行环境,安装前先 ...

  4. 关于QQ可以发消息但是网页刷不出来问题

    相信很多人都遇到过这个问题,明明可以登陆QQ,但是网页就是打不开,而且这种情况经常伴有网卡图标显示叹号的情况.笔者这里就教你一个方法,保证好用. 首先,在开始菜单输入cmd,在命令符模式下点击右键选择 ...

  5. git推送代码问题之:ERROR: [abcdefg] missing Change-Id in commit message footer

    一.问题: 在日常的工作中,使用git推送代码时会出现以下报错,“missing Change-Id in commit message” : qinjiaxi:$ git push origin H ...

  6. Sentinel源码解析四(流控策略和流控效果)

    引言 在分析Sentinel的上一篇文章中,我们知道了它是基于滑动窗口做的流量统计,那么在当我们能够根据流量统计算法拿到流量的实时数据后,下一步要做的事情自然就是基于这些数据做流控.在介绍Sentin ...

  7. webpack配置篇

    开发环境(development)和生产环境(production)的构建目标差异很大.在开发环境中,我们需要具有强大的.具有实时重新加载(live reloading)或热模块替换(hot modu ...

  8. React组件setState

    注意: 1. 自定义组件首字母必须大写.这里是以函数表达式的方式定义子组件的. 2. 使用 ES6 的 class 关键字创建的 React 组件,组件中的方法遵循与常规 ES6 class 相同的语 ...

  9. String的正则函数

    String的正则函数: 查找敏感词: 4种情况 1. 查找一个固定的敏感词的位置i: var i=str.indexOf("敏感词",fromi) 在str中,从fromi位置开 ...

  10. Node.js服务器创建和使用

    1.使用zlib模块对服务器端响应压缩 //1.1引入zlib模块 const zlib=require('zlib'); //1.2 设置内容的压缩形式 'Content-Encoding': 'g ...