《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 業(yè)界動(dòng)態(tài) > X25043/45 EEPROM及其與51系列微處理器的接口方法

X25043/45 EEPROM及其與51系列微處理器的接口方法

2009-02-25
作者:周迎春 楊學(xué)泉

  摘? 要: X25043/45 E2PROM芯片的特點(diǎn)及主要功能,描述了其引腳定義、工作原理、操作指令、存儲(chǔ)陣列讀時(shí)序和寫(xiě)時(shí)序。介紹它與51系列微處理器的幾種接口方法,并給出應(yīng)用電路和相應(yīng)程序。?

  關(guān)鍵詞: 可編程? 寫(xiě)使能? 51系列微處理器?? 接口方法?

?

  隨著測(cè)量技術(shù)的發(fā)展和微處理器的廣泛應(yīng)用,系統(tǒng)的電路越來(lái)越復(fù)雜,系統(tǒng)的可靠性問(wèn)題也越來(lái)越突出,因此看門(mén)狗、工作電壓監(jiān)控和存儲(chǔ)器差不多在每一系統(tǒng)中都被采用。Xicor 公司提供的X25043/45 E2PROM芯片,把看門(mén)狗定時(shí)器、工作電壓監(jiān)控和E2PROM三種功能組合在一個(gè)封裝內(nèi),并采用三線總線工作的串行外設(shè)接口(SPI)和軟件協(xié)議,降低了系統(tǒng)成本,提高了系統(tǒng)的工作可靠性,非常適合于需現(xiàn)場(chǎng)修改數(shù)據(jù)的場(chǎng)合,可廣泛應(yīng)用于儀器儀表、工業(yè)自動(dòng)控制等領(lǐng)域。但在應(yīng)用中,對(duì)存儲(chǔ)陣列的讀寫(xiě)、看門(mén)狗定時(shí)器的設(shè)置則需通過(guò)芯片要求的指令來(lái)完成。?

1 X25043/45的主要特點(diǎn)和引腳定義?

  X25043/45的主要特點(diǎn)如下:?

  ⑴可編程的看門(mén)狗定時(shí)器,通過(guò)指令可選擇看門(mén)狗定時(shí)時(shí)間;⑵工作電壓監(jiān)測(cè),并產(chǎn)生復(fù)位信號(hào);⑶讀寫(xiě)時(shí)鐘速率可達(dá)1MHz;⑷518×8位串行E2PROM;⑸數(shù)據(jù)塊鎖定功能和片內(nèi)偶然性的寫(xiě)保護(hù)功能,保護(hù)存儲(chǔ)數(shù)據(jù);⑹CMOS器件,低功耗;⑺擦寫(xiě)次數(shù)最少10萬(wàn)次,最少100年的數(shù)據(jù)保存期。?

  X25043/45的引腳排列如圖1所示,引腳功能說(shuō)明見(jiàn)表1。?

?

?

2 工作原理及操作指令?

  X25043/45內(nèi)含一個(gè)8位指令寄存器,傳送指令、數(shù)據(jù)和地址時(shí)按8位串行數(shù)據(jù)格式進(jìn)行,且均以最高有效位在先的方式傳送。其指令見(jiàn)表2。SI線上輸入的數(shù)據(jù)在SCK上升沿被鎖存,芯片內(nèi)的數(shù)據(jù)在SCK下降沿輸出至SO線上。時(shí)鐘SCK允許操作過(guò)程中停止并在其后恢復(fù)。?

?

?

  在讀存儲(chǔ)陣列時(shí),將拉至低電平,發(fā)送SCK時(shí)鐘脈沖,通過(guò)SI線發(fā)送含最高位地址A8的READ指令,然后發(fā)送8位地址,選定的存儲(chǔ)單元中的數(shù)據(jù)被送到SO線上。每個(gè)數(shù)據(jù)被送出后,芯片內(nèi)的地址計(jì)數(shù)器自動(dòng)加1,指向下一存儲(chǔ)單元;若繼續(xù)提供SCK脈沖,可讀出下一存儲(chǔ)單元數(shù)據(jù)。當(dāng)?shù)刂酚?jì)數(shù)器達(dá)到$1FFH時(shí),自動(dòng)翻轉(zhuǎn)至$000H單元,直至高電平,終止讀操作。SO線不輸出數(shù)據(jù)時(shí),呈高阻狀態(tài)。其時(shí)序如圖2所示。讀狀態(tài)寄存器時(shí),片選后發(fā)送RDSR指令,狀態(tài)寄存器的內(nèi)容在發(fā)送RDSR指令的第8個(gè)SCK脈沖的下降沿被送出到SO線上。?

?

?

  在寫(xiě)操作之前,必須置位“寫(xiě)使能”。在字節(jié)、頁(yè)或狀態(tài)寄存器寫(xiě)周期完成后和上電情況下,“寫(xiě)使能”自動(dòng)復(fù)位,為低電平,“寫(xiě)使能”可被復(fù)位?!皩?xiě)使能”復(fù)位時(shí),不能對(duì)芯片進(jìn)行寫(xiě)操作。因此必須置為高電平,將片選置低電平,向芯片發(fā)出WREN指令,接著再將片選置位,以置位“寫(xiě)使能”。若不將置位而繼續(xù)進(jìn)行寫(xiě)操作,則寫(xiě)操作無(wú)效。最少一個(gè)SCK周期后,重新將置低電平以進(jìn)行寫(xiě)操作。寫(xiě)存儲(chǔ)陣列時(shí),發(fā)送含最高位地址位A8的WRITE指令后,送8位地址,再送數(shù)據(jù)寫(xiě)入芯片。在一直為低電平的情況下,可以連續(xù)送寫(xiě)同一頁(yè)地址的4個(gè)字節(jié)數(shù)據(jù)。超過(guò)4個(gè)字節(jié)數(shù)據(jù),芯片將自動(dòng)從本頁(yè)的第一個(gè)地址重新寫(xiě)入,因此必須在第24、32、40、48個(gè)SCK周期后,置位;寫(xiě)狀態(tài)字時(shí),發(fā)送WRSR后送更新的狀態(tài)寄存器內(nèi)容。?

  X25043/45可提供電源監(jiān)控和編程看門(mén)狗定時(shí)器,給系統(tǒng)提供復(fù)位信號(hào)。通過(guò)編程選擇定時(shí)值,如果在設(shè)置的時(shí)間內(nèi)沒(méi)有訪問(wèn)X25043/45,即為低電平,則X25043/45將產(chǎn)生復(fù)位信號(hào)輸出。芯片通過(guò)其供電電源Vcc來(lái)實(shí)現(xiàn)電源監(jiān)控。當(dāng)Vcc低于規(guī)定值時(shí),產(chǎn)生復(fù)位信號(hào)輸出,對(duì)于5V工作芯片,其值為4.25~4.5V。當(dāng)Vcc低于4.25~4.5V時(shí),上電后自動(dòng)產(chǎn)生復(fù)位信號(hào),信號(hào)寬度最小可達(dá)100ms。?

  發(fā)送WREN、WRDI和RDSR指令時(shí),不必發(fā)送地址或數(shù)據(jù)。RDSR、WRSR指令分別用于讀、寫(xiě)X25043/45內(nèi)的狀態(tài)寄存器。狀態(tài)寄存器的格式如下:?

???

  WD1、WD0是看門(mén)狗定時(shí)位,為非易失性位,其組合表征的時(shí)間見(jiàn)表3。?

  BL1、BL0是存儲(chǔ)器塊保護(hù)位,為非易失性位,其組合表征的保護(hù)存儲(chǔ)器陣列范圍見(jiàn)表4。選定保護(hù)的塊,用戶只能讀而不能寫(xiě)。?

?

????????????? ?????

?

  WEL是“寫(xiě)使能”鎖存器狀態(tài)位,只讀位。為1,“寫(xiě)使能”置位;為0,“寫(xiě)使能”復(fù)位。?

  WIP是表征芯片寫(xiě)操作忙位,只讀位。為1,寫(xiě)操作正在進(jìn)行;為0,無(wú)寫(xiě)操作。?

3 X25043/45與51系列微處理器接口?

  由于51系列微處理器無(wú)SPI接口,因此必須通過(guò)移位方式來(lái)實(shí)現(xiàn)通訊。X25045與51系列微處理器接口時(shí),一般不能通過(guò)CPU的P2口進(jìn)行片選,只有在P2口為位控方式工作時(shí)才允許。51系列CPU的P2口工作于地址總線方式時(shí),其輸出是脈沖形式,地址送出后,呈高電平。因此在對(duì)X25045操作時(shí),不能保證片選持續(xù)有效,也就不能對(duì)其進(jìn)行任何操作。為此片選只能是位控方式連接,一般與CPU的P1或P3口相連接。?

  圖3是一款典型接口電路。R1是復(fù)位輸出的上拉電阻,上拉電阻是必需的。微處理器U1為89C52,U2為X25045,提供高電平復(fù)位信號(hào)。從圖3中可以看出,X25045必須用4根線與CPU接口。?

?

?

  在系統(tǒng)接口復(fù)雜時(shí),典型接口方式將浪費(fèi)寶貴的CPU口資源;進(jìn)行口擴(kuò)展時(shí),既增加成本,又減低了可靠性,不能體現(xiàn)X25045的優(yōu)點(diǎn)。在系統(tǒng)設(shè)計(jì)時(shí),設(shè)計(jì)人員往往都力求最精簡(jiǎn)最可靠的最小系統(tǒng)方案,而較復(fù)雜的系統(tǒng)幾乎用滿所有CPU口線。?

  圖4和圖5兩款電路相對(duì)圖3有一定改進(jìn),經(jīng)濟(jì)實(shí)用,均能可靠地運(yùn)行。圖4所示電路是一種總線接口方式。但對(duì)X25045操作時(shí),P2口不能選擇其它任何器件。若總線其它器件均以低電平選擇有效時(shí),必須先將P2口置高電平,即:MOV P2,#0FH。這款電路在對(duì)X25043/45操作時(shí),系統(tǒng)的中斷操作中不能有數(shù)據(jù)輸入輸出操作。若有數(shù)據(jù)輸入輸出操作,必須先關(guān)中斷,否則將出現(xiàn)邏輯混亂,甚至燒毀CPU和X25043/45。在訪問(wèn)X25043/45的優(yōu)先級(jí)低于中斷操作的最高級(jí)時(shí),也就是說(shuō),在訪問(wèn)X25045時(shí)系統(tǒng)還必須響應(yīng)中斷。如有URT串口工作時(shí),則不能使用該款電路。?

?

?

?

  對(duì)于圖5電路,雖然只減少了一根口線,但巧妙地利用X25043/45的讀操作是在SCK的上升沿、寫(xiě)操作是在SCK的下降沿、而SO線在無(wú)輸出時(shí)呈高阻狀態(tài)這一特性,將SO線和SI線短接,把四線接口改為三線接口。筆者多次將圖5的接口方法應(yīng)用于儀器開(kāi)發(fā)中,將X25043/45用于口令、校準(zhǔn)參數(shù)等的存儲(chǔ),均取得滿意的效果,系統(tǒng)結(jié)構(gòu)簡(jiǎn)單,并且一直穩(wěn)定工作。由于它帶有電源監(jiān)控、上電復(fù)位和看門(mén)狗電路,所以在實(shí)際應(yīng)用中,可大大減少系統(tǒng)的設(shè)計(jì),提高工作可靠性。?

  以上三款電路的編程方法基本相同。對(duì)于圖5所示的電路,在對(duì)X25045操作前,先要禁止所有中斷,將P2口全部置高電平,才能讀寫(xiě)X25045。三款電路讀寫(xiě)X25045時(shí),程序唯一的差別是在定義賦值CS、SI、SCK、SO上。對(duì)于圖5,將SI、SO的定義賦值相同。據(jù)圖5接口方式編有如下范例程序,該程序提供了所有X25045的命令。?

??? 源程序:?

??? CS???????? BIT? ?? P1.0?? ;P1.0作片選?

??? SI?????????BIT???? P1.2?? ;P1.2作串行輸入?

??? SO?????????BIT???? P1.2?? ;P1.2作串行輸出?

??? SCK??????? BIT???? P1.3?? ;P1.3作串行時(shí)鐘?

??? WREN_INST? EQU???? 06H??? ;寫(xiě)鎖存指令?

??? WRDI_INST? EQU??? ?04H??? ;讀鎖存指令?

??? WRSR_INST? EQU???? 01H??? ;寫(xiě)狀態(tài)寄存器指令?

??? RDSR_INST? EQU???? 05H?? ?;讀狀態(tài)寄存器指令?

??? WRITE_INST EQU?? ? 02H????;寫(xiě)存儲(chǔ)陣列指令?

??? READ_INST? EQU?? ? 03H??? ;讀存儲(chǔ)陣列指令?

??? BYTE_ADDR? EQU?????55H? ? ;字節(jié)操作方式存儲(chǔ)器地址?

??? BYTE_DATA? EQU?????0EAH?? ;寫(xiě)操作數(shù)據(jù)?

??? PAGE_ADDR? EQU ??? 1F0H? ?;頁(yè)操作方式存儲(chǔ)器地址?

??? PAGE_DATA1 EQU???? 99H?? ?;寫(xiě)入頁(yè)的第一個(gè)數(shù)據(jù)字節(jié)?

??? PAGE_DATA2 EQU?????0AAH?? ;寫(xiě)入頁(yè)的第二個(gè)數(shù)據(jù)字節(jié)?

??? PAGE_DATA3?EQU? ?? 0CCH?? ;寫(xiě)入頁(yè)的第三個(gè)數(shù)據(jù)字節(jié)?

??? STATUS_REG EQU?? ? 10H?? ?;狀態(tài)寄存器?

??? MAX_POLL???EQU?? ? 99H? ? ;寫(xiě)忙(WIP)查詢最大循環(huán)數(shù)?

??? STACK_TOP? EQU???? 060H?? ;堆棧指針?

??? 初始化子程序:?????? ?

??? INSTALL:?? MOV ??? SP,#STACK_TOP?

?? ??????????? CLR?? ? EA?

?? ??????? ??? CLR???? A?

?? ??????????? SETB??? CS?

?? ??????????? CLR???? SI?

?? ??????????? SETB??? SO?

?? ??????????? CLR???? SCK?

?? ??????????? RET?

??? 復(fù)位看門(mén)狗子程序:?

??? RES_DOG:? CLR???? CS?

??????????? ? SETB??? CS?

??????????? ? RET?

??? 寫(xiě)操作忙標(biāo)志查詢子程序:?

??? WIP_POLL: ? MOV??? R1,#MAX_POLL?

??? WIP_POLL1:? LCALL? RS_C?

??????????? ? ? JNB??? ACC.0,WIP_POLL2?

??????????? ? ? DJNZ???R1,WIP_POLL1?

??? WIP_POLL2:? RET?

??? 復(fù)位“寫(xiě)使能”子程序:?

??? WD_C:?? CLR???? SCK?

??????????? CLR???? CS?

??????????? MOV???? A,#WRDI_INST?

??????????? LCALL?? OUTBYT?

??????????? CLR???? SCK?

??????????? SETB??? CS?

??????????? RET?

??? 置位“寫(xiě)使能”子程序:?? ?

??? WE_C:?? CLR???? SCK?

??????????? CLR???? CS?

??????????? MOV???? A,#WREN_INST?

??????????? LCALL?? OUTBYT?

??????? ??? CLR???? SCK?

??????????? SETB??? CS?

??????????? RET?

??? 寫(xiě)狀態(tài)寄存器子程序:?

??? WS_C: ? CLR???? SCK?

??????????? CLR???? CS?

??????????? MOV???? A,#WRSR_INST?

??????????? LCALL?? OUTBYT?

??????????? MOV???? A,#STATUS_REG?

??????????? LCALL?? OUTBYT?

??????????? CLR???? SCK ?

??????????? SETB??? CS?

??????????? LCALL?? WIP_POLL?

??????????? RET?

??? 讀狀態(tài)寄存器子程序: ?

??? RS_C: ? CLR???? SCK?

??????????? CLR???? CS?

??????????? MOV???? A,#RDSR_INST?

??????????? LCALL?? OUTBYT?

??????????? LCALL?? INBYT ?

??????????? CLR???? SCK?

??????????? SETB??? CS ?

??????????? RET?

??? 單字節(jié)數(shù)據(jù)寫(xiě)入子程序:?

??? BYTE_W: MOV ??? DPTR,#BYTE_ADDR?

??????????? CLR???? SCK?

??????????? CLR???? CS?

??????????? MOV?? ? A,#WRITE_INST?

??????????? MOV??? ?B,DPH?

??????????? MOV? ?? C,B.0?

??????????? MOV???? ACC.3,C?

??????????? LCALL?? OUTBYT?

??????????? MOV???? A,DPL?

??????????? LCALL?? OUTBYT?

??????????? MOV???? A,#BYTE_DATA?

??????????? LCALL?? OUTBYT?

??????????? CLR???? SCK ?

??????????? SETB??? CS ?

??????????? LCALL?? WIP_POLL?

??????????? RET?

??? 單字節(jié)數(shù)據(jù)讀出子程序:?

??? BYTE_R: MOV ??? DPTR,#BYTE_ADDR?

??????????? CLR???? SCK?

??????????? CLR???? CS ?

??????????? MOV???? A,#READ_INST?

??????????? MOV???? B,DPH?

??????????? MOV???? C,B.0?

??????????? MOV???? ACC.3,C?

??????????? LCALL?? OUTBYT?

??????????? MOV???? A,DPL?

??????????? LCALL?? OUTBYT?

??????????? LCALL?? INBYT?

??????????? MOV???? R6,A?

??????????? CLR???? SCK ?

??????????? SETB??? CS?

??????????? RET?

??? 連續(xù)3字節(jié)數(shù)據(jù)寫(xiě)入子程序:?

??? PAGE_W: MOV?? ? DPTR,#PAGE_ADDR?

??????????? CLR???? SCK?

??????????? CLR???? CS?

??????????? MOV???? A,#WRITE_INST?

??????????? MOV???? B,DPH?

??????????? MOV???? C,B.0?

??????????? MOV???? ACC.3,C?

??????????? LCALL?? OUTBYT?

??????????? MOV???? A,DPL?

??????????? LCALL?? OUTBYT?

??????????? MOV???? A,#PAGE_DATA1?

??????????? LCALL?? OUTBYT?

??????????? MOV???? A,#PAGE_DATA2?

??????? ??? LCALL?? OUTBYT?

??????????? MOV???? A,#PAGE_DATA3?

??????????? LCALL?? OUTBYT?

??????????? CLR???? SCK?

??????????? SETB??? CS?

??????????? LCALL?? WIP_POLL?

??????????? RET?

??? 連續(xù)2字節(jié)讀取子程序:?

??? SEQU_R: MOV? ?? DPTR,#PAGE_ADDR?

??????????? CLR???? SCK?

??????????? CLR???? CS?

??????????? MOV???? A,#READ_INST?

??????????? MOV???? B,DPH?

??????????? MOV???? C,B.0?

??????????? MOV???? ACC.3,C?

??????????? LCALL?? OUTBYT?

??????????? MOV???? A,DPL?

??????????? LCALL?? OUTBYT?

??????????? LCALL?? INBYT?

??????????? MOV???? R2,A?

??????????? LCALL?? INBYT?

??????????? MOV???? R3,A?

??????????? LCALL?? INBYT?

??????????? MOV???? R4,A?

??????????? CLR???? SCK?

??????????? SETB??? CS?

??????????? RET?

??? 字節(jié)讀出子程序:?

??? OUTBYT: MOV?? ? R0,#08?

??? OUTBYT1:CLR?? ? SCK?

??????????? RLC? ?? A?

??????????? MOV? ?? SI,C?

??????????? SETB??? SCK?

??????????? DJNZ??? R0,OUTBYT1?

??????????? CLR???? SI?

??????????? RET?

??? 字節(jié)寫(xiě)入子程序:?

??? INBYT:? MOV?? ? R0,#08?

??? INBYT1: SETB??? SCK?

??????????? CLR???? SCK?

??????????? MOV?? ? C,SO?

??????????? RLC???? A?

??????????? DJNZ??? R0,INBYT1?

??????????? RET?

參考文獻(xiàn)?

1 Xicor非易失性器件使用手冊(cè).武漢力源,1999
本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。