1概述
近年來,以單片機為核心構(gòu)成的智能儀器儀表與數(shù)據(jù)采集系統(tǒng)獲得了愈來愈廣泛的應用。傳統(tǒng)的數(shù)據(jù)存儲方法均是通過總線型非易失數(shù)據(jù)存儲器來保存采集的數(shù)據(jù)。隨著單片機技術(shù)的不斷發(fā)展及各種非總線型單片機的不斷涌現(xiàn),采用非總線型單片機并配合大容量串行E2PROM構(gòu)成的數(shù)據(jù)存儲系統(tǒng),將是一種非常好的數(shù)據(jù)存儲方法。該方法一方面可提高系統(tǒng)的可靠性,另一方面又可降低系統(tǒng)成本。
AT24C512是ATMEL公司新近推出的具有I2C總線容量達512Kbit(64K×8)的E2PROM,該芯片的主要特性如下:存儲容量為 65536byte;與100kHz、400kHz、1MHzI2C總線兼容;100000次編程/擦寫周期;單電源、讀寫電壓為 1.8V~5.5V;ESD保護電壓>4kV;數(shù)據(jù)可保存40年;寫保護功能,當WP為高電平時,進入寫保護狀態(tài);CMOS低功耗技術(shù),最大寫入電流為3mA;128byte頁寫入緩存器;自動定時的寫周期;具有8引腳DIP及20引腳SOIC封裝等多種封裝形式。
2引腳排列及功能
AT24C512的DIP型封裝及20引腳的SOIC型封裝的引腳排列如圖1所示,各個引腳的功能如下:
SCL:串行時鐘該引腳為一輸入引腳,用于產(chǎn)生器件所有數(shù)據(jù)發(fā)送或接收的時鐘。
SDA:串行數(shù)據(jù)/地址雙向串行數(shù)據(jù)/地址引腳,用于器件所有數(shù)據(jù)的發(fā)送或接收。SDA是1個開漏輸出引腳,可與其它開漏輸出或集電極開路輸出進行線接。
WP:寫保護當引腳WP連接到VCC時,所有存儲數(shù)據(jù)變?yōu)閷懕Wo。當引腳WP接VSS時,則允許器件進行正常讀寫操作。
A0,A1:器件地址輸入這兩個引腳為硬件連線或者不連接,通過連接VCC或VSS的組合可使單總線最多尋址4個AT24C512,當這些引腳沒有連接時其默認值為0。
(a) SOIC封裝 (b) DIP封裝
圖1 AT24C512引腳排列圖
3器件功能描述
AT24C512是具有I2C總線的存儲芯片,因此該器件必須嚴格遵守I2C總線傳輸協(xié)議。I2C總線簡單的硬件接口是以復雜的時序及軟件編程為代價的,下面首先對該器件的時序進行描述。
(1)起停信號
時鐘線保持高電平期間,數(shù)據(jù)線電平從高到低的跳變代為I2C總線的起始信號。時鐘線保持高電平期間,數(shù)據(jù)線電平從低到高的跳變代為I2C總線的停止信號。
(2)器件尋址
主器件通過發(fā)送1個起始信號啟動發(fā)送過程,然后發(fā)送它所需要尋址的從器件地址,8位從器件地址的高5位固定為10100,接下來的2位(A0,A1)為器件的地址位,因此最多可以將4個AT24C512連接到同一總線上使存儲容量擴展至256Kbyte。注意,這兩位必須與A0和A1兩引腳的輸入狀態(tài)相對應,從器件地址的最低位為讀寫控制位,“1”表示對從器件進行讀操作,“0”表示對從器件進行寫操作,在主器件發(fā)送起始信號和從器件發(fā)送地址字節(jié)后,AT24C512監(jiān)測總線并當其地址與發(fā)送的從地址相符時發(fā)出1個應答信號(通過SDA線),AT24C512再根據(jù)讀寫控制位(R/W)的狀態(tài)進行讀寫操作,從器件地址字節(jié)內(nèi)容如表1所示。
(3)應答信號
I2C總線傳送數(shù)據(jù)時,每成功傳送1個字節(jié),接收器都必須產(chǎn)生1個應答信號,應答的器件在第9個時鐘周期將SDA線拉低表示其已收到1個8位數(shù)據(jù)。AT24C512在接收到起始信號和從器件地址之后產(chǎn)生應答信號,如果器件已選擇了寫操作,則在每接收1個8位字節(jié)之后1個應答信號。
當該器件工作于讀模式時,在發(fā)送1個8位數(shù)據(jù)后釋放SDA線并監(jiān)測1個應答信號,一旦接收到應答信號,則繼續(xù)發(fā)送數(shù)據(jù),若主器件沒有發(fā)送應答信號,器件停止傳送數(shù)據(jù)并等待1個停止信號。
掌握了AT24C512的操作時序后再配合一定的地址/數(shù)據(jù)信息就可完成該器件的讀寫操作。
(4)寫操作
寫操作可分為字節(jié)寫和頁寫兩種寫入方式。通常E2PROM的寫入占用一定的寫入時間,但AT24C512內(nèi)部設有128字節(jié)的頁寫緩存,使得操作該器件如同操作SRAM一樣方便,頁面緩存使得兩種寫入方式的操作過程相同,區(qū)別僅在于寫入數(shù)據(jù)字節(jié)的多少。下面以字節(jié)寫入為例介紹寫操作過程。
在字節(jié)寫操作模式下,主器件首先給從器件發(fā)送起始信號和從器件地址信息,在從器件送回應答信號后,主器件在發(fā)送兩字節(jié)的16位地址信息寫入到 AT24C512地址指針,主器件在收到從器件的應答信號后,再發(fā)送1個字節(jié)的數(shù)據(jù)到被尋址的存儲單元,從器件在此應答,并在主器件產(chǎn)生停止信號后開始內(nèi)部數(shù)據(jù)擦寫,在內(nèi)部擦寫過程中,從器件不再應答主器件的任何請求,字節(jié)寫入操作時序如圖2所示。
圖2 字節(jié)寫操作時序
(5)讀操作
讀操作分為立即讀、隨機讀和連續(xù)讀。立即讀是在最后操作字節(jié)的地址上加1進行讀取,而連續(xù)讀則是在立即讀和隨機讀起動后主器件通過應答信號響應完成多個數(shù)據(jù)的讀取,在主器件發(fā)出停止信號后結(jié)束讀取過程。下面以隨機讀為例介紹讀操作過程。
隨機讀操作允許主器件對存儲器的任意字節(jié)進行讀操作。操作過程為主器件首先發(fā)送起始信號,從器件地址和欲讀取字節(jié)的地址執(zhí)行1個偽寫操作,此時R/W位應置0,在AT24C512應答后,主器件重新發(fā)送起始信號和從器件地址,此時R/W位應置1,AT24C512響應并發(fā)送應答信號,然后輸出所要求的1個 8位字節(jié)數(shù)據(jù)。主器件不發(fā)送應答信號,但產(chǎn)生1個停止信號。字節(jié)讀操作時序如圖3所示。
4應用
AT24C512與AT89C2051單片機的硬件連接電路如圖4所示。這里使用了2個AT24C512組成尋址空間為128K字節(jié)的E2PROM存儲器電路。其中U2的器件地址為A0H,存儲地址空間為0000-0FFFFH;U3的器件地址為A2H,存儲地址空間為0000-0FFFFH。
圖3 字節(jié)讀操作時序
由于AT89C2051不具有I2C總線,因此采用P1.0和P1.1口線來模擬I2C總線,AT24C512的SDA和SCL為開漏輸出,故接入10kΩ的上拉電阻器。下面是與上述電路配套的E2PROM讀寫程序:
;內(nèi)存數(shù)據(jù)定義
BitCnt DATA 30H;讀/寫數(shù)據(jù)位數(shù)計數(shù)器
ByteCnt DATA 31H;讀/寫數(shù)據(jù)字節(jié)數(shù)計數(shù)器
SlvAddr DATA 32H;E2PROM器件地址
SubAdrl DATA 33H;存儲單元地址高8位
SubAdr2 DATA 34H;存儲單元地址低8位
ReadDat DATA 50H;讀操作數(shù)據(jù)緩沖區(qū)
WriteDat DATA 40H;寫操作數(shù)據(jù)緩沖區(qū)
;端口位定義
SDA BIT P1.0;模擬I2C數(shù)據(jù)傳送位
SCL BIT P1.1;模擬I2C時鐘控制位
ACK BIT 20H;讀非應答標志
;主程序
MAIN: MOV SP #60H;設堆棧
Write: MOV SlvAdr, #A0H;選擇1個器件地址
MOV ByteCnt, #08H;設寫入數(shù)據(jù)長度為8字節(jié)
MOV SubAdr1, #00H;設寫入單元首址為0020H
MOV SubAdr2, #20H;
LCALL WriteData ; 寫數(shù)據(jù)
……
Read: MOV Slvadr, #A0H;選擇1個器件地址
MOV Bytecnt, #08H;設讀出數(shù)據(jù)長度為8字節(jié)
MOV SubAdr1, #00H;設讀出單元
MOV SubAdr2, #20H;首址為0020H
LCALL ReadData; 讀數(shù)據(jù)
……
WriteData:LCALL Start; I2C總線起始條件
MOV A,SlvAdr; 取器件地址
LCALL writeByte; 發(fā)送器件地址
MOV A,SubAdr1
LCALL writeByte;發(fā)送高8位地址
MOV A,SubAdr2
LCALLwriteByte;發(fā)送低8位地址
MOVR0,#WriteDat;取寫入數(shù)據(jù)的首地址
Next:MOVA,@R0
LCALLwriteByte;寫入1字節(jié)數(shù)據(jù)
LNCR0;取下1個數(shù)據(jù)
DJNZByteCnt,Next;重復操作直到寫完全部數(shù)據(jù)
LCALLStop;發(fā)送I2C總線停止條件
LCALLDL10ms;延時10ms等待E2PROM內(nèi)部數(shù)據(jù)
;寫完
RET
;讀數(shù)據(jù)子程序
ReadData:LCALLStart
MOVA,SlvAdr
LCALLWriteByte
MOVA,Subadr1
LCALLWriteByte
MOVA,Subadr2
LCALLWriteByte
LCALLStart;重復發(fā)送I2C總線起始條件
MOVA,Slvadr
SETBACC.0;R/W位置1
LCALLWriteByte
CLRACK;請讀非應答標志
MOVR0,#RdadData;讀緩沖區(qū)首址
DJNZByteCnt,Next1
SJMPLast
Next1:LCALLReadByte;接收1個字節(jié)數(shù)據(jù)
MOV@R0,A;接收數(shù)據(jù)送緩沖區(qū)
INCR0
DJNZByteCnt,Next1;重復接收
Last:SETBACK;接收最后1個字節(jié)數(shù)據(jù)
ACALLReadByte
MOV#R0,A
LCALLStop
RET
上面給出讀寫操作主程序、頁面寫入子程序及其多字節(jié)讀子程序。受篇幅限制,部分子程序沒有給出,讀者可根據(jù)AT24C512的操作時序自行編制或參閱相關(guān)文獻。
5結(jié)束語
由AT24C512與AT89C2051等非總線單片機構(gòu)成的數(shù)據(jù)采集存儲系統(tǒng)具有體積小、成本低、可靠性高的特點,因而具有很高的應用價值。