Rocket - debug - Example: DMI
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的更多相关文章
- Rocket - debug - TLDebugModuleInner - DMI Register Control and Status
https://mp.weixin.qq.com/s/tI41wu0xaIQ5PRq6F82tNw 简单介绍TLDebugModuleInner中生成DMI控制和状态寄存器使用到的状态. 1. abs ...
- Rocket - debug - DMI
https://mp.weixin.qq.com/s/70BoeS7z4aBZK24zxdZzXA 简单介绍DMI的实现. 1. DMIConsts 定义DMI使用的常量: 其中: a. dmiDat ...
- Rocket - debug - Periphery
https://mp.weixin.qq.com/s/uGxn-Xec0LkwdaSsCtQBvw 简单介绍Periphery的实现. 1. ExportDebugDMI/ExportDebugJTA ...
- Rocket - debug - DebugTransport
https://mp.weixin.qq.com/s/EcsuTjb4hFF9Ncig9Gfhew 简单介绍DebugTransport的实现. 1. JtagDTMConfig 1) JtagDTM ...
- Rocket - debug - TLDebugModule
https://mp.weixin.qq.com/s/EhUb1z5oiIw6dJ-90ifDJA 简单介绍TLDebugModule中的实现. 1. device device是一个设备描述符,包含 ...
- Rocket - debug - TLDebugModuleInner - Hart Bus Access
https://mp.weixin.qq.com/s/deNMEyJ1idJDVoZwwo0A1A 简单介绍TLDebugModuleInner中核心总线访问(Hart Bus Access). 参考 ...
- Rocket - debug - TLDebugModuleOuterAsync
https://mp.weixin.qq.com/s/PSeMVZjSjEFHJgCYZzfa9Q 简单介绍TLDebugModuleOuterAsync的实现. 1. dmi2tl dmi2tl是T ...
- Rocket - debug - TLDebugModuleInner - ROM Generation
https://mp.weixin.qq.com/s/j_CgHU4PnY82NMwJzOqHYg 简单介绍Variable ROM Generation. 1. jalAbstract jalAbs ...
- Rocket - debug - TLDebugModuleInner - Program Buffer Access
https://mp.weixin.qq.com/s/EJVqw7JPjjaib68tENl5AQ 简单介绍TLDebugModuleInner中的Program Buffer Access. 1. ...
随机推荐
- spring学习笔记(五)自定义spring-boot-starter(1)
在我们开始定义之前我们应该知道springBoot的大致运行原理,我们从springBoot启动类开始.首先我们看下这个注解,@SpringBootApplication,跟进去可以看到如下代码: @ ...
- Centos7 网卡桥接
一.在centos7主机创建用于虚拟化的网桥 1)增加 /etc/sysconfig/network-scripts/ifcfg-br0 DEVICE=br0BOOTPROTO=staticONBO ...
- ubuntu安装java方法
详情请点链接:https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-get-on-ubuntu-1 ...
- 【漫画】JAVA并发编程 J.U.C Lock包之ReentrantLock互斥锁
在如何解决原子性问题的最后,我们卖了个关子,互斥锁不仅仅只有synchronized关键字,还可以用什么来实现呢? J.U.C包中还提供了一个叫做Locks的包,我好歹英语过了四级,听名字我就能马上大 ...
- [hdu5360]贪心
题意:一个人想邀请n个人出去玩,假设当前同意和他一起去的人数为cnt,那么他去邀请i的时候,i同意的条件是L[i]<=cnt<=R[i],L[i],R[i]是给定的,问怎样安排邀请顺序,使 ...
- [hdu4552]最长公共前缀
题意:给一个串s,求s的每个前缀出现次数之和. 思路:对于一个后缀i,设i和原串的最长公共前缀为k,则当前总共可以产生k个答案.因此原题转化为求所有后缀与原串的最长公共前缀之和.模板题.以下为通过模板 ...
- markdown:列表、表格、代码实现
插入列表 1. dsf2. dsds 插入表格header 1 | header 2---|---row 1 col 1 | row 1 col 2row 2 col 1 | row 2 col 2 ...
- Vue中如何监听组件的原生事件
在首页开发中,右下角有一个返回顶部的小箭头,将它单独封装成一个BackTop组件,但是它何时出现需要依赖于首页的滑动,即另外一个Scroll组件.如果直接在BackTop组件里面监听,则需要通过thi ...
- 【雕爷学编程】Arduino动手做(49)---有源蜂鸣器模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备 ...
- 「雕爷学编程」Arduino动手做(38)——joystick双轴摇杆模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...