打印

实在忍不住想掀桌子!LPC2136的JTAG和外看门狗咋不能共存呢?

[复制链接]
4075|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Wxy8030|  楼主 | 2009-2-5 14:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
因为始终认为CPU不挂个独立的WDT是不安全的,于是用LPC2136芯片时就也在RST上挂了一个X5043......噩梦开始了——
1、先是一开看门狗后,ISP用不了了,摆明了ISP和看门狗冲突,估计是烧写FLASH的时候不能复位......,加电路,用ISP的信号来开关看门狗(即ISP跳线插上后通过一个电路把看门狗的RST断开)!
(有人说看门狗加一个独立的跳线不就行了不,我却始终不赞成这种做法,这样无疑和生产和使用带来漏洞!);
2、解决了看门狗和ISP冲突的问题后,发现JTAG用不了......我就想,等复位后把ISP的跳线插上,不就等与把WDT关了吗?于是我一边看着示波器一边拿着跳线帽,那边RST电平一变成高,我就把跳线插上.......结果试了N次后发现,只要看门狗开着(1.4S),就甭想不进入ISP!
    有兄弟可能会想是不是插跳线的时候因为RST脚信号波动产生复位了?——非也非也,程序在正常运行后我随便咋插拔跳线帽也不会引起复位......复位端有滤波电路的!
3、.........最后还是没办法,只能把看门狗关掉调试.........这样无疑给调试程序带来漏洞!

搞到这里就忍不住想骂LPC213X的设计者,难道设计这个CPU时就没想到使用者会在外边挂看门狗吗?

相关帖子

沙发
xzl| | 2009-2-5 14:29 | 只看该作者

呵呵,下载或调试时必须断开外部狗

使用特权

评论回复
板凳
Wxy8030|  楼主 | 2009-2-5 14:31 | 只看该作者

下载时断开我还能接受,调试时也断开,那环境就变了啊—

开着WDT能下载能调试的芯片多了去了,咋这么新的芯片还不具备这功能呢!

使用特权

评论回复
地板
mohanwei| | 2009-2-5 15:22 | 只看该作者

有内狗不用非要用外狗??内狗能损坏的时候这片CPU

还可能正常工作么?
所以外狗是多余的。

使用特权

评论回复
5
sutie2008| | 2009-2-5 15:28 | 只看该作者

C8051F系列也是这样

我们现在加了一个拨码开关做选择,下载完程序再闭合,挺郁闷的

使用特权

评论回复
6
btiger2000| | 2009-2-5 17:24 | 只看该作者

狗应该是调试完程序后,最后成品才启用的吧?

使用特权

评论回复
7
李冬发| | 2009-2-5 17:35 | 只看该作者

LZ真逗!这...怎么说你啊。

调试的时候,本身环境就与真实不同,还非要强调狗必须再场。真倒塌。

使用特权

评论回复
8
Wxy8030|  楼主 | 2009-2-5 18:14 | 只看该作者

TO 楼上

没有最好只有更好,不能因为实验室环境与现场使用环境不同就干脆完全不去理会现场的环境!我们能做的是尽量去靠近而已

再说WDT难道只是把飞了的程序复位吗?

使用特权

评论回复
9
zq1987731| | 2009-2-6 01:29 | 只看该作者

。。。

    大多数内狗本质上不过就是个定时器,把飞了的程序拉回是没问题(因为程序即使飞了好歹还是运行状态),而本人前阶段的实验中,一定的EFT干扰下便可直接将防护不够严密的MCU打至死机状态,定时器都一并卡死(当然包括内狗),可靠性从何谈起?但如果干扰不够强烈(这个量比较难界定),内狗勉强可以解决问题。
    所以外狗在某些场合是必须的,可是调试的时候加外狗,个人认为多此一举,外狗的作用无非就是补救,千万不能指望它起“主要”作用,若外狗一天能动作几十次的,可以说该产品在抗干扰方面已经失败了。
    往好的方面看这一缺点也可作为优点——使JTAG口失效,增加产品**难度。
    此外抗干扰方面均是有“标准”可言的,而不是靠模拟现场环境来解决,不然哪来“量”的概念?就好比测试工控板的可靠性,在电源线上叠加个大电流感性负载,找个人在那边狂按,甚至接个电焊机狂焊,是“模拟”了最坏现场环境吧?然后试了1000次后没死机情况是否就能认定为“抗干扰能力满足”了呢?谁知道是不是1001次时就死机了呢...
    做产品时确实要理会现场的环境,但主要是分析现场可能存在的干扰源,干扰进入途径,干扰的危害程度。针对相关的干扰等级制定抗干扰方案,而不是真的把样品放到现场去看死不死机,即费工夫也没意义。

使用特权

评论回复
10
LPcfANS| | 2009-2-6 08:42 | 只看该作者

家里的狗不专业...

 mohanwei 发表于 2009-2-5 15:22 侃单片机 ←返回版面    

4楼: 有内狗不用非要用外狗??内狗能损坏的时候这片CPU 

还可能正常工作么?
所以外狗是多余的。
 
 

使用特权

评论回复
11
dragon_hn| | 2009-2-6 21:48 | 只看该作者

我觉得楼主应该是自己硬件没搞懂!

估计是纯搞软件的.

使用特权

评论回复
12
雁舞白沙| | 2009-2-6 21:57 | 只看该作者

同意楼上!

使用特权

评论回复
13
刘前辈| | 2009-2-6 22:17 | 只看该作者

7楼、11楼说得对。

调试时的语句一条条单步运行,断点处是监控程序在运行。程序时间慢多了,狗就失控了。
也好办,任何狗都是可以禁止的。调试时肯定要拴起来的。不需要它叫。

狗当然是在所有程序调试正常之后甚至产品投入运行一段正常之后才放出来的。

使用特权

评论回复
14
hotpower| | 2009-2-6 22:59 | 只看该作者

用硬件肯定能切换~~~

使用特权

评论回复
15
Wxy8030|  楼主 | 2009-2-6 23:40 | 只看该作者

能否请菜农指点?

???

使用特权

评论回复
16
xiachu| | 2013-12-11 19:37 | 只看该作者
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/debug.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include "driverlib/sysctl.h"
#include "driverlib/watchdog.h"
#include "utils/uartstdio.h"
//  看门狗定时器中断服务程序,执行喂狗和闪烁用户指示灯功能。

void WatchdogIntHandler(void)
{
        //清看门狗定时器中断服务程序
        ROM_WatchdogIntClear(WATCHDOG0_BASE);
        //翻转GPIOB6
        ROM_GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_6,ROM_GPIOPinRead(GPIO_PORTB_BASE,GPIO_PIN_6)^GPIO_PIN_6);
       
}
//  该例程演示看门狗定时器的用法。
int main(void)
{
        ROM_SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_USE_OSC|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ);
        //  使能本例程用到的外设功能单元UART1 GPIOB
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1);
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
    GPIOPinConfigure(GPIO_PB4_U1RX);
    GPIOPinConfigure(GPIO_PB5_U1TX);
    ROM_GPIOPinTypeUART(GPIO_PORTB_BASE, GPIO_PIN_4 | GPIO_PIN_5);
    //  配置UART1为115200波特率、8-N-1  数据模式。
    UARTStdioInit(1);
    UARTprintf("Watchdog example\n");



        //  使能本例程用到的外设。
        ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_WDOG0);

        //  使能全局中断。
        ROM_IntMasterEnable();
        //  设置GPIO B6 为输出口
        ROM_GPIOPinTypeGPIOOutput (GPIO_PORTB_BASE, GPIO_PIN_6);
        ROM_GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_6, 0<<6);
         //  使能看门狗定时器中断。
        ROM_IntEnable(INT_WATCHDOG);
         //  设置看门狗定时器的重载值
        ROM_WatchdogReloadSet(WATCHDOG0_BASE, SysCtlClockGet()/100);
        //  使能看门狗定时器的复位功能。
        ROM_WatchdogResetEnable(WATCHDOG0_BASE);
         //  启动看门狗定时器。
        ROM_WatchdogEnable(WATCHDOG0_BASE);
         //  死循环。
        while(1);

}
板子是LM3S9B92,运行这个程序后现在用CCS不能debug了,是不是这个程序一直调用中断把JTAG锁死了?该怎么办才好呢

使用特权

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

本版积分规则

141

主题

2071

帖子

2

粉丝