摘要:簡要介紹了I2C串行總線原理及AT24CXX系列串行EEPROM的特點。著重闡述了利用I2C串行總線和AT24CXX系列串行EEPROM實現數據存儲的技術,給出了單片機與串行EEPROM硬軟件實現方法和實用的讀/寫子程序。
關鍵詞:單片機;I2C串行總線;EEPROM
中圖分類號:TP36 文獻標識碼:A文章編號:1009-3044(2009)32-9059-03
The Data Read-write of Single-chip Microcomputer System Basic on I2C Serial Bus
CHEN Zhang-yu
(Department of Electronic Engineering, Nanjing Engineering Vocational College, Nanjing 211135, China)
Abstract: The principle of I2C serial bus and the characteristic of Serial EEPROM of AT24CXX have been introduced in this paper.It has been most emphasized on the technology of data storage achieving by using of I2C serial bus and Serial EEPROM of AT24CXX, also ,the implementation methods and practical read/write subroutine of singlechip and the serial EEPROM hard-software has been indicated.
Key words: single-chip microcomputer;I2C serial bus; EEPROM
隨著應用和技術的發展、系統的集成度、復雜性的提高,單片機對I/O口線的數量要求也越來越多,因此需通過適當的手段來對單片機進行擴展,或通過其它方法減少口線的占用來達到用戶不同的需求。I2C總線(Inter Integrated Circuit BUS)由飛利浦公司推出,是近年來微電子通信控制領域廣泛采用的一種新型總線標準。它是同步通信的一種特殊形式,具有接口線少、控制簡單、器件封裝形式小、通信速率較高等優點。本文通過使用MCS51系列單片機和AT24C系列串行EEPROM來實現基于I2C串行總線的數據讀寫。
1 I2C總線技術
I2C總線是一種用于IC器件之間連接的二線制總線。它通過SDA(串行數據線)及SCL(串行時鐘線)兩根線在連到總線上的器件之間傳送信息。由于接口直接在組件之上,因此I2C總線占用的空間非常小,減少了電路板的空間和芯片管腳的數量,降低了互聯成本。I2C總線的另一個優點是,它支持多主控(multimastering),其中任何能夠進行發送和接收的設備都可以成為主總線。一個主控能夠控制信號的傳輸和時鐘頻率。圖1為I2C總線系統硬件結構圖,總線上的每個器件均可設置一個唯一地址,在執行數據傳輸時,器件可以被設定為主控器和被控器。由主控器啟動總線上的數據傳輸,并產生數據傳輸所需的時鐘信號。
2 I2C串行總線協議
I2C總線傳輸數據必須遵循規定的數據傳輸格式,其基本要求如下:
1) 數據線SDA的電平狀態必須在時鐘線SCL處于高電平期間保持穩定不變。SDA的電平狀態只有在SCL處于低電平期間才允許改變。但是在I2C總線的起始和結束時例外。
2) I2C總線總是以字節(Byte)為單位收發數據。每次傳輸的字節數量沒有嚴格限制。首先傳輸的是數據的最高位(MSB,第7位),最后傳輸的是最低位(LSB,第0位)。另外,每個字節之后還要跟一個響應位,稱為應答。
3) 起始條件:當SCL處于高電平期間時,SDA從高電平向低電平跳變時產生起始條件。總線在起始條件產生后便處于忙的狀態。
4) 停止條件:當SCL處于高電平期間時,SDA從低電平向高電平跳變時產生停止條件。總線在停止條件產生后處于空閑狀態。
5) 從機地址:I2C總線不需要額外的地址譯碼器和片選信號。多個具有I2C總線接口的器件都可以連接到同一條I2C總線上,它們之間通過器件地址來區分。主機是主控器件,它不需要器件地址,其它器件都屬于從機,要有器件地址。一般從機地址由7位地址位和一位讀寫標志R/W組成,7位地址占據高7位,讀寫位在最后。讀寫位是0,表示主機將要向從機寫入數據;讀寫位是1,則表示主機將要從從機讀取數據。
6) 應答信號:在I2C總線傳輸數據過程中,每傳輸一個字節數據(含地址及命令字),都要跟一個應答狀態位,以確定數據傳送是否被對方收到。應答信號由接收設備產生,在SCL信號為高電平期間,接收設備將SDA拉為低電平,表示數據準確,產生應答。
3 AT24CXX系列串行EEPROM
AT24CXX系列串行EEPROM是Atmel公司生產的一種采用CMOS工藝制成的EEPROM,支持I2C串行總線及傳輸規則。采用這類芯片可解決掉電數據保存問題,并可多次擦寫,擦寫次數可達10萬次以上。型號及參數如表1所示。
AT24CXX系列EEPROM的尋址字節如表1所示。其中前4位是芯片地址1010,A2、A1和A0是可編程地址選擇位,A2、A1和A0引腳接高、低電平后得到確定的三位編碼,與1010形成7位編碼,即為該器件的地址碼。第8位為讀寫控制位,R/W=1表示讀操作,R/W=0表示寫操作。
4 單片機對AT24C系列的讀寫操作
4.1 硬件電路
MCS51系列單片機沒有專門的I2C串行總線,需要用兩條I/O線來實現。以89C52單片機與AT24C02連接為例,電路如圖2所示。將P2.0連接到SDA腳,將P2.1連接到SCL腳,由于AT24C02是漏極開路, 圖中R1、R2為上拉電阻。A0、A1和A2三只引腳都接地,芯片地址選擇位全都為0。
4.2 I2C總線的軟件編程
由前述分析和圖2的硬件電路,只有按照I2C總線數據傳送時序和操作格式設計模擬子程序,我們編制了EEPROM的讀寫子程序。(限于篇幅,只給出部分詳細程序)
void start()//起始信號
{
sda=1;
delay();//延時程序
scl=1;
delay();
sda=0;
delay();
}
void stop()//停止信號
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
void respons()//檢查應答
{
sda=0;
delay();
scl=1;
delay();
scl=0;
delay();
sda=1;
delay();
}
void init()//初始化
{
sda=1;
delay();
scl=1;
delay();
}
void write_byte(uchar date)//寫一個字節
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delay();
sda=CY;
delay();
scl=1;
delay();
}
scl=0;
delay();
sda=1;
delay();
}
uchar read_byte()//讀取一個字節
{
uchar i,k;
scl=0;
delay();
sda=1;
delay();
for(i=0;i<8;i++)
{
scl=1;
delay();
k=(k<<1)|sda;
sda=0;
delay();
}
return k;
}
5 結束語
I2C串行總線雖然沒有并行總線那么快的數據傳輸能力,但其硬件接口簡單,因而簡化了電路的設計,擴展方便并且可靠性高,在實際電路設計中經常使用,如I2C接口EEPROM芯片用于存放系統重要的參數,I2C接口時鐘芯片用于產生系統精密時鐘等。本文通過給出單片機與AT24C系列連接電路圖和部分編程程序,證明51單片機基于I2C串行總線數據的讀寫穩定可靠,在main函數中可直接引用,適用于工程實踐。
參考文獻:
[1] 郭天祥.新概念51單片機C語言教程——入門、提高、開發、拓展全攻略[M].北京:電子工業出版社,2009.
[2] 董艷鋒,田海峰,秦文華,等.I2C串行總線存儲技術在單片機系統中的應用[J].山西電子技術,2007,(4):19-20.
[3] 趙建領.薛園園.51單片機開發與應用技術詳解[M].北京:電子工業出版社,2009.