AT24C02是美國Atmel公司的低功耗CMOS型E2PROM,內含256×8位存儲空間,具有工作電壓寬(2.5~5.5 V)、擦寫(xiě)次數多(大于10 000次)、寫(xiě)入速度快(小于10 ms)、抗干擾能力強、數據不易丟失、體積小等特點(diǎn)。而且他是采用了I2C總線(xiàn)式進(jìn)行數據讀寫(xiě)的串行器件,占用很少的資源和I/O線(xiàn),并且支持在線(xiàn)編程,進(jìn)行數據實(shí)時(shí)的存取十分方便。 1 AT24C02的引腳功能 AT24C02引腳如圖1所示。 他的的1、2、3腳是3根地址線(xiàn),用于確定芯片的硬件地址。第8腳和第4腳分別為正、負電源。第5腳SDA為串行數據輸入/輸出,數據通過(guò)這根雙向I2C總線(xiàn)串行傳送。第6腳SCL為串行時(shí)鐘,SDA和SCL為漏極開(kāi)路端,在實(shí)際的應用當中都需要和正電源間各接一個(gè)5.1 kΩ的電阻上拉。第7腳為WP寫(xiě)保護端,接地時(shí)允許芯片執行一般的讀寫(xiě)操作;接正電源時(shí)只允許對器件進(jìn)行讀操作。 2 AT24C02的內部結構 圖2為AT24C02的內部結構圖。 啟動(dòng)、停止邏輯單元 接收數據引腳SDA上的電平信號,判斷是否進(jìn)行啟動(dòng)和停止操作串行控制邏輯單元 根據SCL,SDA電平信號以及“啟動(dòng)、停止邏輯”部件發(fā)出的各種信號進(jìn)行區分,并排列出有關(guān)的“尋址”、“讀數據”和“寫(xiě)數據”等邏輯,將他們傳送到相應的操作單元。例如:當操作命令為“尋址”時(shí)候,他將通知地址計數器加1,并啟動(dòng)“地址比較”器進(jìn)行工作。在“讀數據”時(shí),他控制“Dout/確認邏輯”單元;在“寫(xiě)數據”時(shí)候,他控制“高壓泵/定時(shí)”電路,以便向E2PROM電路提供編程所需要的高電壓。 地址/計數器單元 產(chǎn)生訪(fǎng)問(wèn)E2PROM所需要的存儲單元的地址,并將其分別送到X譯碼器進(jìn)行字選,送到Y譯碼器進(jìn)行位選。 高壓泵/定時(shí)單元 由于E2PROM數據寫(xiě)入時(shí)候需要向電路施加編程高電壓,為了解決單一電源電壓的供電問(wèn)題,芯片生產(chǎn)廠(chǎng)家采用了電壓的片內提升電路。電壓的提升范圍一般可以達12~21.5 V。 Dout/確認邏輯單元 地址和數據均以8位二進(jìn)制碼串行輸入/輸出。數據傳送時(shí),每成功傳送一個(gè)字節數據后,接收器都必須產(chǎn)生一個(gè)應答信號。在第9個(gè)時(shí)鐘周期時(shí)將SDA線(xiàn)置于低電壓作為應答信號。 AT24C02中帶有的片內地址寄存器。每寫(xiě)入或讀出一個(gè)數據字節后,該地址寄存器自動(dòng)加1,以實(shí)現對下一個(gè)存儲單元的讀寫(xiě)。所有字節均以單一操作方式讀取。為降低總的寫(xiě)入時(shí)間,一次操作可寫(xiě)入多達8個(gè)字節的數據。 I2C總線(xiàn)是一種用于IC器件之間連接的二線(xiàn)制總線(xiàn)。他通過(guò)SDA(串行數據線(xiàn))及SCL(串行時(shí)鐘線(xiàn))兩根線(xiàn)在連到總線(xiàn)上的器件之間傳送信息,并根據地址識別每個(gè)器件。 AT24C02正是運用了I2C規程,使用主/從機雙向通信,主機(通常為單片機)和從機(AT24C02)均可工作于接收器和發(fā)送器狀態(tài)。主機產(chǎn)生串行時(shí)鐘信號(通過(guò)SCL引腳)并發(fā)出控制字,控制總線(xiàn)的傳送方向,并產(chǎn)生開(kāi)始和停止的條件。無(wú)論是主機還是從機,接收到一個(gè)字節后必須發(fā)出一個(gè)確認信號ACK。 AT24C02的控制字由8位二進(jìn)制數構成,在開(kāi)始信號發(fā)出以后,主機便會(huì )發(fā)出控制字,以選擇從機并控制總線(xiàn)傳送的方向?刂谱指魑坏木唧w作用見(jiàn)表1。 由上表可知,控制字的高4位為AT24C02的識別位,是不能更改的;而第A(yíng)0,A1,A2片選位,最后是一位是讀寫(xiě)控制位,當其為1時(shí),進(jìn)行的是讀操作,反之將要進(jìn)行的是寫(xiě)操作。 3 AT24C02的讀寫(xiě)操作 3.1 開(kāi)始位、停止位和確認位的編程 總線(xiàn)SCL和SDA一般由上拉電阻拉為高電平,只有在SCL為低電平的周期內,SDA引腳上的數據才有效。而當SCL為高電平期間SDA引腳上產(chǎn)生的電平變化則表示I2C總線(xiàn)工作的“開(kāi)始”或“停止”兩種狀態(tài):當SCL為高平時(shí),SDA由高電平轉向低電平時(shí)表示“開(kāi)始”狀態(tài),而由低電平轉向高電平時(shí)表示“停止”狀態(tài),其時(shí)序如圖3所示。 由時(shí)序圖可以編寫(xiě)由主機發(fā)給AT24C02的開(kāi)始信號和停止信號的KEIL C語(yǔ)言函數如下: 同時(shí),AT24C02與主機進(jìn)行信息交換,還需要另外一個(gè)“確認信號(ACK)”的狀態(tài)。I2C總線(xiàn)數據傳送時(shí),每成功地傳送一個(gè)字節數據后,AT24C02都必須產(chǎn)生一個(gè)應答信號,應答的器件在第9個(gè)時(shí)鐘周期時(shí)將SDA線(xiàn)拉低,表示其已收到一個(gè)8位數據。AT24C02在接收到起始信號和與之匹配的地址之后就會(huì )響應第一個(gè)應答信號;如果AT24C02被設置為寫(xiě)操作,則每接收一個(gè)字節之后響應一個(gè)應答信號;當AT24C02被設置在讀模式時(shí),則在發(fā)送一個(gè)字節的數據后會(huì )釋放SDA線(xiàn),并監視主機發(fā)過(guò)來(lái)的應答信號,一旦接收到應答信號,AT24C02繼續發(fā)送數據,如主機沒(méi)有發(fā)送應答信號,AT24C02將停止傳送數據并等待一個(gè)停止信號,此時(shí)主機必須發(fā)送一個(gè)停止信號給AT24C02,使其進(jìn)入備用電源模式并使AT24C02處于已知的狀態(tài)。由此可見(jiàn),應答信號在A(yíng)T24C02的讀寫(xiě)工作中經(jīng)常用到,根據圖4應答信號的時(shí)序圖。 可以編出一個(gè)檢驗是否有應答信號送來(lái)的操作函數如下: 3.2 寫(xiě)操作 AT24C02允許有兩種寫(xiě)操作方式:字節寫(xiě)和頁(yè)寫(xiě)。 3.2.1 AT24C02字節寫(xiě)操作。 其操作時(shí)序如圖5所示。在字節寫(xiě)模式下,主機發(fā)送開(kāi)始命令和AT24C02地址信息(“R/W”位置0)給AT24C02,主機在收到AT24C02產(chǎn)生應答信號后發(fā)送1個(gè)字節地址寫(xiě)入AT24C02的地址指針。主機在收到從器件的另一個(gè)應答信號后,再發(fā)送數據到被尋址的存儲單元。AT24C02再次應答,并在主機產(chǎn)生停止信號后開(kāi)始內部數據的擦寫(xiě)。在內部擦寫(xiě)過(guò)程中,AT24C02不再應答主機的任何請求。根據圖5則可以編寫(xiě)出AT24C02的字節寫(xiě)操作函數W1Byte如下: 3.2.2 AT24C02頁(yè)寫(xiě)操作 AT24C02允許每次寫(xiě)入8個(gè)字節的頁(yè)寫(xiě)操作模式,頁(yè)寫(xiě)操作和字節寫(xiě)操作的時(shí)序差不多都相同,不同的是在于傳送了一字節數據后并不產(chǎn)生停止信號,主機被允許再發(fā)送7個(gè)額外的字節。每發(fā)送一個(gè)字節數據后,AT24C02產(chǎn)生一個(gè)應答位。如果在發(fā)送停止信號之前,主機發(fā)送超過(guò)8個(gè)字節,AT24C02內部地址計數器將自動(dòng)翻轉,先前寫(xiě)入的數據被覆蓋。接收主機發(fā)送的停止信號后,AT24C02啟動(dòng)內部寫(xiě)周期將數據寫(xiě)到數據區。因此,可以編寫(xiě)一個(gè)頁(yè)寫(xiě)操作的函數如下: 3.3 讀操作 AT24C02的讀操作主要有立即地址讀取、隨機地址讀取和順序地址存取3種。立即地址讀取方式由一個(gè)空字節序列來(lái)加載數據地址,當從機尋址碼和數據尋址碼隨鐘輸入,并被確認時(shí),從機必須產(chǎn)生另一個(gè)開(kāi)始狀態(tài),通過(guò)發(fā)出一個(gè)確認讀取的信號之后,數據便隨時(shí)鐘串行輸出,數據的讀取不通過(guò)確認狀態(tài)應答,而是通過(guò)一個(gè)停止狀態(tài)來(lái)應答。其他兩種方式基本類(lèi)似,只是不需要產(chǎn)生另一個(gè)開(kāi)始狀態(tài),而順序地址讀取時(shí),讀出的是連續數據。讀操作的時(shí)序圖類(lèi)似于圖4的寫(xiě)操作時(shí)序,因此可編出讀一個(gè)字節的函數RlByte如下: 當然,對于A(yíng)T2402的讀取往往不是只一個(gè)字節,更多的時(shí)候還是想一連幾個(gè)字節一起讀取,因此,可編出連續讀取N個(gè)字節的函數如下: 4 綜合應用舉例 以圖6所示硬件電路為例,調用上面所編寫(xiě)的函數,將數據00H~07H送到AT24C02內部首地址為10H的地方存放,并將AT24C02內部以20H為首地址的連續8個(gè)字讀到AT89C51的內部RAM20H~27H存放。其主程序如下: 其實(shí),AT24CXX系列的E2PROM芯片很多,但其編程不盡相同。由于C語(yǔ)言的編程要精準控制時(shí)間很不容易,因此往往有些工程人員碰到類(lèi)似的I2C硬件結構,大多采用C語(yǔ)言與匯編語(yǔ)言混合編程的方法。經(jīng)過(guò)筆者一番實(shí)踐之后,覺(jué)得上述所編寫(xiě)的函數幾乎可以用到所有I2C結構的硬件,只需要大家花一點(diǎn)時(shí)間調試下DELAY函數的時(shí)間就可以了。 |