目前在做一颗soc芯片arm9的前端仿真,我正在尝试写一段testbench,给JTAG端口信号,测试简单的JTAG访问操作。
看了twentone和duyunhai的<ARM JTAG调试原理>文档后,对JTAG TAP controller的状态有了一些认识。
经过两三天的调试,有了一点小成果。就是能从shift状态下,看到了TDO上输出4b'0001信号,具体执行操作如下:
test-logic reset -->run-test/idle --> select -DR-Scan -->select-IR-Scan -->Capture -IR --> Shift -IR(在该状态下,保持TCK运行4个clk,就能看到4b'0001信号,再保持TCK,就能看到TDI上的数据从TDO输出到端口) -->
...
目前的问题是,不知道接下去怎么配置,通过执行IDCODE指令,TDO读出arm ID
共9条
1/1 1 跳转至页
非常感谢版主给我的指点。:)
但是对配置IDCODE指令,没有成功。
如下图是我采用的时序图。期望能在配置了指令寄存器后,能在shift-DR时把ID寄存器的值读出来,实际没有。
具体操作流程是:test-logic reset -->run-test/idle --> select -DR-Scan -->select-IR-Scan -->Capture -IR --> Shift -IR(5个TCK) -->Exit1-IR -->Update-IR --> run-test/idle --> select -DR-Scan -->Capture -DR --> Shift -DR ---
我看了arm9的manual,发现指令是一样的,也是1110。
我又尝试用一个别的公司arm芯片,用示波器通过Multi-ice连接到目标板,然后用示波器直接在板上采集波形。因为一开始会有芯片加载过程,我认为可能就是在识别ID号。读取波形,没有发现tdo数据,如图:兰线是TCK(一堆无规则的脉冲),紫线是TMS,绿线是TDO
假设现在在RUN-TEST状态,写IDCODE指令(长度=4,指令=B'1110)的过程应该如下:
RUNTEST -> TMS=1,+TCK -> SELECTDR -> TMS=1,+TCK -> SELECTIR -> TMS=0,+TCK -> CAPTUREIR -> TMS=0,+TCK -> SHIFTIR -> TMS=0,TDI=0,+TCK -> SHIFTIR -> TMS=0,TDI=1,+TCK -> SHIFTIR -> TMS=0,TDI=1,+TCK -> SHIFTIR -> TMS=1,TDI=1,+TCK -> EXITIR -> TMS=1,+TCK -> UPDATEIR -> TMS=0,+TCK -> RUNTEST
共9条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |