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