基于JTAG的 芯片DEBUG 文章整理

  • 基于JTAG的 芯片DEBUG 架构
CROSS_GDB <--RSP协议---> GDB SERVER(openocd) <--RDI协议--> USB转JTAG小板(openjtag) <-> core(riscv&arm)
							^ 					 |
						   	| 					 |
TELNET 	  <--TELNET协议-----|					 |-----> PC机(带并口)上的软件  	 <-> core(riscv&arm)

RSP : Remote Serial Protocol 协议
	https://sourceware.org/gdb/onlinedocs/gdb/Remote-Protocol.html
RDI : Remote Debug Interface 协议

	// UM08001.pdf , 即 J-Link-J-Trace-User-Guide
	// 供 iar,keil,ads 调用
	// The J-Link RDI software is a remote debug interface for J-Link. 
	// It makes it possible to use J-Link with any RDI compliant debugger.
	// The main part of the software is an RDI-compliant DLL, which needs to be selected in the debugger. 
可以看到这里面有四个大块
	GDB
	OPENOCD
	adapter
	soc
针对每一块内容,我计划会用一系列文章来描述
	GDB
		0.gdb 编译为 riscv-gdb
		1.gdb的命令部分
		2.gdb的通信(与openocd)部分
			https://ithelp.ithome.com.tw/articles/10197385
	OPENOCD
		0.openocd 编译
			https://ithelp.ithome.com.tw/articles/10192529
		1.openocd的gdb telnet服务器部分
			https://ithelp.ithome.com.tw/articles/10193390
		2.openocd的命令解析部分
			https://ithelp.ithome.com.tw/articles/10193006
		3.openocd的adapter(例如jlink)部分
			https://ithelp.ithome.com.tw/articles/10193390
		3.openocd的target(例如riscv)部分
			https://ithelp.ithome.com.tw/articles/10193390
	adapter
		0.adapter的主芯片和电路图设计
			openjtag
		1.adapter的主机usb驱动协议栈部分
			windows 驱动 或者 linux ko
		2.adapter的从机usb驱动协议栈(发送接收)部分
			STM32 OTG-FS/HS HID 或者 MSC
		3.adapter的从机jtag(TDI与TDO)部分
			
		4.adapter的从机(虚拟寄存器实现部)部分
			
	soc
		1.riscv的jtag状态机部分与ir_scan和dr_scan
		2.riscv的DMT寄存器
		3.riscv的DM寄存器
		4.功能状态控制reset  halt reset&halt resume poll
		5.功能读取寄存器和内存
		6.功能断点观察点
		7.功能单步		

还计划描述
	应用场景1 : 单个命令
		reset  halt reset&halt resume poll
		读寄存器
		读内存
		断点
		单步
	应用场景2 : 组合命令
		1.下载二进制到ram并从ram启动的调试
		2.下载到flash
		3.下载二进制到flash并从flash启动的调试
	
	jtag // soc与adapter的通信基础
		1. TAP 及其 寄存器
		2. 状态机
		3. 线序


如何调试
	1. gdb
		set debug remote 1 					//打印通信包,要在target remote 前 做
		set logging file log_xxxxxxx
		set logging on
		#set logging off 
		set trust-readonly-sections off 	//强制发送jtag信号// ??? TODO
		monitor debug_level xxx 			//设置 openocd 的打印等级, 要在 target remote 之后做
	2. openocd
		可通过 telnet或gdb 控制 打印等级 (debug_level xxx) // 打印log在日志文件中
	3. adapter
		adapter的调试看具体实现
		---
		adapter与soc的时序可以通过 逻辑分析仪 抓取
	4. soc
		

gdb

openocd

  • openocd (一) 概念介绍
  • openocd riscv jtag动作解析

用户接口

  • jtag 调试中 提供给用户的命令接口
如果用户要脱离这个框架,
比如要直接驱动jlink驱动,则要依据 ... 协议 // TODO
比如脱离gdb,要直接连接 gdbserver, 则要依据 ... 协议 // TODO

USB转JTAG小板

arm 有很多这样的小板
riscv 目前还没有 类似的产品 出现// TODO
openjtag
  • USB转JTAG小板 (一)
  • [一个usb转jtag实现是否可以兼容所有的芯片设计]

jtag

  • JTAG (一)杂谈
  • JTAG (二) 协议
  • JTAG (三) jtag实例 riscv
  • JTAG (四) jtag实例arm cortex-m4&cortex-m4的DAP寄存器及访问方法

arm-debug

riscv-debug

你可能感兴趣的:(杂七杂八总览,debug,jtag)