當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式教程
[導(dǎo)讀]基于Keil C的AT24C02串行E2PROM的編程

AT24C02是美國(guó)Atmel公司的低功耗CMOS型E2PROM,內(nèi)含256×8位存儲(chǔ)空間,具有工作電壓寬(2。5~5。5V)、擦寫(xiě)次數(shù)多(大于10000次)、寫(xiě)入速度快(小于10ms)、抗干擾能力強(qiáng)、數(shù)據(jù)不易丟失、體積小等特點(diǎn)。而且他是采用了I2C總線(xiàn)式進(jìn)行數(shù)據(jù)讀寫(xiě)的串行器件,占用很少的資源和I/O線(xiàn),并且支持在線(xiàn)編程,進(jìn)行數(shù)據(jù)實(shí)時(shí)的存取十分方便。

1AT24C02的引腳功能

AT24C02引腳如圖1所示。

他的的1、2、3腳是3根地址線(xiàn),用于確定芯片的硬件地址。第8腳和第4腳分別為正、負(fù)電源。第5腳SDA為串行數(shù)據(jù)輸入/輸出,數(shù)據(jù)通過(guò)這根雙向I2C總線(xiàn)串行傳送。第6腳SCL為串行時(shí)鐘,SDA和SCL為漏極開(kāi)路端,在實(shí)際的應(yīng)用當(dāng)中都需要和正電源間各接一個(gè)5。1kΩ的電阻上拉。第7腳為WP寫(xiě)保護(hù)端,接地時(shí)允許芯片執(zhí)行一般的讀寫(xiě)操作;接正電源時(shí)只允許對(duì)器件進(jìn)行讀操作。

2AT24C02的內(nèi)部結(jié)構(gòu)

圖2為AT24C02的內(nèi)部結(jié)構(gòu)圖。

啟動(dòng)、停止邏輯單元接收數(shù)據(jù)引腳SDA上的電平信號(hào),判斷是否進(jìn)行啟動(dòng)和停止操作串行控制邏輯單元根據(jù)SCL,SDA電平信號(hào)以及“啟動(dòng)、停止邏輯”部件發(fā)出的各種信號(hào)進(jìn)行區(qū)分,并排列出有關(guān)的“尋址”、“讀數(shù)據(jù)”和“寫(xiě)數(shù)據(jù)”等邏輯,將他們傳送到相應(yīng)的操作單元。例如:當(dāng)操作命令為“尋址”時(shí)候,他將通知地址計(jì)數(shù)器加1,并啟動(dòng)“地址比較”器進(jìn)行工作。在“讀數(shù)據(jù)”時(shí),他控制“Dout/確認(rèn)邏輯”單元;在“寫(xiě)數(shù)據(jù)”時(shí)候,他控制“高壓泵/定時(shí)”電路,以便向E2PROM電路提供編程所需要的高電壓。

地址/計(jì)數(shù)器單元產(chǎn)生訪問(wèn)E2PROM所需要的存儲(chǔ)單元的地址,并將其分別送到X譯碼器進(jìn)行字選,送到Y(jié)譯碼器進(jìn)行位選。

高壓泵/定時(shí)單元由于E2PROM數(shù)據(jù)寫(xiě)入時(shí)候需要向電路施加編程高電壓,為了解決單一電源電壓的供電問(wèn)題,芯片生產(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)答信號(hào)。在第9個(gè)時(shí)鐘周期時(shí)將SDA線(xiàn)置于低電壓作為應(yīng)答信號(hào)。

AT24C02中帶有的片內(nèi)地址寄存器。每寫(xiě)入或讀出一個(gè)數(shù)據(jù)字節(jié)后,該地址寄存器自動(dòng)加1,以實(shí)現(xiàn)對(duì)下一個(gè)存儲(chǔ)單元的讀寫(xiě)。所有字節(jié)均以單一操作方式讀取。為降低總的寫(xiě)入時(shí)間,一次操作可寫(xiě)入多達(dá)8個(gè)字節(jié)的數(shù)據(jù)。

I2C總線(xiàn)是一種用于IC器件之間連接的二線(xiàn)制總線(xiàn)。他通過(guò)SDA(串行數(shù)據(jù)線(xiàn))及SCL(串行時(shí)鐘線(xiàn))兩根線(xiàn)在連到總線(xiàn)上的器件之間傳送信息,并根據(jù)地址識(shí)別每個(gè)器件。AT24C02正是運(yùn)用了I2C規(guī)程,使用主/從機(jī)雙向通信,主機(jī)(通常為單片機(jī))和從機(jī)(AT24C02)均可工作于接收器和發(fā)送器狀態(tài)。主機(jī)產(chǎn)生串行時(shí)鐘信號(hào)(通過(guò)SCL引腳)并發(fā)出控制字,控制總線(xiàn)的傳送方向,并產(chǎn)生開(kāi)始和停止的條件。無(wú)論是主機(jī)還是從機(jī),接收到一個(gè)字節(jié)后必須發(fā)出一個(gè)確認(rèn)信號(hào)ACK。

AT24C02的控制字由8位二進(jìn)制數(shù)構(gòu)成,在開(kāi)始信號(hào)發(fā)出以后,主機(jī)便會(huì)發(fā)出控制字,以選擇從機(jī)并控制總線(xiàn)傳送的方向??刂谱指魑坏木唧w作用見(jiàn)表1。

由上表可知,控制字的高4位為AT24C02的識(shí)別位,是不能更改的;而第A0,A1,A2片選位,最后是一位是讀寫(xiě)控制位,當(dāng)其為1時(shí),進(jìn)行的是讀操作,反之將要進(jìn)行的是寫(xiě)操作。

3AT24C02的讀寫(xiě)操作

3。1開(kāi)始位、停止位和確認(rèn)位的編程

總線(xiàn)SCL和SDA一般由上拉電阻拉為高電平,只有在SCL為低電平的周期內(nèi),SDA引腳上的數(shù)據(jù)才有效。而當(dāng)SCL為高電平期間SDA引腳上產(chǎn)生的電平變化則表示I2C總線(xiàn)工作的“開(kāi)始”或“停止”兩種狀態(tài):當(dāng)SCL為高平時(shí),SDA由高電平轉(zhuǎn)向低電平時(shí)表示“開(kāi)始”狀態(tài),而由低電平轉(zhuǎn)向高電平時(shí)表示“停止”狀態(tài),其時(shí)序如圖3所示。

由時(shí)序圖可以編寫(xiě)由主機(jī)發(fā)給AT24C02的開(kāi)始信號(hào)和停止信號(hào)的KEILC語(yǔ)言函數(shù)如下:

同時(shí),AT24C02與主機(jī)進(jìn)行信息交換,還需要另外一個(gè)“確認(rèn)信號(hào)(ACK)”的狀態(tài)。I2C總線(xiàn)數(shù)據(jù)傳送時(shí),每成功地傳送一個(gè)字節(jié)數(shù)據(jù)后,AT24C02都必須產(chǎn)生一個(gè)應(yīng)答信號(hào),應(yīng)答的器件在第9個(gè)時(shí)鐘周期時(shí)將SDA線(xiàn)拉低,表示其已收到一個(gè)8位數(shù)據(jù)。AT24C02在接收到起始信號(hào)和與之匹配的地址之后就會(huì)響應(yīng)第一個(gè)應(yīng)答信號(hào);如果AT24C02被設(shè)置為寫(xiě)操作,則每接收一個(gè)字節(jié)之后響應(yīng)一個(gè)應(yīng)答信號(hào);當(dāng)AT24C02被設(shè)置在讀模式時(shí),則在發(fā)送一個(gè)字節(jié)的數(shù)據(jù)后會(huì)釋放SDA線(xiàn),并監(jiān)視主機(jī)發(fā)過(guò)來(lái)的應(yīng)答信號(hào),一旦接收到應(yīng)答信號(hào),AT24C02繼續(xù)發(fā)送數(shù)據(jù),如主機(jī)沒(méi)有發(fā)送應(yīng)答信號(hào),AT24C02將停止傳送數(shù)據(jù)并等待一個(gè)停止信號(hào),此時(shí)主機(jī)必須發(fā)送一個(gè)停止信號(hào)給AT24C02,使其進(jìn)入備用電源模式并使AT24C02處于已知的狀態(tài)。由此可見(jiàn),應(yīng)答信號(hào)在AT24C02的讀寫(xiě)工作中經(jīng)常用到,根據(jù)圖4應(yīng)答信號(hào)的時(shí)序圖。

可以編出一個(gè)檢驗(yàn)是否有應(yīng)答信號(hào)送來(lái)的操作函數(shù)如下:

3。2寫(xiě)操作

AT24C02允許有兩種寫(xiě)操作方式:字節(jié)寫(xiě)和頁(yè)寫(xiě)。

3。2。1AT24C02字節(jié)寫(xiě)操作。

其操作時(shí)序如圖5所示。在字節(jié)寫(xiě)模式下,主機(jī)發(fā)送開(kāi)始命令和AT24C02地址信息(“R/W”位置0)給AT24C02,主機(jī)在收到AT24C02產(chǎn)生應(yīng)答信號(hào)后發(fā)送1個(gè)字節(jié)地址寫(xiě)入AT24C02的地址指針。主機(jī)在收到從器件的另一個(gè)應(yīng)答信號(hào)后,再發(fā)送數(shù)據(jù)到被尋址的存儲(chǔ)單元。AT24C02再次應(yīng)答,并在主機(jī)產(chǎn)生停止信號(hào)后開(kāi)始內(nèi)部數(shù)據(jù)的擦寫(xiě)。在內(nèi)部擦寫(xiě)過(guò)程中,AT24C02不再應(yīng)答主機(jī)的任何請(qǐng)求。根據(jù)圖5則可以編寫(xiě)出AT24C02的字節(jié)寫(xiě)操作函數(shù)W1Byte如下:[!--empirenews.page--]

3。2。2AT24C02頁(yè)寫(xiě)操作

AT24C02允許每次寫(xiě)入8個(gè)字節(jié)的頁(yè)寫(xiě)操作模式,頁(yè)寫(xiě)操作和字節(jié)寫(xiě)操作的時(shí)序差不多都相同,不同的是在于傳送了一字節(jié)數(shù)據(jù)后并不產(chǎn)生停止信號(hào),主機(jī)被允許再發(fā)送7個(gè)額外的字節(jié)。每發(fā)送一個(gè)字節(jié)數(shù)據(jù)后,AT24C02產(chǎn)生一個(gè)應(yīng)答位。如果在發(fā)送停止信號(hào)之前,主機(jī)發(fā)送超過(guò)8個(gè)字節(jié),AT24C02內(nèi)部地址計(jì)數(shù)器將自動(dòng)翻轉(zhuǎn),先前寫(xiě)入的數(shù)據(jù)被覆蓋。接收主機(jī)發(fā)送的停止信號(hào)后,AT24C02啟動(dòng)內(nèi)部寫(xiě)周期將數(shù)據(jù)寫(xiě)到數(shù)據(jù)區(qū)。因此,可以編寫(xiě)一個(gè)頁(yè)寫(xiě)操作的函數(shù)如下:

3。3讀操作

AT24C02的讀操作主要有立即地址讀取、隨機(jī)地址讀取和順序地址存取3種。立即地址讀取方式由一個(gè)空字節(jié)序列來(lái)加載數(shù)據(jù)地址,當(dāng)從機(jī)尋址碼和數(shù)據(jù)尋址碼隨鐘輸入,并被確認(rèn)時(shí),從機(jī)必須產(chǎn)生另一個(gè)開(kāi)始狀態(tài),通過(guò)發(fā)出一個(gè)確認(rèn)讀取的信號(hào)之后,數(shù)據(jù)便隨時(shí)鐘串行輸出,數(shù)據(jù)的讀取不通過(guò)確認(rèn)狀態(tài)應(yīng)答,而是通過(guò)一個(gè)停止?fàn)顟B(tài)來(lái)應(yīng)答。其他兩種方式基本類(lèi)似,只是不需要產(chǎn)生另一個(gè)開(kāi)始狀態(tài),而順序地址讀取時(shí),讀出的是連續(xù)數(shù)據(jù)。讀操作的時(shí)序圖類(lèi)似于圖4的寫(xiě)操作時(shí)序,因此可編出讀一個(gè)字節(jié)的函數(shù)RlByte如下:

當(dāng)然,對(duì)于AT2402的讀取往往不是只一個(gè)字節(jié),更多的時(shí)候還是想一連幾個(gè)字節(jié)一起讀取,因此,可編出連續(xù)讀取N個(gè)字節(jié)的函數(shù)如下:

4綜合應(yīng)用舉例

以圖6所示硬件電路為例,調(diào)用上面所編寫(xiě)的函數(shù),將數(shù)據(jù)00H~07H送到AT24C02內(nèi)部首地址為10H的地方存放,并將AT24C02內(nèi)部以20H為首地址的連續(xù)8個(gè)字讀到AT89C51的內(nèi)部RAM20H~27H存放。其主程序如下:

其實(shí),AT24CXX系列的E2PROM芯片很多,但其編程不盡相同。由于C語(yǔ)言的編程要精準(zhǔn)控制時(shí)間很不容易,因此往往有些工程人員碰到類(lèi)似的I2C硬件結(jié)構(gòu),大多采用C語(yǔ)言與匯編語(yǔ)言混合編程的方法。經(jīng)過(guò)筆者一番實(shí)踐之后,覺(jué)得上述所編寫(xiě)的函數(shù)幾乎可以用到所有I2C結(jié)構(gòu)的硬件,只需要大家花一點(diǎn)時(shí)間調(diào)試下DELAY函數(shù)的時(shí)間就可以了。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶(hù)希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話(huà)語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉