打印
[ZLG-MCU]

关于JTAG锁死问题,必须要引起重视!

[复制链接]
17249|36
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zlgmcu|  楼主 | 2008-3-13 10:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  现在,调试LM3S系列单片机一般采用JTAG接口。用户在使用过程中,可能会出现芯片的JTAG接口锁死的问题,即用LM LINK调试器(或其它JTAG调试器)再也无法连接的情况。

  一旦JTAG接口被锁死,则芯片一般只有报废处理(可联系我们维修)!!因此,我们在编写程序时千万要引起足够的重视,必须插入预防JTAG失效的代码。

  导致芯片JTAG接口被锁死的原因有多种,如与JTAG接口复用的GPIO被占用、程序中存在定时中断(或其它中断)等等,但最常见的原因还是与JTAG接口复用的GPIO被占用,从而导致上电后JTAG调试器来不及与芯片连接。

  附件Demo例程是个操作GPIO的简单示例,里面自带防止JTAG失效的代码,请先参考。该程序的工作原理是:将可以预防JTAG锁死的函数WaitJTAG()插入到main()函数的第一个可执行;芯片正常复位情况下,直接运行后面的代码,即WaitJTAG()函数不影响正常的操作;如果需要JTAG连接,则先按住KEY不松手,再复位,则程序进入一个死循环里,以等待JTAG连接。

  例程中采用的按键KEY是PA2,配置为:
#define  KEY_PORT               SYSCTL_PERIPH_GPIOA
#define  KEY_PIN                GPIO_PORTA_BASE , GPIO_PIN_2

  KEY配置为其它GPIO管脚也可以,例如PD4:
#define  KEY_PORT               SYSCTL_PERIPH_GPIOD
#define  KEY_PIN                GPIO_PORTD_BASE , GPIO_PIN_4

  但是,要注意,KEY不可配置为与JTAG接口复用的GPIO上。

  硬件电路设计注意事项。附件里还有一份LM3S系列单片机最小系统电路原理图及电路说明,请认真参考。作为预防JTAG失效的按键KEY当然不能接在与JTAG接口复用的GPIO上,程序当中也不能进行错误的配置。


附:与JTAG接口复用的GPIO管脚
=====================
GPIO管脚    JTAG接口
---------------------
  PB7        /TRST
  PC0         TCK
  PC1         TMS
  PC2         TDI
  PC3         TDO
=====================


(zlgmcu_wdx)
相关链接:https://bbs.21ic.com/upfiles/img/20083/200831310914115.rar

相关帖子

沙发
农民讲习所| | 2008-3-13 10:13 | 只看该作者

能不能使用极低的工作频率解决

这样可以还未到执行JTAG相关IO设置时,JTAG提前连接?

使用特权

评论回复
板凳
zlgmcu|  楼主 | 2008-3-13 10:39 | 只看该作者

我试过,好像不行,会出现连接超时错误

(zlgmcu_wdx)

使用特权

评论回复
地板
Andy1990zx| | 2008-3-13 11:22 | 只看该作者

请问这种维修要不要钱?

请问这种解锁维修要不要钱?

使用特权

评论回复
5
Andy1990zx| | 2008-3-13 11:42 | 只看该作者

DEMO程序不太好~

这是光盘里的DEMO
**--------------File Info-------------------------------------------------------------------------------
** File Name:           demo.c
** Last modified Date:  2006-11-15 
** Last Version:        v1.0
** Description:         Cross Studio for ARM Demo程序
** 
**------------------------------------------------------------------------------------------------------
** Created By:          Zhou Lishan
** Created date:        2006-11-15 
** Version:             v1.0
** Descriptions:
**
**------------------------------------------------------------------------------------------------------
** Modified by:         Kang qinhua
** Modified date:       2008.01.18
** Version:             v1.1
** Description:
**
********************************************************************************************************/
#include "hw_ints.h"
#include "hw_memmap.h"
#include "hw_types.h"
#include "gpio.h"
#include "sysctl.h"

#define PINS    GPIO_PIN_4

void delay(int d)
{
  for( ; d; --d);
}

int main(void)
{
    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
                   SYSCTL_XTAL_6MHZ);

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
    GPIODirModeSet(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_DIR_MODE_OUT);
    while(1) {
       GPIOPinWrite(GPIO_PORTC_BASE, PINS, PINS);
       delay(200000);
       GPIOPinWrite(GPIO_PORTC_BASE, PINS, ~PINS);
       delay(200000);
    } 
}

首先,没加放JTAG失效的代码
然后,使用的是PC4(LED4)  让很多粗心的人没有看清楚的就直接以为PC4-LED4,联想到PC2-LED2,PC3-LED3.................,而恰好PC2 PC3都是JTAG引脚......
如果换用LED1就不会有这个问题了 ^_^

使用特权

评论回复
6
农民讲习所| | 2008-3-13 11:43 | 只看该作者

做个RS触发电路,JTAG有信号时RESET释放?

使用特权

评论回复
7
zlgmcu|  楼主 | 2008-3-13 13:39 | 只看该作者

开发板在保修期内维修一般是免费的

详细请咨询维修人员。

(zlgmcu_wdx)

使用特权

评论回复
8
zlgmcu|  楼主 | 2008-3-14 08:46 | 只看该作者

5楼说到点子上了,光盘Demo确实存在误导的嫌疑

我们在下次修订产品版本时,会解决此问题的。

(zlgmcu_wdx)

使用特权

评论回复
9
zheng79| | 2008-3-14 09:23 | 只看该作者

不明白

调试器不会复位CPU,再连接的吗?

使用特权

评论回复
10
wkman| | 2008-3-14 14:12 | 只看该作者

汗.还好,从来jtag口都是空出的,没有复用过...

使用特权

评论回复
11
liyihe| | 2008-3-18 21:07 | 只看该作者

jtag锁死了,北京的找谁维修

jtag锁死了,北京的找谁维修

使用特权

评论回复
12
apple163| | 2008-3-19 08:44 | 只看该作者

其实方法可以扩展到很多种;

比如你的IO很紧张(复用JTAG说明特别紧张),舍不得那个IO。你可以通过UART,SPI,IIC,等设置成等待JTAG。不过最好不要使用死循环,进入定时等待就可以了。一但等待JTAG超时还是要继续运行用户目标程序的,死循环不是什么好方案!

使用特权

评论回复
13
machunshui| | 2008-3-19 10:49 | 只看该作者

这岂不是一个比较严重的bug

"导致芯片JTAG接口被锁死的原因有多种,如与JTAG接口复用的GPIO被占用、程序中存在定时中断(或其它中断)等等"

要是有"程序中存在定时中断(或其它中断)等等,jtag就锁死导致芯片报废你“,

这岂不是一个比较严重的bug?

使用特权

评论回复
14
machunshui| | 2008-3-19 11:00 | 只看该作者

应该要求luminary,从硬件上防止啊

应该要求luminary,从硬件上防止,

或者编译器厂家修改jtag驱动解决,

TJTAG可以无响应,

但不能烧片子。

使用特权

评论回复
15
xwj| | 2008-3-19 11:22 | 只看该作者

是的,设计逻辑不完善造成的

应该象AVR一样,只有烧写熔丝才能关掉JTAG,不关JTAG的话对应IO口不能做IO使用

至少关键引脚应该要有强制进入JTAG的逻辑

使用特权

评论回复
16
machunshui| | 2008-3-19 11:28 | 只看该作者

片子报废,这种事情最讨厌了。

片子报废,这种事情最讨厌了。

以前象TI的tms320f2812,如果烧写flash时候,复位或者调电,flash就锁死了,
片子就报废,板子也基本报废。

现在,没想到luminary也有JTAG锁死的情况。

使用特权

评论回复
17
machunshui| | 2008-3-20 08:16 | 只看该作者

zlg的解决方法仍然又缺陷

”芯片正常复位情况下,直接运行后面的代码,即WaitJTAG()函数不影响正常的操作;如果需要JTAG连接,则先按住KEY不松手,再复位,则程序进入一个死循环里,以等待JTAG连接。“

用户要是忘记按key键盘,仍然会烧片子。

先运行一个定时查询函数,可行否?

zlg应该测试出lmlink的连接时间,保证定时查询函数的执行事件远远大于lmlink连接,

可行否?

使用特权

评论回复
18
xhtxzxw| | 2008-3-20 16:43 | 只看该作者

嘿嘿

把晶体焊下来,再连接JTAG,删除flash,是不是就可以了?

使用特权

评论回复
19
machunshui| | 2008-3-20 17:10 | 只看该作者

原来不是硬件损坏

原来不是硬件损坏,而是每次jtag都来不及连接从而导致芯片报废。

看来只有等lunminary出带固化bootloader的芯片,就没事了。

使用特权

评论回复
20
machunshui| | 2008-3-20 17:11 | 只看该作者

要是18楼的可行

要是18楼的可行,
这真是绝招!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

81

主题

1146

帖子

0

粉丝