基于Keil C的AT24C02串行E2PROM的編程
AT24C02是美國Atmel公司的低功耗CMOS型E2PROM,內(nèi)含256×8位存儲空間,具有工作電壓寬(2。5~5。5V)、擦寫次數(shù)多(大于10000次)、寫入速度快(小于10ms)、抗干擾能力強(qiáng)、數(shù)據(jù)不易丟失、體積小等特點(diǎn)。而且他是采用了I2C總線式進(jìn)行數(shù)據(jù)讀寫的串行器件,占用很少的資源和I/O線,并且支持在線編程,進(jìn)行數(shù)據(jù)實(shí)時(shí)的存取十分方便。
本文引用地址:http://butianyuan.cn/article/148993.htm1AT24C02的引腳功能
AT24C02引腳如圖1所示。
他的的1、2、3腳是3根地址線,用于確定芯片的硬件地址。第8腳和第4腳分別為正、負(fù)電源。第5腳SDA為串行數(shù)據(jù)輸入/輸出,數(shù)據(jù)通過這根雙向I2C總線串行傳送。第6腳SCL為串行時(shí)鐘,SDA和SCL為漏極開路端,在實(shí)際的應(yīng)用當(dāng)中都需要和正電源間各接一個(gè)5。1kΩ的電阻上拉。第7腳為WP寫保護(hù)端,接地時(shí)允許芯片執(zhí)行一般的讀寫操作;接正電源時(shí)只允許對器件進(jìn)行讀操作。
2AT24C02的內(nèi)部結(jié)構(gòu)
圖2為AT24C02的內(nèi)部結(jié)構(gòu)圖。
啟動、停止邏輯單元接收數(shù)據(jù)引腳SDA上的電平信號,判斷是否進(jìn)行啟動和停止操作串行控制邏輯單元根據(jù)SCL,SDA電平信號以及“啟動、停止邏輯”部件發(fā)出的各種信號進(jìn)行區(qū)分,并排列出有關(guān)的“尋址”、“讀數(shù)據(jù)”和“寫數(shù)據(jù)”等邏輯,將他們傳送到相應(yīng)的操作單元。例如:當(dāng)操作命令為“尋址”時(shí)候,他將通知地址計(jì)數(shù)器加1,并啟動“地址比較”器進(jìn)行工作。在“讀數(shù)據(jù)”時(shí),他控制“Dout/確認(rèn)邏輯”單元;在“寫數(shù)據(jù)”時(shí)候,他控制“高壓泵/定時(shí)”電路,以便向E2PROM電路提供編程所需要的高電壓。
地址/計(jì)數(shù)器單元產(chǎn)生訪問E2PROM所需要的存儲單元的地址,并將其分別送到X譯碼器進(jìn)行字選,送到Y(jié)譯碼器進(jìn)行位選。
高壓泵/定時(shí)單元由于E2PROM數(shù)據(jù)寫入時(shí)候需要向電路施加編程高電壓,為了解決單一電源電壓的供電問題,芯片生產(chǎn)廠家采用了電壓的片內(nèi)提升電路。電壓的提升范圍一般可以達(dá)12~21。5V。
Dout/確認(rèn)邏輯單元地址和數(shù)據(jù)均以8位二進(jìn)制碼串行輸入/輸出。數(shù)據(jù)傳送時(shí),每成功傳送一個(gè)字節(jié)數(shù)據(jù)后,接收器都必須產(chǎn)生一個(gè)應(yīng)答信號。在第9個(gè)時(shí)鐘周期時(shí)將SDA線置于低電壓作為應(yīng)答信號。
AT24C02中帶有的片內(nèi)地址寄存器。每寫入或讀出一個(gè)數(shù)據(jù)字節(jié)后,該地址寄存器自動加1,以實(shí)現(xiàn)對下一個(gè)存儲單元的讀寫。所有字節(jié)均以單一操作方式讀取。為降低總的寫入時(shí)間,一次操作可寫入多達(dá)8個(gè)字節(jié)的數(shù)據(jù)。
I2C總線是一種用于IC器件之間連接的二線制總線。他通過SDA(串行數(shù)據(jù)線)及SCL(串行時(shí)鐘線)兩根線在連到總線上的器件之間傳送信息,并根據(jù)地址識別每個(gè)器件。AT24C02正是運(yùn)用了I2C規(guī)程,使用主/從機(jī)雙向通信,主機(jī)(通常為單片機(jī))和從機(jī)(AT24C02)均可工作于接收器和發(fā)送器狀態(tài)。主機(jī)產(chǎn)生串行時(shí)鐘信號(通過SCL引腳)并發(fā)出控制字,控制總線的傳送方向,并產(chǎn)生開始和停止的條件。無論是主機(jī)還是從機(jī),接收到一個(gè)字節(jié)后必須發(fā)出一個(gè)確認(rèn)信號ACK。
AT24C02的控制字由8位二進(jìn)制數(shù)構(gòu)成,在開始信號發(fā)出以后,主機(jī)便會發(fā)出控制字,以選擇從機(jī)并控制總線傳送的方向??刂谱指魑坏木唧w作用見表1。
由上表可知,控制字的高4位為AT24C02的識別位,是不能更改的;而第A0,A1,A2片選位,最后是一位是讀寫控制位,當(dāng)其為1時(shí),進(jìn)行的是讀操作,反之將要進(jìn)行的是寫操作。
3AT24C02的讀寫操作
3。1開始位、停止位和確認(rèn)位的編程
總線SCL和SDA一般由上拉電阻拉為高電平,只有在SCL為低電平的周期內(nèi),SDA引腳上的數(shù)據(jù)才有效。而當(dāng)SCL為高電平期間SDA引腳上產(chǎn)生的電平變化則表示I2C總線工作的“開始”或“停止”兩種狀態(tài):當(dāng)SCL為高平時(shí),SDA由高電平轉(zhuǎn)向低電平時(shí)表示“開始”狀態(tài),而由低電平轉(zhuǎn)向高電平時(shí)表示“停止”狀態(tài),其時(shí)序如圖3所示。
由時(shí)序圖可以編寫由主機(jī)發(fā)給AT24C02的開始信號和停止信號的KEILC語言函數(shù)如下:
同時(shí),AT24C02與主機(jī)進(jìn)行信息交換,還需要另外一個(gè)“確認(rèn)信號(ACK)”的狀態(tài)。I2C總線數(shù)據(jù)傳送時(shí),每成功地傳送一個(gè)字節(jié)數(shù)據(jù)后,AT24C02都必須產(chǎn)生一個(gè)應(yīng)答信號,應(yīng)答的器件在第9個(gè)時(shí)鐘周期時(shí)將SDA線拉低,表示其已收到一個(gè)8位數(shù)據(jù)。AT24C02在接收到起始信號和與之匹配的地址之后就會響應(yīng)第一個(gè)應(yīng)答信號;如果AT24C02被設(shè)置為寫操作,則每接收一個(gè)字節(jié)之后響應(yīng)一個(gè)應(yīng)答信號;當(dāng)AT24C02被設(shè)置在讀模式時(shí),則在發(fā)送一個(gè)字節(jié)的數(shù)據(jù)后會釋放SDA線,并監(jiān)視主機(jī)發(fā)過來的應(yīng)答信號,一旦接收到應(yīng)答信號,AT24C02繼續(xù)發(fā)送數(shù)據(jù),如主機(jī)沒有發(fā)送應(yīng)答信號,AT24C02將停止傳送數(shù)據(jù)并等待一個(gè)停止信號,此時(shí)主機(jī)必須發(fā)送一個(gè)停止信號給AT24C02,使其進(jìn)入備用電源模式并使AT24C02處于已知的狀態(tài)。由此可見,應(yīng)答信號在AT24C02的讀寫工作中經(jīng)常用到,根據(jù)圖4應(yīng)答信號的時(shí)序圖。
可以編出一個(gè)檢驗(yàn)是否有應(yīng)答信號送來的操作函數(shù)如下:
3。2寫操作
AT24C02允許有兩種寫操作方式:字節(jié)寫和頁寫。
3。2。1AT24C02字節(jié)寫操作。
其操作時(shí)序如圖5所示。在字節(jié)寫模式下,主機(jī)發(fā)送開始命令和AT24C02地址信息(“R/W”位置0)給AT24C02,主機(jī)在收到AT24C02產(chǎn)生應(yīng)答信號后發(fā)送1個(gè)字節(jié)地址寫入AT24C02的地址指針。主機(jī)在收到從器件的另一個(gè)應(yīng)答信號后,再發(fā)送數(shù)據(jù)到被尋址的存儲單元。AT24C02再次應(yīng)答,并在主機(jī)產(chǎn)生停止信號后開始內(nèi)部數(shù)據(jù)的擦寫。在內(nèi)部擦寫過程中,AT24C02不再應(yīng)答主機(jī)的任何請求。根據(jù)圖5則可以編寫出AT24C02的字節(jié)寫操作函數(shù)W1Byte如下:
評論