徐錦鋼 鄢 妍
(1.江西師范大學科學技術(shù)學院,江西 南昌 330032;2.江西機電職業(yè)技術(shù)學院,江西 南昌 330032)
工程人員在從事電路設(shè)計工作時, 有時會提出數(shù)據(jù)存儲的功能需求, 此時在電路中就必須加入存儲器。 目前市面上的存儲芯片種類繁多, 比如NAND flash、NOR flash、EEPROM、磁盤等。 本文采用的存儲芯片AT24C01 屬于EEPROM 類型, 具有價格低廉、 功耗低、 易操作等優(yōu)點, 特別適合存儲數(shù)據(jù)量不太大的場合,故本文選用AT24C01 作為電路的存儲芯片。
圖1 電路連接圖
電路連接圖如圖1 所示, 主要包括AT89C52 單片機、AT24C01、1602 液晶屏和2 個10K 上拉電阻等元器件,系統(tǒng)上電后,每秒讓num 值加1,0-99 循環(huán)計數(shù),通過仿真,從圖1 中可以看到在num 計到53 時,斷電再次上電,系統(tǒng)從53 開始加1 計數(shù),說明斷電前的53已經(jīng)順利寫入到了AT24C01 中, 再次上電時又順利地從AT24C01 中讀取了53, 說明在本文設(shè)計的電路中,存儲器讀寫正常,軟硬件設(shè)計正確,功能正常。
AT24C01 是ATMEL 公司生產(chǎn)的一種EEPROM 型存儲芯片,可以電擦除,存儲容量為1024 位。也有其他容量的型號可供選擇, 比如AT24C02 的容量為2048 位。通過2 線制IIC 總線接口與單片機或其他MCU 進行數(shù)據(jù)傳輸,傳輸遵循IIC 通信協(xié)議標準。
下面闡述AT24C01 的電路連接問題:AT24C01 一共有8 個管腳,其中4 腳GND 接地;8 腳VCC 為電源端,接+5V。1、2、3 腳共同組成器件地址選擇端,本設(shè)計因為只使用了1 片AT24C01,所以將1、2、3 腳接地,表示本設(shè)計中的AT24C01 器件地址為0 號地址。 5 腳SDA和6 腳SCK 是1 組IIC 總線接口, 分別接至單片機的P2.4 和P2.5 腳,同時分別通過10K 電阻上拉,使得總線空閑時,SDA 和SCK 均明確為高電平。
1.2.1 IIC 總線的主要特點
IIC 總線是飛利浦推出的一種串行總線,具備多主機系統(tǒng)所需的包括總線裁決和高低速器件同步功能。IIC 只有兩根雙向信號線: 數(shù)據(jù)線SDA 和時鐘線SCK,使得在設(shè)計時大大減少了硬件接口開銷。 每個連接到總線上的IIC 器件都有一個用于識別的器件地址編碼, 該地址由外部地址引線和內(nèi)部硬件電路同時決定, 每個器件既可作為接收器, 也可作為發(fā)送器。 因此,IIC 總線上可以掛多個器件, 而每個器件都有唯一的地址, 這樣可以標識通信目標。 數(shù)據(jù)的通信的方式采用主從方式, 主機負責主動聯(lián)系從機, 而從機則被動回應(yīng)數(shù)據(jù)。
1.2.2 IIC 總線的數(shù)據(jù)傳輸
(1)數(shù)據(jù)傳輸格式
每個字節(jié)須保證是8 位長度。數(shù)據(jù)傳輸時,先傳最高位, 每個被傳輸字節(jié)的最后都須跟隨一位應(yīng)答位,即一幀數(shù)據(jù)共有9 位。
(2)數(shù)據(jù)幀格式
IIC 總線上傳輸?shù)臄?shù)據(jù)除了包括真正的數(shù)據(jù)信號,也包括地址信號。 在起始信號后面必須傳送一個從機地 址 (7 位), 第8 位 是 數(shù) 據(jù) 的 傳 送 方 向 位 (接 收/發(fā)送),“1”表示接收數(shù)據(jù),“0”表示發(fā)送數(shù)據(jù)。 數(shù)據(jù)傳送總是由主機產(chǎn)生的終止信號結(jié)束。 但是, 若主機希望繼續(xù)占用總線進行新的數(shù)據(jù)傳送, 則可以不產(chǎn)生終止信號,馬上再次發(fā)出起始信號對另一從機進行尋址。
(3)數(shù)據(jù)有效性
在SCL=1 期間, 數(shù)據(jù)線SDA 必須保持穩(wěn)定;在SCL=0 時,數(shù)據(jù)線SDA 才允許改變。
(4)起始信號和終止信號
起始信號為: 在SCL=1 期間,SDA 出現(xiàn)下降沿;終止信號為:SCL=1 期間,SDA 出現(xiàn)上升沿, 并且保持的時間也做了限制。
(5)應(yīng)答信號和非應(yīng)答信號
主機往總線上發(fā)送一個字節(jié)的數(shù)據(jù)后,釋放總線,從機會把總線拉低(即產(chǎn)生應(yīng)答信號),以表示這一字節(jié)發(fā)送成功。 同理主機從總線上讀取完一個字節(jié)的數(shù)據(jù)后, 主機會把總線拉低, 通知從機該字節(jié)的數(shù)據(jù)接收成功。
(6)器件地址
對 于AT24C01, 由 于 在 本 設(shè) 計 中,A2、A1、A0 已 固定接低電平,即000,而高四位固定為1010,這7 位組成了器件地址。 最后一位R/W 是讀寫方向控制位,0為寫方向,1 為讀方向,所以本設(shè)計中的AT24C01 器件地 址 為: 讀 地 址 為 10100001, 即 0x91; 寫 地 址 為10100000,即0x90。
(7)寫操作
向AT24C01 的某個單元地址里寫一個字節(jié)的數(shù)據(jù),其操作順序為:起始,寫器件地址,應(yīng)答,寫單元地址,應(yīng)答,寫數(shù)據(jù),應(yīng)答,終止。 單片機發(fā)送起始信號,然后發(fā)送1 個字節(jié)的控制字, 再發(fā)送1 個字節(jié)的AT24C01 單元地址, 在發(fā)出這些字節(jié)都得到AT24C01應(yīng)答后, 單片機接著發(fā)送8 位數(shù)據(jù), 最后發(fā)送1 位停止信號, 這樣1 個字節(jié)數(shù)據(jù)被寫入了AT24C01 的指定單元中。
(8)讀操作
從AT24C01 某個指定單元地址讀取數(shù)據(jù), 其操作順序為:起始,寫器件地址+0(下一個字節(jié)為寫),應(yīng)答,寫單元地址,應(yīng)答,起始,寫器件地址+1(下一個字節(jié)為讀取),讀取數(shù)據(jù),終止。 單片機在起始信號后先發(fā)送含片選地址的寫操作控制字,AT24C01 應(yīng)答后再發(fā)送1 個字節(jié)的指定單元地址,AT24C01 應(yīng)答后再發(fā)送1個含有片選地址的讀操作控制字, 此時如果AT24C01做出應(yīng)答,該指定單元的數(shù)據(jù)就會被讀出[1]。
讀操作和寫操作是AT24C01 最關(guān)鍵的兩個操作,根據(jù)上文中對讀字節(jié)和寫字節(jié)操作時序的分析, 本文編寫了完整的AT24C01 讀、寫操作函數(shù),如下文所述。
void write_byte(uchar date)//寫1 個字節(jié)數(shù)據(jù)
uchar read_byte()//讀1 個字節(jié)數(shù)據(jù)
本文闡述了基于單片機的AT24C01 數(shù)據(jù)讀寫操作方法,描述了AT24C01 的特點、讀寫操作時序,編寫了完整的AT24C01 讀寫操作程序代碼。 通過AT24C01 存儲器的軟硬件設(shè)計和仿真, 為以后在電路設(shè)計領(lǐng)域中進行更為深入的研究打下了基礎(chǔ)。