|
串行E2PROM是可在線電擦除和電寫(xiě)入的存儲(chǔ)器,具有體積小、接口簡(jiǎn)單、數(shù)據(jù)保存可靠、可在線改寫(xiě)、功耗低等特點(diǎn),而且為低電壓寫(xiě)入,在單片機(jī)系統(tǒng)中應(yīng)用十分普遍。
串行E2PROM按總線形式分為三種,即I2C總線、Microwire總線及SPI總線三種。本文將以Microchip公司的產(chǎn)品為例對(duì)以上三種串行E2PROM進(jìn)行介紹。
一、I2C總線型 I2C總線,是INTER INTEGRATED CIRCUIT BUS的縮寫(xiě),即“內(nèi)部集成電路總線”。I2C總線采用時(shí)鐘(SCL)和數(shù)據(jù)(SDA)兩根線進(jìn)行數(shù)據(jù)傳輸,接口十分簡(jiǎn)單。Microchip公司的24XX系列串行E2PROM存儲(chǔ)容量從128位(16×8)至256k位(32k×8),采用I2C總線結(jié)構(gòu)。24XX中,XX為電源電壓范圍。
1引腳 圖1是24AA00/24LC00/24C00型128位I2C總線串行E2PROM的引腳圖。 SDA是串行數(shù)據(jù)腳。該腳為雙向腳,漏極開(kāi)路,用于地址、數(shù)據(jù)的輸入和數(shù)據(jù)的輸出,使用時(shí)需加上拉電阻。 SCL是時(shí)鐘腳。該腳為器件數(shù)據(jù)傳輸?shù)耐綍r(shí)鐘信號(hào)。 SDA和SCL腳均為施密特觸發(fā)輸入,并有濾波電路,可有效抑制噪聲尖峰信號(hào),保證在總線噪聲嚴(yán)重時(shí)器件仍能正常工作。 在單片機(jī)系統(tǒng)中,總線受單片機(jī)控制。單片機(jī)產(chǎn)生串行時(shí)鐘(SCL),控制總線的存取,發(fā)送STRAT和STOP信號(hào)。
2總線協(xié)議 僅當(dāng)總線不忙(數(shù)據(jù)和時(shí)鐘均保持高電平)時(shí)方能啟動(dòng)數(shù)據(jù)傳輸。在數(shù)據(jù)傳輸期間,時(shí)鐘(SCL)為高電平時(shí)數(shù)據(jù)(SDA)必須保持不變。在SCL為高電平時(shí)數(shù)據(jù)線(SDA)從高電平跳變到低電平,為開(kāi)始數(shù)據(jù)傳輸(START)的條件,開(kāi)始數(shù)據(jù)傳輸條件后所有的命令有效;SCL為高電平時(shí),數(shù)據(jù)(SDA)從低電平跳變到高電平,為停止數(shù)據(jù)傳輸(STOP)的條件,停止數(shù)據(jù)傳輸條件后所有的操作結(jié)束。開(kāi)始數(shù)據(jù)傳輸START后、停止數(shù)據(jù)傳輸STOP前,SCL高電平期間,SDA上為有效數(shù)據(jù)。字節(jié)寫(xiě)入時(shí),每寫(xiě)完一個(gè)字節(jié),送一位傳送結(jié)束信號(hào)ACK,直至STOP;讀出時(shí),每讀完一個(gè)字節(jié),送一位傳送結(jié)束信號(hào)ACK,但STOP前一位結(jié)束時(shí)不送ACK信號(hào)。
3器件尋址 START后,單片機(jī)發(fā)送一個(gè)控制字,該控制字包括Start位(S)、受控地址(7位,對(duì)24XX00來(lái)說(shuō)前四位為1010,后三位無(wú)關(guān)系)、讀寫(xiě)(R/W)選擇位(“1”為讀,“0”為寫(xiě))及傳送結(jié)束位ACK。24XX00的控制字格式如下: S 1 0 1 0 X X X R/W ACK 24XX00隨時(shí)監(jiān)視總線上是否為有效地址,若受控地址正確且器件未處在編程方式下,則產(chǎn)生傳送結(jié)束位ACK。
4寫(xiě)操作 單片機(jī)送出開(kāi)始信號(hào)后,接著送器件碼(7位)、R/W位,表示ACK位后面為待寫(xiě)入數(shù)據(jù)字節(jié)的字地址和待寫(xiě)入數(shù)據(jù)字節(jié),然后結(jié)束一個(gè)字節(jié)的寫(xiě)入。即S+寫(xiě)控制字(R/W位為+ACK+字地址+ACK+寫(xiě)入數(shù)據(jù)+ACK+STOP。
5讀操作 讀操作有三種,讀當(dāng)前地址的內(nèi)容、讀指定地址的內(nèi)容、讀指定起始地址后的若干字節(jié)的內(nèi)容。 讀當(dāng)前地址的內(nèi)容為:S+讀控制字(R/W位為+ACK+讀出數(shù)據(jù)+no ACK+STOP 讀指定地址的內(nèi)容為:S+寫(xiě)控制字(R/W位為+ACK+寫(xiě)入數(shù)據(jù)+ACK+讀控制字(R/W位為+ACK+讀出數(shù)據(jù)+no ACK+STOP 讀指定起始地址后的若干字節(jié)的內(nèi)容為:S+寫(xiě)控制字(R/W位為+ACK+寫(xiě)入數(shù)據(jù)+ACK+讀控制字(R/W位為+ACK+讀出數(shù)據(jù)(1)+ACK+……+讀出數(shù)據(jù)(n+x)+noACK+STOP 24XX系列串行E2PROM存儲(chǔ)芯片與單片機(jī)硬件接口只有SCL和SDA兩根線,非常簡(jiǎn)單。
二、Microwire總線型 Microwire總線采用時(shí)鐘(CLK)、數(shù)據(jù)輸入(DI)、數(shù)據(jù)輸出(DO)三根線進(jìn)行數(shù)據(jù)傳輸,接口簡(jiǎn)單。Microchip公司的93XXX系列串行E2PROM存儲(chǔ)容量從1k bit(×8/×16)至16k bit(×8/×16),采用Microwire總線結(jié)構(gòu)。產(chǎn)品采用先進(jìn)的CMOS技術(shù),是理想的低功耗非易失性存儲(chǔ)器器件。
1引腳 93XX系列串行E2PROM的產(chǎn)品很多,附圖是93AA46型1k 1.8V Microwire總線串行E2PROM的引腳圖。 CS是片選輸入,高電平有效。CS端低電平,93AA46為休眠狀態(tài)。但若在一個(gè)編程周期啟動(dòng)后,CS由高變低,93AA46將在該編程周期完成后立即進(jìn)入休眠狀態(tài)。在連續(xù)指令與連續(xù)指令之間,CS必須有不小于250ns(TCSL)的低電平保持時(shí)間,使之復(fù)位(RESET),芯片在CS為低電平期間,保持復(fù)位狀態(tài)。 CLK是同步時(shí)鐘輸入,數(shù)據(jù)讀寫(xiě)與CLK上升沿同步。對(duì)于自動(dòng)定時(shí)寫(xiě)周期不需要CLK信號(hào)。 DI是串行數(shù)據(jù)輸入,接受來(lái)自單片機(jī)的命令、地址和數(shù)據(jù)。 DO是串行數(shù)據(jù)輸出,在DO端需加上拉電阻。ORG是數(shù)據(jù)結(jié)構(gòu)選擇輸入,當(dāng)ORG為高電平時(shí)選×16結(jié)構(gòu),ORG為低電平時(shí)選×8結(jié)構(gòu)。
2工作模式 根據(jù)單片機(jī)的不同命令,93AA46有7種不同的工作模式,附表給出在ORG=1(×16結(jié)構(gòu))時(shí)的命令集(表中“S”為Start位)。ORG=0(×8結(jié)構(gòu)),除在地址前加A6位或在地址后加一位“X”外,其余與附表相同。 除了讀數(shù)據(jù)或編程操作期間檢查READY/BUSY狀態(tài)時(shí)外,DO腳均為高阻狀。在擦除/寫(xiě)入過(guò)程中,DO為高電平表示“忙”,低電平表示“準(zhǔn)備好”。在CS下降沿到來(lái)時(shí),DO進(jìn)入高阻態(tài)。若在寫(xiě)入和擦除轉(zhuǎn)換期間,CS保持高電平,則DO端的狀態(tài)信號(hào)無(wú)效。
3功能 START(起始)條件 CS和DI均為高電平后CLK的第一個(gè)上升沿,確定為START。若緊隨START條件后DI端輸入滿足7種工作模式中的一種所需的命令碼、地址及數(shù)據(jù)位的組合,指令將被執(zhí)行。執(zhí)行完一條指令后,未檢測(cè)到新的START條件,DI、CLK信號(hào)不起作用。數(shù)據(jù)保護(hù) 上電時(shí),Vcc未升到14V前,所有操作方式均被禁止。掉電時(shí),一旦Vcc低于14V,源數(shù)據(jù)保護(hù)電路啟動(dòng),所有操作方式均被禁止。芯片上電時(shí)自動(dòng)進(jìn)入擦寫(xiě)禁止?fàn)顟B(tài),保護(hù)芯片不被誤擦寫(xiě)。EWEN命令也可以防止誤擦寫(xiě),詳見(jiàn)擦寫(xiě)禁止和擦寫(xiě)使能。 讀操作READ 當(dāng)CS為高電平時(shí),芯片在收到讀命令和地址后,從DO端串行輸出指定單元的內(nèi)容(高位在前)。寫(xiě)操作WRITE 當(dāng)CS為高電平時(shí),芯片收到寫(xiě)命令和地址后,從DI端接收串行輸入16位或8位數(shù)據(jù)(高位在前)。在下一個(gè)時(shí)鐘上升沿到來(lái)前將CS端置為(低電平保持時(shí)間不小于250ns),再將CS恢復(fù)為"1",寫(xiě)操作啟動(dòng)。此時(shí)DO端由“1”變成“0”,表示芯片處于寫(xiě)操作的“忙”狀態(tài)。芯片在寫(xiě)入數(shù)據(jù)前,會(huì)自動(dòng)擦除待寫(xiě)入單元的內(nèi)容,當(dāng)寫(xiě)操作完成后,DO端變成“1”,表示芯片處于“準(zhǔn)備好”狀態(tài),可以接受新命令。
擦寫(xiě)禁止和擦寫(xiě)使能(EWDS/EWEN) 芯片收到EWDS命令后進(jìn)入擦寫(xiě)禁止?fàn)顟B(tài),不允許對(duì)芯片進(jìn)行任何擦或?qū)懖僮,芯片上電時(shí)自動(dòng)進(jìn)入擦寫(xiě)禁止?fàn)顟B(tài)。此時(shí),若想對(duì)芯片進(jìn)行擦寫(xiě)操作,必須先發(fā)EWEN命令,因而防止了干擾或其它原因引起的誤操作。芯片接受到EWEN命令后,進(jìn)入擦寫(xiě)允許狀態(tài),允許對(duì)芯片進(jìn)行擦或?qū)懖僮鳌WxREAD命令不受EWDS和EWEN的影響。 擦除、片擦除、片寫(xiě)入操作(ERASE/ERAL/WRAL) 擦除ERASE指令擦除指定地址的內(nèi)容,擦除后該地址的內(nèi)容為“1”;片擦除ERAL指令擦除整個(gè)芯片的內(nèi)容,擦除后芯片所有地址的內(nèi)容均為“1”;片寫(xiě)WRAL命令將特定內(nèi)容整片寫(xiě)入。片擦除和片寫(xiě)入時(shí),在接受完命令和數(shù)據(jù),CS從“1”變成“0”再恢復(fù)為“1”(低電平保持時(shí)間不小于250ns)后,片擦除或片寫(xiě)入啟動(dòng),擦除、寫(xiě)入均為自動(dòng)定時(shí)方式。自動(dòng)定時(shí)方式下不需要CLK時(shí)鐘。 93AA46與單片機(jī)的接口電路及數(shù)據(jù)傳輸程序此處不再一一寫(xiě)出。
內(nèi)容:Serial Peripheral Interface)總線,即“串行外圍設(shè)備接口總線”。Microchip公司的25XX系列串行E2PROM采用簡(jiǎn)單的SPI兼容串行總線結(jié)構(gòu),用時(shí)鐘(SCK)、數(shù)據(jù)輸入(SI)、數(shù)據(jù)輸出(SO)三根線進(jìn)行數(shù)據(jù)傳輸,片選信號(hào)(CS)控制器件的選通。當(dāng)今流行的帶SPI口的微控制器,如Microchip公司的PIC16C6X/7X微控制器等,均可與25AA040直接接口。片內(nèi)無(wú)SPI口的微控制器,也可用普通I/O口通過(guò)軟件編程的方式實(shí)現(xiàn)與25XX040間的接口。25XX系列采用先進(jìn)的CMOS技術(shù),是理想的低功耗非易失性存儲(chǔ)器器件。
25XX系列串行E2PROM存儲(chǔ)容量從4k位(512×8)至64k位(8k×8),附圖是25AA040型4k位SPI總線串行E2PROM的引腳圖。
1引腳說(shuō)明 CS是片選輸入腳,低電平有效。CS端為高電平,25AA040處于休眠狀態(tài)。CS的變化不影響已經(jīng)初始化或正在處理的編程的完成。也就是說(shuō)若在一個(gè)編程周期啟動(dòng)后,CS由低變高,25AA040將在該編程周期完成后立即進(jìn)入休眠狀態(tài)。一旦CS為高電平,SO引腳立即變成高阻態(tài),允許多器件共用SPI總線。在有效的寫(xiě)入序列輸入后CS端由低轉(zhuǎn)高,啟動(dòng)對(duì)內(nèi)部的寫(xiě)序列。上電后,CS端要先加低電平對(duì)所有操作序列初始化。 SCK是同步時(shí)鐘輸入腳。來(lái)自SI腳的地址或數(shù)據(jù)在SCK的上升沿被鎖存,SO腳的數(shù)據(jù)在SCK的下降沿時(shí)輸出。 SI是串行數(shù)據(jù)輸入腳,接受來(lái)自單片機(jī)的命令、地址和數(shù)據(jù)。 SO是串行數(shù)據(jù)輸出腳,在讀周期,輸出E2PROM存儲(chǔ)器的數(shù)據(jù)。 WP是寫(xiě)保護(hù)輸入腳。WP為低電平時(shí)禁止對(duì)存儲(chǔ)陣列或狀態(tài)寄存器的寫(xiě)操作,其它操作功能正常;WP為高電平,非易失性寫(xiě)在內(nèi)的所有功能都正常。任何時(shí)候?qū)P置為低電平都將復(fù)位寫(xiě)允許鎖存器。若一次內(nèi)部寫(xiě)已經(jīng)開(kāi)始,WP置成低電平不影響這次寫(xiě)。 HOLD是保持輸入腳,低電平有效,用于在數(shù)據(jù)傳送中途暫停向25AA040傳送。不用暫停功能時(shí),HOLD必須保持高電平。芯片被選中,正在串行傳送時(shí),可將HOLD置為低電平,暫停進(jìn)一步的傳送。方法是在SCK為低電平時(shí),將HOLD引腳變成低電平,不然在下一個(gè)SCK由高轉(zhuǎn)低前不能暫停傳送。此間,CS必須保持低電平。25AA040處于暫停時(shí),SI、SO、SCK腳均為高阻態(tài)。要恢復(fù)串行傳送,必須在SCK為低電平時(shí)將HOLD置為高電平。任何時(shí)候只要HOLD為低電平,SO腳將處于高阻態(tài)。
2工作原理 25XX040片內(nèi)有一個(gè)8位指令寄存器,指令通過(guò)SI腳接收,在SCK的上升沿串行輸入。指令輸入時(shí),CS腳必須為低電平,HOLD腳必須為高電平。WP必須保持高電平,允許寫(xiě)存儲(chǔ)器陣列。 表1是25XX040的指令集,指令字節(jié)中包含地址位A8,傳輸時(shí)最高位在前,最低位在后。 CS置為低電平后SCK的第一個(gè)上升沿開(kāi)始數(shù)據(jù)采樣。如果與SPI總線上的其它外圍器件共用SCK,可改變HOLD引腳電平將25AA040設(shè)置成“保持”方式。釋放HOLD后,再?gòu)腍OLD信號(hào)確認(rèn)處繼續(xù)傳送。 ---讀序列 CS降至低電平25AA040被選中。包括A8地址在內(nèi)的8位讀指令被傳送到25AA040,接著是低8位地址(A7~A0)。在接收到正確的讀指令及低8位地址后,選定地址的內(nèi)容由SO口串行輸出。而下一地址單元的內(nèi)容將隨著時(shí)鐘脈沖繼續(xù)輸出。每當(dāng)一個(gè)字節(jié)的數(shù)據(jù)傳送完畢,25AA040片內(nèi)的地址指針自動(dòng)加1,指向下一個(gè)地址。當(dāng)最高位地址(01FFH)內(nèi)容讀出后,地址指針指向0000H,下一個(gè)讀出周期將繼續(xù)。CS腳轉(zhuǎn)為高電平讀操作終止。
---寫(xiě)序列 在著手向25AA040寫(xiě)數(shù)據(jù)之前,必須先發(fā)出WREN指令,置位寫(xiě)允許鎖存器,其操作為:先將CS置為低電平,然后按時(shí)鐘節(jié)拍將WREN指令送至25AA040,當(dāng)指令的8位數(shù)全部傳送完畢后,再將CS端置為高電平置位寫(xiě)允許鎖存器。發(fā)出WREN指令后未將CS端置為高電平前,寫(xiě)允許鎖存器并沒(méi)有置位,向25AA040傳送的數(shù)據(jù)將不會(huì)被寫(xiě)入存儲(chǔ)器陣列。 寫(xiě)允許鎖存器置位后,再將CS端置為低電平,發(fā)出包括A8地址在內(nèi)的8位寫(xiě)指令及低8位地址(A7~A0),然后送要寫(xiě)入的數(shù)據(jù)。一次寫(xiě)序列最多可以連續(xù)寫(xiě)16個(gè)字節(jié)的數(shù)據(jù),且所有要寫(xiě)入的數(shù)據(jù)的地址必須在同一頁(yè)。一頁(yè)的首址為XXXX 0000,末址為XXXX 1111。若內(nèi)部地址計(jì)數(shù)器已到XXXX 1111,時(shí)鐘仍在繼續(xù),內(nèi)部地址計(jì)數(shù)器將重新指向該頁(yè)的首址XXXX 0000,原寫(xiě)入到該地址的內(nèi)容就會(huì)被覆蓋。 為將數(shù)據(jù)真正寫(xiě)入到25AA040中,須在字節(jié)寫(xiě)入或頁(yè)寫(xiě)入數(shù)據(jù)的第n個(gè)字節(jié)的最后一個(gè)有效位(D0)送出后將CS置為高電平。若在此外的其它時(shí)間將CS置為高電平,寫(xiě)操作就不能完成。在寫(xiě)操作進(jìn)行時(shí),可以讀狀態(tài)寄存器來(lái)檢查WIP、WEL、BP1和BP0位的狀態(tài)。在寫(xiě)周期內(nèi)是不可能讀存儲(chǔ)器陣列位置的。一旦寫(xiě)周期完成,寫(xiě)允許鎖存器也就被復(fù)位了。
---寫(xiě)允許(WREN)和寫(xiě)禁止(WRDI) 25AA040片內(nèi)有一個(gè)寫(xiě)允許鎖存器。表2為寫(xiě)保護(hù)功能表。在任何寫(xiě)操作將完成之前必須立即置位寫(xiě)允許鎖存器。寫(xiě)允許鎖存器由WREN指令置位,由WRDI指令復(fù)位。
滿足以下條件之一,寫(xiě)允許鎖存器將被復(fù)位: 1)上電;2)WRDI指令成功地執(zhí)行;3)WRSR指令成功地執(zhí)行;4)WRITE指令成功地執(zhí)行;5)WP引腳為低電平。 ---狀態(tài)寄存器讀(RDSR) RDSR指令讀狀態(tài)寄存器。狀態(tài)寄存器可在任何時(shí)候讀出。狀態(tài)寄存器的格式如下: 7 6 5 4 3 2 1 0 X X X X BP1 BP0 WEL WIP 其中,寫(xiě)入保護(hù)位(WIP)指示25AA040是否正忙于寫(xiě)入操作,是只讀位。WIP為“1”,表示寫(xiě)入正在進(jìn)行;WIP為“0”,表示未進(jìn)行寫(xiě)入操作。 寫(xiě)允許鎖存器狀態(tài)位(WEL)指示寫(xiě)允許鎖存器的狀態(tài),是只讀位。WEL為“1”,允許寫(xiě)陣列;WEL為“0”,鎖存器禁止寫(xiě)陣列。WEL位的狀態(tài)由執(zhí)行WREN或WRDI指令確定,與狀態(tài)寄存器是否寫(xiě)保護(hù)無(wú)關(guān)。 塊保護(hù)位(BP0和BP1)指示當(dāng)前保護(hù)的塊地址。塊保護(hù)地址由用戶發(fā)出的WRSR指令設(shè)定。一旦該塊地址的內(nèi)容被保護(hù),就只能讀出而不能寫(xiě)入。
---狀態(tài)寄存器寫(xiě)(WRSR) WRSR指令允許用戶通過(guò)寫(xiě)狀態(tài)寄存器BP1、BP0位的方法選擇對(duì)存儲(chǔ)器的保護(hù)區(qū),BP0、BP1與塊保護(hù)地址的關(guān)系見(jiàn)表3。 ---數(shù)據(jù)保護(hù)
25AA040采取用多種措施保證存儲(chǔ)器陣列不被誤寫(xiě)入。1)上電時(shí)復(fù)位寫(xiě)允許鎖存器;2)必須發(fā)出寫(xiě)允許指令方可置位寫(xiě)允許鎖存器;3)在單字節(jié)寫(xiě)入、頁(yè)寫(xiě)入或狀態(tài)寄存器寫(xiě)入后,寫(xiě)允許鎖存器被復(fù)位;4)對(duì)芯片寫(xiě)入時(shí),在接收了定數(shù)量的時(shí)鐘周期之后,必須將CS端置為高電平,芯片內(nèi)部的寫(xiě)周期才開(kāi)始;5)在內(nèi)部寫(xiě)周期期間,對(duì)存儲(chǔ)器陣列的存取無(wú)效;6)WP引腳為高電平時(shí),復(fù)位寫(xiě)允許鎖存器。
---芯片上電時(shí)的狀態(tài) 25AA040上電時(shí)的狀態(tài)如下:器件處于低功耗待機(jī)方式(CS=1);寫(xiě)允許鎖存器被復(fù)位;SO引腳為高阻態(tài);必須將CS引腳置為低電平方可進(jìn)入工作狀態(tài)。
|