eddiewwm 发表于 2019-1-30 17:00:47

LGT8F684P 的一個導致再不能燒寫的經驗

把SWD及SWC腳都設定成輸出,並在SWC腳上以0.5秒高變化,RSTN/RA3設成I/O mode,用SDK產生項目,在 main.c 內按預想加回如下:
#include "allinone.h"
// Import external definitions
extern void init_modules(void);
int main(void)
{
// Device initialization
init_modules();
// Add your code from here
while(1)
{
gppToggle(GPPA, P1);
delayms(500);
}
return 0;
}
結果:芯片不能再 燒寫了
初步結論:芯片因沒法再燒寫,故判定為已損壞
建議:最好是不要用 Reset,SWC和SWD三腳。若要使reset腳可作輸出/輸入,則其餘兩腳應只作輸入。若能保留不用Reset腳,則 SWC和SWD可任用(這個由群友bbsniua提出,本人未經驗證,但他本人已做過成品,很有信心)。

eddiewwm 发表于 2019-1-30 17:39:09

bbsniua 的一些相關經驗 和提供的對應程序範例:

一个做IO插入代码看时序,一个做模拟串口

复位不变

只有接触不良会坏

核心板的不同之处就是有个TS被接VCC了

我把那根线切断了后基本没发现过损坏的了

当然滤波电容是4.7uF的

这是我的经验

还有就是下载口被用作输出,复位也被用做输出的,那个加了判断


#include "lgt8f684a.h"                        // 库文件
#define _XTAL_FREQ        8000000        // 8M/4T时定义时钟频率为8M

#define LED RC0

void main()
{
        TRISA1 = 0;                        // RA1设置为输出
        RA1 = 0;                                // RA1输出0
        TRISC0 = 0;
        LED = 0;

        __delay_ms(1);        // 延时1ms
        if(RA1)                                        // 检测到编程器连接时RA1被拉到1
        {
                TRISA1 = 1;                // 把RA1恢复输入
                while(1)
                {
                        LED ^= 1;                // LED取反
                        __delay_ms(100);        // 延时100ms*2闪一次
                }
        }
       
        while(1)
        {
                LED ^= 1;
                __delay_ms(1000);        // 1000ms*2闪一次
        }
}

eddiewwm 发表于 2019-1-31 11:12:37

本帖最后由 eddiewwm 于 2019-1-31 15:38 编辑

以下是用 bbsniua 提供的基礎,把14個I/O全作輸出的走馬燈程序,實證工作正常,芯片也沒出現不能再燒寫的情況。當中要注意的是: RSTN要設在I/O Mode,而且要注意RA3是開漏輸出。

【補充:在多試了一些不同的開關時間後,發現仍會出現不能再燒寫的情況,所以,結論還是保留Reset在 Reset Mode,才是保險之策。】

//===================================================
// Auto generated file : 30/1/2019 12:36:42
//===================================================
#include "allinone.h"
// Import external definitions
extern void init_modules(void);
#define testLED P2
int showGPPALED[]={P0,P1,P2,P3,P4,P5,P6,P7};//{P0,P1,P2,P3,P4,P5,P6,P7}
int showGPPCLED[]={P0,P1,P2,P3,P4,P5};

int main(void)
{
        // Device initialization
        init_modules();
        // Add your code from here
        TRISA1 = 0;                        // RA1?置??出
        RA1 = 0;                                // RA1?出0
        TRISC0 = 0;

        delayms(1);        // 延?1ms
        if(RA1)                                        // ??到?程器?接?RA1被拉到1
        {
                TRISA1 = 1;                // 把RA1恢复?入
                while(1)
                {
                        for (int i=0; i<8; i++)
                        {
                                gppToggle(GPPA, showGPPALED);
                                delayms(500);
                        }
                        for (int i=0; i<6; i++)
                        {
                                gppToggle(GPPC, showGPPCLED);
                                delayms(500);
                        }
                }
        }
       
        while(1)
        {
                        for (int i=0; i<8; i++)
                        {
                                gppToggle(GPPA, showGPPALED);
                                delayms(500);
                        }
                        for (int i=0; i<6; i++)
                        {
                                gppToggle(GPPC, showGPPCLED);
                                delayms(500);
                        }
        }
       
        return 0;
}


页: [1]
查看完整版本: LGT8F684P 的一個導致再不能燒寫的經驗