本文介紹將MAX7651和MAX7652 12位數(shù)據(jù)采集系統(tǒng)連接至24C02 2線(xiàn)串行EEPROM所需的特定硬件描述和軟件程序。提供了詳細(xì)的軟件代碼。由于MAX7651/52基于標(biāo)準(zhǔn)8051處理器內(nèi)核,因此此處提供的信息對(duì)于任何基于8051的標(biāo)準(zhǔn)設(shè)計(jì)都很有用。
24Cxx 系列 2 線(xiàn)串行 EEPROM 廣泛用于 8051 微處理器系統(tǒng)。雖然MAX7651/MAX7652閃存可編程12位數(shù)據(jù)采集系統(tǒng)具有16K內(nèi)部閃存,但仍有許多“傳統(tǒng)”產(chǎn)品使用小而廉價(jià)的外部存儲(chǔ)器。
本應(yīng)用筆記提供了基本的2線(xiàn)寫(xiě)和讀軟件子程序。可以輕松修改它們,以滿(mǎn)足EEPROM的附加功能,例如存儲(chǔ)器保護(hù)和組尋址。
24C02串行EEPROM有許多衍生產(chǎn)品,其中包括額外的存儲(chǔ)器和頁(yè)面尋址。24C02被廣泛使用,是本例中使用的部件。其他派生部件可以通過(guò)稍作修改來(lái)使用此代碼。
EEPROM信號(hào)和定時(shí)
24Cxx 系列使用兩條 I/O 線(xiàn)進(jìn)行接口:SCL(串行時(shí)鐘)和 SDA(串行數(shù)據(jù))。SCL 邊緣具有不同的功能,具體取決于是讀取設(shè)備還是寫(xiě)入設(shè)備。將數(shù)據(jù)時(shí)鐘輸入器件時(shí),時(shí)鐘的正邊沿鎖存數(shù)據(jù)。負(fù)時(shí)鐘將時(shí)鐘數(shù)據(jù)邊緣出器件。
SDA信號(hào)是雙向的,并且物理上是漏極開(kāi)路,因此多個(gè)EEPROM或其他器件可以共享引腳。SCL和SDA都必須從外部拉高。
EEPROM使用的協(xié)議部分基于EEPROM發(fā)送的ACK(確認(rèn))位(如果已收到發(fā)送給它的數(shù)據(jù))。所有地址和數(shù)據(jù)均以 8 位字發(fā)送。EEPROM在第九個(gè)時(shí)鐘周期內(nèi)將ACK作為低位周期發(fā)送。EEPROM在SCL和SDA引腳上尋找特定的轉(zhuǎn)換,以鑒定讀寫(xiě)。
SDA 引腳上的數(shù)據(jù)可能僅在 SCL 為低時(shí)更改。SCL 高電平期間的數(shù)據(jù)更改指示啟動(dòng)或停止條件。START 條件是 SDA 的高到低轉(zhuǎn)換,SCL 高。所有數(shù)據(jù)傳輸都必須以 START 條件開(kāi)頭。
停止條件是 SDA 的低到高轉(zhuǎn)換,SCL 高。所有數(shù)據(jù)傳輸必須以 STOP 條件結(jié)束。讀取后,停止將EEPROM置于待機(jī)電源模式。有關(guān)啟動(dòng)和停止條件,請(qǐng)參閱圖 1。
圖1.啟動(dòng)和停止條件。
設(shè)備尋址
24C02 具有 3 個(gè)物理引腳,分別指定為 A2、A1 和 A0,它們連接到邏輯 1 或 0 電平。這允許八個(gè)唯一的硬件地址,因此多達(dá)八個(gè) 24C02 可以共享 SCL 和 SDA 線(xiàn)路而不會(huì)發(fā)生沖突。有一個(gè)內(nèi)部地址比較器,用于查找主控制器發(fā)送的地址與 24C02 的唯一 7 位地址之間的匹配,該地址部分由 A2、A1 和 A0 確定。請(qǐng)參閱下面的表 1。
MSB | 低音水平 | ||||||
1 | 0 | 1 | 0 | 答2 | 答1 | 答0 | R/~W |
設(shè)備地址在啟動(dòng)條件后立即發(fā)送。前四位是序列“1010”,這是一個(gè)簡(jiǎn)單的“噪聲濾波器”,可防止線(xiàn)路上的隨機(jī)噪聲突發(fā)訪(fǎng)問(wèn)設(shè)備。發(fā)送的最后一個(gè)位是 1 表示讀取,0 表示寫(xiě)入。下面的代碼示例用于隨機(jī)讀/寫(xiě)操作。該部件還可以執(zhí)行頁(yè)面寫(xiě)入/順序讀取,只需稍作代碼修改。有關(guān)更多信息,請(qǐng)參見(jiàn) 24C02 數(shù)據(jù)手冊(cè)。
字節(jié)寫(xiě)入內(nèi)存
字節(jié)寫(xiě)入序列如圖 2 所示。EEPROM在收到START條件和設(shè)備地址后,如果設(shè)備地址與其自己的唯一地址匹配,則發(fā)送ACK。MAX7651等待ACK,如果ACK不存在,則中止通信。接下來(lái),發(fā)送一個(gè) 8 位字節(jié)地址,然后發(fā)送另一個(gè) ACK。MAX7651發(fā)送8位數(shù)據(jù)字節(jié),等待第三個(gè)ACK,并發(fā)送STOP條件。
圖2.寫(xiě)入操作。
需要注意的是,在收到 STOP 條件后,EEPROM 在內(nèi)部等待數(shù)據(jù)存儲(chǔ)到其內(nèi)部存儲(chǔ)器陣列中。這可能需要長(zhǎng)達(dá) 10 毫秒的時(shí)間。24C02 將在對(duì)內(nèi)部 EEPROM 進(jìn)行編程時(shí)忽略嘗試的訪(fǎng)問(wèn)。可以輪詢(xún)?cè)摬考酝瓿蓛?nèi)部寫(xiě)入周期。這涉及發(fā)送另一個(gè) START 條件(也稱(chēng)為重復(fù)啟動(dòng)),后跟設(shè)備地址字節(jié)。請(qǐng)注意,在這種情況下,不會(huì)發(fā)送 STOP 條件。如果內(nèi)部編程周期完成,EEPROM 將發(fā)送 ACK。MAX7651也可以編程為等待10ms再繼續(xù)。
從內(nèi)存讀取字節(jié)
從 24C02 EEPROM 以隨機(jī)地址讀取字節(jié)需要在讀取之前執(zhí)行虛擬寫(xiě)入操作。參見(jiàn)圖 3。
順序?yàn)椋?/p>
啟動(dòng)條件
使用 R/~W = 0 “虛擬寫(xiě)入”命令發(fā)送設(shè)備地址
等待確認(rèn)
發(fā)送字節(jié)內(nèi)存地址
等待確認(rèn)
發(fā)送重復(fù)啟動(dòng)條件
發(fā)送 R/~W = 1 的設(shè)備地址(讀取命令)
等待確認(rèn)
將8個(gè)數(shù)據(jù)位讀取到MAX7651中,MSB優(yōu)先
無(wú)確認(rèn)
停止條件
這個(gè)序列相當(dāng)復(fù)雜!讀取所需的 SCL 轉(zhuǎn)換總數(shù)為 38。
圖3.讀取操作。
審核編輯:郭婷
-
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7512瀏覽量
163980 -
微處理器
+關(guān)注
關(guān)注
11文章
2269瀏覽量
82543 -
EEPROM
+關(guān)注
關(guān)注
9文章
1022瀏覽量
81684
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論