嵌入式软件工程师-嵌入式系统调试与测试-JTAG调试_JTAG安全与限制.docxVIP

嵌入式软件工程师-嵌入式系统调试与测试-JTAG调试_JTAG安全与限制.docx

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

PAGE1

PAGE1

JTAG调试基础

1JTAG接口与引脚功能

JTAG(JointTestActionGroup)接口是一种国际标准测试协议,主要用于芯片的测试和调试。它通过一组特定的引脚来实现对芯片内部电路的测试和访问,这些引脚包括:

TCK(TestClock):测试时钟输入,用于同步JTAG指令和数据的传输。

TMS(TestModeSelect):测试模式选择输入,用于控制状态机的模式切换。

TDI(TestDataInput):测试数据输入,用于向芯片内部发送测试或调试数据。

TDO(TestDataOutput):测试数据输出,用于从芯片内部读取测试或调试数据。

TRST(TestReset):测试复位输入,用于复位芯片,不是所有芯片都支持此引脚。

通过这些引脚,JTAG可以实现对芯片内部的扫描链(ScanChain)进行控制,从而进行边界扫描测试(BoundaryScanTesting),检查芯片的焊接质量和电路连接情况。此外,JTAG还可以用于芯片的编程、调试和故障诊断。

2JTAG协议详解

JTAG协议的核心是状态机(StateMachine)和指令集(InstructionSet)。状态机控制JTAG操作的流程,而指令集则定义了可以执行的具体操作。

2.1状态机

JTAG状态机有以下几种状态:

测试逻辑复位(Test-Logic-Reset):初始状态,所有引脚处于高阻态。

运行测试/空闲(Run-Test/Idle):在此状态下,可以进行数据的输入和输出。

选择DR扫描(Select-DR-Scan):选择数据寄存器(DataRegister)进行操作。

捕获DR(Capture-DR):将TDI的数据捕获到数据寄存器中。

移位DR(Shift-DR):在数据寄存器中进行数据的移位操作。

退出1DR(Exit1-DR):从移位状态退出到捕获状态的过渡状态。

暂停DR(Pause-DR):暂停数据寄存器的操作。

退出2DR(Exit2-DR):从暂停状态退出到运行测试/空闲状态的过渡状态。

选择IR扫描(Select-IR-Scan):选择指令寄存器(InstructionRegister)进行操作。

捕获IR(Capture-IR):将TDI的数据捕获到指令寄存器中。

移位IR(Shift-IR):在指令寄存器中进行数据的移位操作。

退出1IR(Exit1-IR):从移位状态退出到捕获状态的过渡状态。

暂停IR(Pause-IR):暂停指令寄存器的操作。

退出2IR(Exit2-IR):从暂停状态退出到运行测试/空闲状态的过渡状态。

2.2指令集

JTAG指令集包括:

测试数据输入(TestDataInput):将数据输入到数据寄存器中。

测试数据输出(TestDataOutput):从数据寄存器中输出数据。

测试数据输入/输出(TestDataInput/Output):同时进行数据的输入和输出。

测试指令输入(TestInstructionInput):将指令输入到指令寄存器中。

测试指令执行(TestInstructionExecute):执行指令寄存器中的指令。

2.3示例:使用Python进行JTAG操作

#导入JTAG库

importpyjtag

#初始化JTAG链

jtag_chain=pyjtag.JTAGChain()

#添加设备到JTAG链

jtag_chain.add_device(pyjtag.XilinxFPGA())

#设置JTAG链的引脚

jtag_chain.set_tck(1000000)#设置时钟频率为1MHz

jtag_chain.set_tms(0)#设置TMS为0,进入运行测试/空闲状态

jtag_chain.set_trst(1)#设置TRST为1,进行复位

#执行JTAG操作

jtag_chain.shift_tdi([0x01,0x02,0x03,0x04])#向数据寄存器中输入数据

jtag_chain.capture_dr()#捕获数据寄存器中的数据

output_data=jtag_chain.shift_tdo(4)#从数据寄存器中读取数据,读取4位

#输出结果

print(读取的数据:,output_data)

在上述示例中,我们使用了Python的pyjtag库来实现JTAG操作。首先,我们初始化了一个JTAG链,并添加了一个XilinxFPGA设备。然后,我们设置了JTAG链的引

您可能关注的文档

文档评论(0)

kkzhujl + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档