1_预防JTAG失效的问题.docVIP

  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文档。上传文档
查看更多
如何预防 JTAG失效 JTAG是一种国际标准测试协议(IEEE 1149.1 兼容) ,主要用于芯片内部测试。现在多数的高级器件都支持 JTAG协议,如 ARM、DSP、FPGA 器件等。标准的 JTAG接口是 4 根线:测试模式选择 TMS、测试时钟 TCK、测试数据输出 TDO,测试数据输入 TDI。在实际系统中可能还有测试复位 TRST,低电平有效。 我们调试 Stellaris 系列 ARM 一般都采用 JTAG 接口。传统的接口方式是电脑打印机并口转 JTAG,但现在很多电脑已经没有并口了,尤其是便携的笔记本,这对电子工程师来说可能会很不方便。但是我们选用J-link仿真器,即 USB 转 JTAG的硬件调试接口,因此调试起来会非常方便。如下图所示: 但是,在调试过程中有可能偶尔出现芯片的 JTAG接口连接失效的问题,即遇到用调试器再也无法连接的情况。导致芯片 JTAG接口连接失效的原因有多种,如与 JTAG接口复用的 GPIO管脚被占用、程序中已启用看门狗定时器(总是在不断复位,干扰调试)等等,但最常见的原因还是与 JTAG 接口复用的 GPIO管脚被占用,从而导致上电后 JTAG调试器来不及与芯片连接。如下表 1.2中列出了与 JTAG接口复用的 GPIO管脚。 如果出现JTAG接口连接失效的情况,可以通过LMFlashProgrammer编程工具软件来解锁。该软件可以在Luminary Micro官方网站“http://www.LuminaryM”下载到。解锁操作的具体步骤是: 运行 LMFlashProgrammer 软件,把 JTAG Speed(Hz)调到 100,000 以下; 点击在 Flash Utilties选项卡里的 Erase按钮进行擦除操作,看能否恢复连接; 如果不行,则切换到 Other Utilties 选项卡,在 Debug Port Unlock 复选框里选择芯片的家族: LM3S1000以下的为Sandstorm家族, LM3S1000以上的为Fury和DustDevil家族; 先按住复位键不松手,再点击 Other Utilties 选项卡里的 Unlock 按钮进行解锁操作; 操作完成后重新复位芯片即完成解锁操作,同时片内 Flash内容也被擦除。 需要当心的是:对于 Sandstorm 家族(即 LM3S100、300、600、800 等) ,一旦 JTAG接口因为误将其无防护地配置为 GPIO接口而被锁定,则有可能再也无法恢复。为了防患于未然,我们建议在编写每一个应用程序时都必须要在 main( )函数的开始处插入一段能够预防 JTAG失效的代码(对于 LM3S1000 以上系列也推荐这样做) 。在 Demo 例程中 jtagWait( )函数就是预防 JTAG失效的范例代码,请认真参考。该函数的工作原理是: 将能够有效预防 JTAG失效的函数 jtagWait( )插入到 main( )函数的开始处; 芯片正常复位时, 由于 KEY没有被按下, 因此会直接运行后面的代码, 即 jtagWait( )函数不影响正常的操作;【注:KEY为硬件电路设计时加入的按键。】 当需要 JTAG 连接时,先按住 KEY 不松手,再复位,则程序进入一个死循环,以等待 JTAG连接,在此状态下连接是非常可靠的。 有了 jtagWait( )函数的保障,我们就可以放心大胆地使用与 JTAG接口复用的 GPIO了,不必担心 JTAG接口再被锁死的问题了!另外,我们还可以充分利用 JTAG接口的这一特性来为自己的程序加密,以防非法复制。 例如:如下的代码段即为“防止JTAG失效”用。 // 定义KEY #define KEY_PERIPH SYSCTL_PERIPH_GPIOB #define KEY_PORT GPIO_PORTB_BASE #define KEY_PIN GPIO_PIN_5 // 防止JTAG失效 void jtagWait(void) { SysCtlPeripheralEnable (KEY_PERIPH); // 使能KEY所在的GPIO端口 GPIOPinTypeGPIOInput (KEY_PORT, KEY_PIN); // 设置KEY所在管脚为输入 if (GPIOPinRead(KEY_PORT, KEY_PIN) == 0x00) // 若复位时按下KEY,则进入 { for (;;); // 死循环,以等待JTAG连接 }

文档评论(0)

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

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

1亿VIP精品文档

相关文档