【導(dǎo)讀】本文分享一位研發(fā)工程師在研發(fā)產(chǎn)品運(yùn)行中的遇到一個(gè)異常:一個(gè)外置看門(mén)狗的不斷復(fù)位問(wèn)題,上電后反復(fù)重啟(時(shí)間間隔大概7秒),不能正常啟動(dòng),斷開(kāi)外置看門(mén)狗復(fù)位信號(hào)后就正常了。這是為什么,該如何解決呢?眾網(wǎng)友發(fā)表了各種看法。
最近,研發(fā)產(chǎn)品運(yùn)行中的遇到一個(gè)異常,表現(xiàn)為:上電后反復(fù)重啟(時(shí)間間隔大概7秒),不能正常啟動(dòng),斷開(kāi)外置看門(mén)狗復(fù)位信號(hào)后就正常了。
看門(mén)狗部分圖紙如下:
啟動(dòng)過(guò)程如下:初始化cpu及部分硬件-》啟動(dòng)ucos-》創(chuàng)建2個(gè)任務(wù),1個(gè)可以復(fù)位看門(mén)狗,1個(gè)完成系統(tǒng)的初始化。
因?yàn)槭?.3V系統(tǒng),使用的外置看門(mén)狗型號(hào)為SP706TE,特征如下:
經(jīng)過(guò)仔細(xì)測(cè)試,cpu是輸出的WDI信號(hào)是正常的,250ms間隔的脈沖,沒(méi)有問(wèn)題。
測(cè)量SP706的供電等,也都是正常的。但是WDO上每隔6.18s會(huì)有一個(gè)20uS的低電平脈沖。
經(jīng)測(cè)試,在C32上并一個(gè)47uF的電容,效果會(huì)好一些。由此,懷疑是3.3V上的干擾在某個(gè)瞬時(shí)會(huì)低于3.08V的RESET閥值。將SP706T改為SP706RE后,問(wèn)題解決;
總結(jié):
外置看門(mén)狗檢測(cè)電壓VCC,靈敏度很高。如果vcc上紋波大,建議使用低閥值的芯片,或者使用PFI功能來(lái)檢測(cè)電壓,當(dāng)然也可以采用更優(yōu)質(zhì)的電源方案;
產(chǎn)品上電后,盡早啟動(dòng)看門(mén)狗,系統(tǒng)的可靠性會(huì)高一些,可以避免系統(tǒng)啟動(dòng)過(guò)程中發(fā)生的異常;
喂狗避免放到中斷中,也盡量不要放到優(yōu)先級(jí)高的任務(wù)中。
[page]
眾網(wǎng)友熱議:
網(wǎng)友A:
1. 盡管選擇低閾值 S 系列解決問(wèn)題, 是正確的方向. 但是仍然揭示了電源環(huán)境中可能存在的異常波動(dòng), 而且是被描述為大約7秒的波動(dòng). 可檢查系統(tǒng)事件, 此時(shí)是否 mcu 是否全面喚醒,開(kāi)啟了各clock閘門(mén). 或系統(tǒng)出現(xiàn)如
射頻等瞬間大電流事件啟動(dòng). 可以增進(jìn)了解. C32 的 10uF 似乎選高, 10uF電容的價(jià)格是 100nF 的 10倍左右. 似無(wú)必要. 根據(jù)"單片機(jī)復(fù)位電路的可靠設(shè)計(jì)(版權(quán)周立功公司)"一文, 似應(yīng)將 10uF 電容移至 nRST 信號(hào)對(duì)地, 因?yàn)閮?yōu)化上電時(shí)延(當(dāng)然 706 本身亦有上電時(shí)延), 這根據(jù)您的測(cè)試效果而選擇.這里是典型的 RC 時(shí)延特性用法. 如果加入了這顆電容構(gòu)成 RC 電路, 那么文章中典型用法是使用 4148 構(gòu)成電容的反向放電, 和你的降低閾值的需求相反, 反向放電將在電壓瞬降時(shí)迅速使電容放電, 到達(dá)瞬時(shí)反應(yīng)的目的. 網(wǎng)絡(luò)上相信能查到這種電路圖, 這是繼續(xù)優(yōu)化的方向. 另外要注意的一點(diǎn)是信號(hào)限流. 特別是對(duì)于這種任何 IC pin腳形式的使用, 常見(jiàn)的用法是不管有木有效果, 在信號(hào)線(xiàn)上(此處是 nRST), 加上一顆阻值較小的限流電阻(舉例說(shuō) 360R).
2. 盡早啟動(dòng)看門(mén)狗, 可靠性會(huì)高, 原則上沒(méi)有錯(cuò)誤, 但其實(shí)使用時(shí)常常遇到系統(tǒng)延時(shí)啟動(dòng)保證輸入電壓穩(wěn)定的設(shè)計(jì). 這個(gè)延時(shí)是否能滿(mǎn)足馬上啟動(dòng)復(fù)位IC 后的第一個(gè) feed watchdog 信號(hào).此外,理論上, 你提出的第二點(diǎn), 應(yīng)該不是提高"系統(tǒng)可靠性"的必要充分條件, 應(yīng)該說(shuō)甚至是無(wú)關(guān)的. 理論上, 只要復(fù)位 IC 能夠正常準(zhǔn)確的捕捉每個(gè) mcu 的 dead loop 或 freezing. "盡量提前啟動(dòng)"復(fù)位 IC 就顯得無(wú)意義, 除非是一個(gè)特別強(qiáng)調(diào) realtime 系統(tǒng)安排. 因此理論上, 我們應(yīng)重視的是啟動(dòng)時(shí)序, 而異常時(shí)序能夠被復(fù)位IC喚醒(最好異常能被記錄).
3.喂狗不能放在中斷或者高優(yōu)先級(jí)任務(wù), 必須放在 superloop 的說(shuō)法, 我聽(tīng)說(shuō)了很多. 我個(gè)人非常懷疑這種說(shuō)法. 比方說(shuō), 你可以假設(shè) interrupt 在沒(méi)有充分啟動(dòng)的 mcu 中異常運(yùn)行而導(dǎo)致 interrupt 失效或至少不能響應(yīng) interrupt vector 的跳轉(zhuǎn). 但這種異常的執(zhí)行環(huán)境下, 繼續(xù)讓系統(tǒng)執(zhí)行而不進(jìn)行復(fù)位的意義在哪里呢? 特別是假如這個(gè)中斷特別重要的話(huà)? 同樣, 所謂高優(yōu)先級(jí)的 task 如果崩潰, 但是我們卻費(fèi)力保證不讓復(fù)位 IC 對(duì)此反應(yīng)... 我個(gè)人就覺(jué)得實(shí)在是太不應(yīng)該了. 所以, 我個(gè)人對(duì)"喂狗應(yīng)該放在哪里放在哪里"的說(shuō)教看法持極強(qiáng)烈的否定看法. 在您自己的系統(tǒng)中, 您應(yīng)該根據(jù)您的情況進(jìn)行分析吧. 假設(shè)某個(gè)重要的優(yōu)先級(jí)task 與中斷在您的系統(tǒng)中是如此重要, 以至于無(wú)法缺失, 為何不可將您的硬件喂狗放置于此? 如果不放心的話(huà), 您可以選擇將軟件喂狗放在 superloop. -- 這不應(yīng)該是某個(gè)定論, 而應(yīng)該是出自于貴研發(fā)團(tuán)隊(duì)的系統(tǒng)設(shè)計(jì)需求, 與實(shí)測(cè)效果及客戶(hù)現(xiàn)場(chǎng)反饋.
4.您在 nRST 信號(hào)上沒(méi)有上拉, 我們說(shuō)的 RC 優(yōu)化 nRST 信號(hào)線(xiàn), 都是基于 R 上拉的基礎(chǔ)上的, 不上拉的話(huà), 意味者對(duì)信號(hào)微擾的敏感, 這可能也是您的"易復(fù)位"現(xiàn)象的重要成因. 盡管 706 的 datasheet 上沒(méi)有標(biāo)識(shí)這個(gè)上拉的用法, 但作為一個(gè)嘗試和現(xiàn)實(shí)的"不妨礙性"的使用, 似乎是值得一試的.
網(wǎng)友B:
還是建議測(cè)查電路的本質(zhì)問(wèn)題,而非那種治標(biāo)不治本的解決問(wèn)題方式。既然懷疑電源上有干擾,至少用示波器捕捉一下,搞不好問(wèn)題正如6樓所說(shuō)的看門(mén)狗芯片輸出驅(qū)動(dòng)浮空等問(wèn)題引起,那不是冤枉電源的質(zhì)量了。
網(wǎng)友C:
我的做法是找到你所說(shuō)的脈沖哪里來(lái)的。我還需要模擬脈沖怎么影響看門(mén)狗狗。不然,永遠(yuǎn)都不算解決問(wèn)題,永遠(yuǎn)都處于初級(jí)工程師階段。