Reset與嵌入式系統(tǒng)應(yīng)用的穩(wěn)定性
在RTOS實(shí)時(shí)多任務(wù)操作系統(tǒng)軟件中,添加一任務(wù),設(shè)置網(wǎng)絡(luò)狀態(tài)標(biāo)志位來監(jiān)視網(wǎng)絡(luò)狀態(tài),當(dāng)手機(jī)沒有信號(hào)時(shí)設(shè)置某標(biāo)志;通過適當(dāng)?shù)呐袚?jù),確認(rèn)是否Reset,如果達(dá)到Reset條件就迅速地軟件復(fù)位,軟件重新初始化,如圖6所示。復(fù)位過程只能是“偷偷地”快速進(jìn)行,不能讓用戶察覺,否則用戶體驗(yàn)極為不好;要保持用戶界面,底層快速重啟,不知不覺地完成重啟。重啟后,網(wǎng)絡(luò)正常,用戶使用正常,巧妙地緩解,當(dāng)然最終還是從本質(zhì)上去解決問題。
5外設(shè)的復(fù)位及穩(wěn)定性設(shè)計(jì)
5.1外設(shè)復(fù)位的特殊性與可控性
嵌入式系統(tǒng)通常有LCD顯示、攝像頭和無線通信模塊等外設(shè)。外設(shè)正常工作也需要正確的復(fù)位。有些設(shè)計(jì)直接將外設(shè)的復(fù)位引腳與處理器的復(fù)位引腳連在一起,共用一個(gè)外部硬件復(fù)位源,如圖7(a)所示。這種連接方式存在一些問題。首先,這要求復(fù)位電路有足夠的復(fù)位時(shí)間,才能保證處理器和外設(shè)都正確復(fù)位;其次,一旦外設(shè)出問題,那么處理器也需要復(fù)位,整個(gè)系統(tǒng)都需重新初始化;最后,容易產(chǎn)生非同步復(fù)位,在處理器復(fù)位后,對(duì)外設(shè)寫入命令時(shí),可能被外設(shè)所復(fù)位掉,導(dǎo)致初始化出錯(cuò)。
這些問題可以從硬件和軟件兩個(gè)方面來處理。硬件方面,對(duì)處理器和外設(shè)的復(fù)位分別進(jìn)行復(fù)位電路設(shè)計(jì),適當(dāng)展寬復(fù)位脈沖。軟件方面,采用延時(shí)法,CPU上電后延時(shí)一段時(shí)間,等待外設(shè)復(fù)位充分,再進(jìn)行外設(shè)初始化。最可靠并最具操作性的是保證外設(shè)復(fù)位的可控性,使外設(shè)的復(fù)位信號(hào)與處理器復(fù)位信號(hào)分開,由處理器的某一GPIO來控制。當(dāng)處理器穩(wěn)定上電完成自身的初始化后,由處理器軟件控制外設(shè)復(fù)位,適當(dāng)延時(shí)后,再對(duì)外設(shè)進(jìn)行初始化,如圖7(b)所示。
外設(shè)復(fù)位的可控性,對(duì)要求特殊復(fù)位時(shí)序的外設(shè)尤其有用。不同的外設(shè),其復(fù)位時(shí)序要求不同,具有個(gè)性與特殊性,系統(tǒng)應(yīng)根據(jù)具體的復(fù)位時(shí)序要求進(jìn)行個(gè)性化復(fù)位,否則可能導(dǎo)致外設(shè)工作不正常。
對(duì)于應(yīng)用系統(tǒng)中有多個(gè)外設(shè)時(shí),不應(yīng)該如圖8(a)那樣把多個(gè)外設(shè)的復(fù)位引腳連在一起,由處理器的一個(gè)GPIO控制,進(jìn)行一次外部硬件復(fù)位。通常采用如圖8(b)的連接方式,處理器完成上電復(fù)位后,分別通過不同的GPIO控制、采用不同的延時(shí)對(duì)各外設(shè)分別進(jìn)行上電及復(fù)位。系統(tǒng)運(yùn)行過程中,某個(gè)外設(shè)因受干擾工作不正常時(shí),可以單獨(dú)對(duì)該外設(shè)進(jìn)行復(fù)位操作,而不影響其他外設(shè);有利于提高系統(tǒng)設(shè)計(jì)的靈活性和可靠性,能保證多個(gè)外設(shè)的可靠運(yùn)行。
5.2實(shí)例分析:WiFi模塊的特殊復(fù)位信號(hào)
筆者做過一個(gè)用WiFi進(jìn)行數(shù)據(jù)傳輸?shù)捻?xiàng)目,整個(gè)系統(tǒng)如圖9所示,SoC處理器模塊采集到的數(shù)據(jù)通過UART傳送給WiFi模塊,WiFi模塊再通過2.4 GHz無線信號(hào)傳送給無線WiFi AP,最后經(jīng)以太網(wǎng)口傳送給PC,由PC把無線AP獲取的數(shù)據(jù)保存到硬盤。
調(diào)試時(shí),發(fā)現(xiàn)前端部分工作不穩(wěn)定,WiFi模塊啟動(dòng)不穩(wěn)定,各次啟動(dòng)現(xiàn)象不一致,有時(shí)能正常啟動(dòng),有時(shí)不能正常啟動(dòng)。最后,找到問題的所在點(diǎn):WiFi模塊上電啟動(dòng)時(shí),沒有得到正確的復(fù)位。系統(tǒng)上電的RC復(fù)位電路產(chǎn)生的Reset信號(hào)并不能完全使系統(tǒng)穩(wěn)定,需要再加一個(gè)脈沖信號(hào),如圖10(a)所示。WiFi模塊的Reset時(shí)序包括兩個(gè)階段:大于20 ms的上電Reset和大于1 ms的硬件脈沖信號(hào)。微處理器SoC上電復(fù)位并初始化后,由I/O控制WiFi模塊上電及復(fù)位,按需求進(jìn)行了特殊復(fù)位處理,采用特殊的Reset信號(hào)和時(shí)序,如圖10(b)所示,模塊可以穩(wěn)定啟動(dòng),工作正常,問題解決。
評(píng)論