C8051Fxxx程序丟失問題的分析
發(fā)布時間:2008/8/19 0:00:00 訪問次數(shù):417
1 c8051fxxx單片機簡單介紹和flash結(jié)構(gòu)
c8051fxxx系列器件是silicon labs推出的一個高速單片機系列。這款單片機是完全集成的混合信號片上系統(tǒng)型mcu 芯片。
具有高速、流水線結(jié)構(gòu)的8051 兼容的cip51內(nèi)核;70%的指令的執(zhí)行時間為1個或2個系統(tǒng)時鐘周期;片上有豐富的片內(nèi)外設(shè),根據(jù)型號的不同,包括adc、dac、uart、捕捉/比較模塊的可編程計數(shù)器/定時器陣列、spi、smbus等。
c8051fxxx單片機有大容量的flash存儲器,用于程序代碼和非易失性數(shù)據(jù)存儲,可在系統(tǒng)編程。flash的結(jié)構(gòu)是以扇區(qū)為單位組織的(128 kb系列以1 024字節(jié)為1個扇區(qū),64 kb系列以512字節(jié)為1個扇區(qū))。非易失性flash可以用來存儲系統(tǒng)的參數(shù),如軟件版本、生產(chǎn)日期等。flash可以使用編程器擦寫,也可以在程序中使用movx指令來修改,從而使flash 存儲器具有在系統(tǒng)重新編程能力,允許現(xiàn)場更新8051 固件程序。flash的寫和擦除操作由硬件自動定時,以保證操作正確通過。c8051fxxx的flash保存下載的程序,在系統(tǒng)上電后,單片機從flash讀出代碼數(shù)據(jù)到ram,之后程序開始運行。
2 程序丟失問題的出現(xiàn)和原因
在一些實際應(yīng)用中,系統(tǒng)重新上電后會出現(xiàn)程序不能正常運行的問題,常表現(xiàn)為“程序丟失”。通常是由于程序代碼被損壞或被修改造成的。
造成程序丟失問題的原因很多,可以歸結(jié)到一個基本原因,即對flash的訪問失敗而造成flash保存的代碼出現(xiàn)錯誤。對于所有包含有flash寫/擦除子程序的系統(tǒng),當(dāng)cpu工作在規(guī)定的vdd、溫度、系統(tǒng)時鐘頻率范圍之外時,對flash進行寫/擦除操作,都有可能出現(xiàn)flash數(shù)據(jù)錯誤的現(xiàn)象。
2.1 flash數(shù)據(jù)錯誤的硬件原因
c8051fxxx單片機的flash操作由硬件控制,所以硬件上的不穩(wěn)定可能造成flash操作錯誤。硬件原因主要是能影響cpu正常運行的因素,以及能影響flash操作環(huán)境的因素。這些因素包括操作電壓、溫度以及外部干擾脈沖等,具體如下:
、 能影響cpu運行可靠性的參數(shù)有系統(tǒng)時鐘源。如果系統(tǒng)時鐘由外部晶振提供,外部的電磁干擾引起尖脈沖,并耦合到系統(tǒng)時鐘上,則會導(dǎo)致不可預(yù)知的操作。
② 系統(tǒng)在單片機的工作電壓沒有穩(wěn)定(vdd上升時間低于規(guī)定的1 ms)時就已經(jīng)完成復(fù)位,由于系統(tǒng)復(fù)位時需要從flash讀出代碼數(shù)據(jù),flash電壓不穩(wěn)定會出現(xiàn)不可預(yù)測的錯誤。
、 在對flash的操作過程中,如果溫度、電壓不穩(wěn)定,也可能造成flash數(shù)據(jù)錯誤。
2.2 flash數(shù)據(jù)錯誤的軟件原因
代碼設(shè)計的缺陷是程序丟失的主要原因,因為單片機的flash是由硬件來控制的,不能由軟件來控制操作的細節(jié),所以程序的不完善可能造成flash的訪問出錯,從而使flash數(shù)據(jù)出現(xiàn)錯誤。 這些操作包括: 在pswe位(psctl.0)置1時cpu執(zhí)行中斷服務(wù)程序中的movx寫操作,該中斷服務(wù)程序要使用xdata 或pdata 的易失性存儲區(qū)單元,這樣可能導(dǎo)致向xdata 或pdata存儲區(qū)寫的數(shù)據(jù)寫到flash中了,從而出現(xiàn)問題。另外,如果使用外部晶振作系統(tǒng)時鐘,在時鐘沒有穩(wěn)定時就對flash進行寫操作,也可能造成程序丟失。
3 程序丟失問題的解決方法
針對以上可能的原因,可以從軟硬件兩個方面來解決程序丟失問題。在硬件方面,主要是給系統(tǒng)提供穩(wěn)定的工作環(huán)境,并避免外部干擾對cpu運行環(huán)境的影響;在軟件方面,主要是規(guī)范對flash的操作。
3.1 從硬件方面預(yù)防程序丟失
注意,以下的方法不是對所有的器件都適用,要根據(jù)具體的硬件情況選擇相應(yīng)的方法:
、 在rst引腳安裝vdd監(jiān)測電路,并將vdd監(jiān)視設(shè)置為一個復(fù)位源(置rstsrc.1為1)。這樣如果系統(tǒng)電壓不穩(wěn)定,系統(tǒng)將自動復(fù)位,從而避免在電壓不穩(wěn)時訪問flash。
② 對外部晶振時鐘2分頻,更好的方法是使用內(nèi)部振蕩器,這樣能提高系統(tǒng)時鐘的抗干擾能力。
、 如果使用外部晶振提供系統(tǒng)時鐘,信號線應(yīng)盡量靠近單片機的輸入端,同時晶振外殼接地。
④ 對于使用外部晶振作時鐘源的系統(tǒng),應(yīng)盡量增強晶振的驅(qū)動能力,這樣也能在一定程度上預(yù)防程序丟失。
3.2 從軟件方面預(yù)防程序丟失
程序丟失的主要原因是程序設(shè)計的缺陷,所以合理的程序代碼設(shè)計能極大地預(yù)防該問題的出現(xiàn)。在代碼中可以用多種方法來預(yù)防flash數(shù)據(jù)丟失:
① 在pswe=1下禁止中斷,使得程序中的movx寫指令是對flash而不是對xram。
、 在pswe=1下盡可能少地訪問變量。在pswe=0下執(zhí)行地址譯碼操作,并用間接尋址方式執(zhí)行movx寫操作。例如,向flash寫多個字節(jié),間接尋址和寫pswe過程如下:
unsigned char xdata * idata pwrite;//使用idata指針指向flash
unsigned char *source;
unsigned char mydata;
for (addr = 0; addr <100; addr++) {
//pswe =0時獲
1 c8051fxxx單片機簡單介紹和flash結(jié)構(gòu)
c8051fxxx系列器件是silicon labs推出的一個高速單片機系列。這款單片機是完全集成的混合信號片上系統(tǒng)型mcu 芯片。
具有高速、流水線結(jié)構(gòu)的8051 兼容的cip51內(nèi)核;70%的指令的執(zhí)行時間為1個或2個系統(tǒng)時鐘周期;片上有豐富的片內(nèi)外設(shè),根據(jù)型號的不同,包括adc、dac、uart、捕捉/比較模塊的可編程計數(shù)器/定時器陣列、spi、smbus等。
c8051fxxx單片機有大容量的flash存儲器,用于程序代碼和非易失性數(shù)據(jù)存儲,可在系統(tǒng)編程。flash的結(jié)構(gòu)是以扇區(qū)為單位組織的(128 kb系列以1 024字節(jié)為1個扇區(qū),64 kb系列以512字節(jié)為1個扇區(qū))。非易失性flash可以用來存儲系統(tǒng)的參數(shù),如軟件版本、生產(chǎn)日期等。flash可以使用編程器擦寫,也可以在程序中使用movx指令來修改,從而使flash 存儲器具有在系統(tǒng)重新編程能力,允許現(xiàn)場更新8051 固件程序。flash的寫和擦除操作由硬件自動定時,以保證操作正確通過。c8051fxxx的flash保存下載的程序,在系統(tǒng)上電后,單片機從flash讀出代碼數(shù)據(jù)到ram,之后程序開始運行。
2 程序丟失問題的出現(xiàn)和原因
在一些實際應(yīng)用中,系統(tǒng)重新上電后會出現(xiàn)程序不能正常運行的問題,常表現(xiàn)為“程序丟失”。通常是由于程序代碼被損壞或被修改造成的。
造成程序丟失問題的原因很多,可以歸結(jié)到一個基本原因,即對flash的訪問失敗而造成flash保存的代碼出現(xiàn)錯誤。對于所有包含有flash寫/擦除子程序的系統(tǒng),當(dāng)cpu工作在規(guī)定的vdd、溫度、系統(tǒng)時鐘頻率范圍之外時,對flash進行寫/擦除操作,都有可能出現(xiàn)flash數(shù)據(jù)錯誤的現(xiàn)象。
2.1 flash數(shù)據(jù)錯誤的硬件原因
c8051fxxx單片機的flash操作由硬件控制,所以硬件上的不穩(wěn)定可能造成flash操作錯誤。硬件原因主要是能影響cpu正常運行的因素,以及能影響flash操作環(huán)境的因素。這些因素包括操作電壓、溫度以及外部干擾脈沖等,具體如下:
① 能影響cpu運行可靠性的參數(shù)有系統(tǒng)時鐘源。如果系統(tǒng)時鐘由外部晶振提供,外部的電磁干擾引起尖脈沖,并耦合到系統(tǒng)時鐘上,則會導(dǎo)致不可預(yù)知的操作。
、 系統(tǒng)在單片機的工作電壓沒有穩(wěn)定(vdd上升時間低于規(guī)定的1 ms)時就已經(jīng)完成復(fù)位,由于系統(tǒng)復(fù)位時需要從flash讀出代碼數(shù)據(jù),flash電壓不穩(wěn)定會出現(xiàn)不可預(yù)測的錯誤。
、 在對flash的操作過程中,如果溫度、電壓不穩(wěn)定,也可能造成flash數(shù)據(jù)錯誤。
2.2 flash數(shù)據(jù)錯誤的軟件原因
代碼設(shè)計的缺陷是程序丟失的主要原因,因為單片機的flash是由硬件來控制的,不能由軟件來控制操作的細節(jié),所以程序的不完善可能造成flash的訪問出錯,從而使flash數(shù)據(jù)出現(xiàn)錯誤。 這些操作包括: 在pswe位(psctl.0)置1時cpu執(zhí)行中斷服務(wù)程序中的movx寫操作,該中斷服務(wù)程序要使用xdata 或pdata 的易失性存儲區(qū)單元,這樣可能導(dǎo)致向xdata 或pdata存儲區(qū)寫的數(shù)據(jù)寫到flash中了,從而出現(xiàn)問題。另外,如果使用外部晶振作系統(tǒng)時鐘,在時鐘沒有穩(wěn)定時就對flash進行寫操作,也可能造成程序丟失。
3 程序丟失問題的解決方法
針對以上可能的原因,可以從軟硬件兩個方面來解決程序丟失問題。在硬件方面,主要是給系統(tǒng)提供穩(wěn)定的工作環(huán)境,并避免外部干擾對cpu運行環(huán)境的影響;在軟件方面,主要是規(guī)范對flash的操作。
3.1 從硬件方面預(yù)防程序丟失
注意,以下的方法不是對所有的器件都適用,要根據(jù)具體的硬件情況選擇相應(yīng)的方法:
① 在rst引腳安裝vdd監(jiān)測電路,并將vdd監(jiān)視設(shè)置為一個復(fù)位源(置rstsrc.1為1)。這樣如果系統(tǒng)電壓不穩(wěn)定,系統(tǒng)將自動復(fù)位,從而避免在電壓不穩(wěn)時訪問flash。
、 對外部晶振時鐘2分頻,更好的方法是使用內(nèi)部振蕩器,這樣能提高系統(tǒng)時鐘的抗干擾能力。
、 如果使用外部晶振提供系統(tǒng)時鐘,信號線應(yīng)盡量靠近單片機的輸入端,同時晶振外殼接地。
、 對于使用外部晶振作時鐘源的系統(tǒng),應(yīng)盡量增強晶振的驅(qū)動能力,這樣也能在一定程度上預(yù)防程序丟失。
3.2 從軟件方面預(yù)防程序丟失
程序丟失的主要原因是程序設(shè)計的缺陷,所以合理的程序代碼設(shè)計能極大地預(yù)防該問題的出現(xiàn)。在代碼中可以用多種方法來預(yù)防flash數(shù)據(jù)丟失:
、 在pswe=1下禁止中斷,使得程序中的movx寫指令是對flash而不是對xram。
、 在pswe=1下盡可能少地訪問變量。在pswe=0下執(zhí)行地址譯碼操作,并用間接尋址方式執(zhí)行movx寫操作。例如,向flash寫多個字節(jié),間接尋址和寫pswe過程如下:
unsigned char xdata * idata pwrite;//使用idata指針指向flash
unsigned char *source;
unsigned char mydata;
for (addr = 0; addr <100; addr++) {
//pswe =0時獲
上一篇:PC機與單片機的通訊
上一篇:使用PWM得到精密的輸出電壓
熱門點擊
- 用于ATmega128的軟件UART范例程序
- 單片機驅(qū)動蜂鳴器原理與設(shè)計
- 51單片機8*8點陣LED顯示原理及程序
- PIC單片機CRC校驗程序
- 80C51原始IP核內(nèi)部RAM的擴展方案
- 單片機的圖形化編程方法探討
- 用AT89S51單片機來制作的手動計數(shù)器
- Proteus在單片機系統(tǒng)設(shè)計中的應(yīng)用
- TEA5767收音機模塊的C51控制程序
- pic單片機的模擬I2C通信
推薦技術(shù)資料
- 硬盤式MP3播放器終級改
- 一次偶然的機會我結(jié)識了NE0 2511,那是一個遠方的... [詳細]
- 完整模擬前端 (AFE) 監(jiān)控
- 2 通道至 4 通道數(shù)字隔離
- 集成雙通道柵極驅(qū)動器̴
- 隔離式半橋 (HB) 柵極驅(qū)動器解決方案
- 高效率降壓 DC/DC 變換器 IC
- 2.3V 至 5.5V 輸入、0.6A、PS
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究