版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 實(shí)驗(yàn)八 51系列單片機(jī)讀寫(xiě)I2C總線I2C總線是Philips公司推出的一種雙向二線制總線,全稱(chēng)為芯片間總線Inter Integrate Circuit BUS)。其在芯片間使用兩根連線實(shí)現(xiàn)全雙工同步數(shù)據(jù)傳送,一條數(shù)據(jù)線SDA和一條串行時(shí)鐘線SCL),可以很方便地構(gòu)成外圍器件擴(kuò)展系統(tǒng)。I2C總線是很簡(jiǎn)單方便的芯片間串行擴(kuò)展總線。使用I2C總線可以直接和具有I2C總線接口的單片機(jī)通信,也可以和各種類(lèi)型的外圍器件進(jìn)行通信,如存儲(chǔ)器、A/D、D/A、鍵盤(pán)、LCD等。目前Philips、Atmel、Maxim以及其他集成電路制造商推出了很多基于I2C總線的單片機(jī)和外圍器件,如24系列E2PROM、
2、串行實(shí)時(shí)時(shí)鐘芯片DS1302、USB2.0芯片CY7C68013A等。本章主要介紹了I2C總線的工作原理、結(jié)構(gòu)以及尋址方式,并重點(diǎn)介紹了數(shù)據(jù)傳輸協(xié)議以及程序?qū)崿F(xiàn)。這些程序均以子程序的形式提供,便于讀者調(diào)用。最后通過(guò)具體的實(shí)例,介紹如何使用單片機(jī)讀寫(xiě)具有I2C總線接口的E2PROM。 I2C總線概述 I2C總線對(duì)數(shù)據(jù)通信進(jìn)行了嚴(yán)格的定義,要進(jìn)行I2C總線的接口設(shè)計(jì),就需要首先了解I2C總線的工作原理圖、尋址方式和數(shù)據(jù)傳輸協(xié)議等。8.0 I2C總線工作原理 典型的I2C總線系統(tǒng)結(jié)構(gòu),如圖28.1所示。其采用兩線制,由數(shù)據(jù)線SDA和時(shí)鐘線SCL構(gòu)成??偩€上掛接的單片機(jī)主器件或外圍器件從器件),其接口
3、電路都應(yīng)具有I2C總線通信能力。8.1 I2C總線的電氣結(jié)構(gòu)和負(fù)載能力I2C總線的SCL和SDA端口輸出為漏極開(kāi)路,因此使用時(shí)上必須連接上拉電阻。不同型號(hào)的器件對(duì)上拉電阻的要求不同,可參考具體器件的數(shù)據(jù)手冊(cè)。上拉電阻的大小與電源電壓、傳輸速率等有關(guān)系。I2C總線的傳輸速率可以支持100kHz和400kHz兩種,對(duì)于100kHz的速率一般采用10K的上拉電阻,對(duì)于400kHz的速率一般采用2K的上拉電阻。I2C總線上的外圍擴(kuò)展器件都是屬于電壓型負(fù)載的CMOS器件,因此總線上的器件數(shù)量不是由電流負(fù)載能力決定,而是由電容負(fù)載能力確定。I2C總線上每一個(gè)節(jié)點(diǎn)器件的接口都有一定的等效電容,這會(huì)造成信號(hào)傳
4、輸?shù)难舆t。通常I2C總線的負(fù)載能力為400pF通過(guò)驅(qū)動(dòng)擴(kuò)展可達(dá)4000pF),據(jù)此可計(jì)算出總線長(zhǎng)度及連接器件的數(shù)量。8.3 I2C總線器件的尋址方式I2C總線上的所有器件連接在一個(gè)公共的總線上,因此,主器件在進(jìn)行數(shù)據(jù)傳輸前選擇需要通信的從器件,即進(jìn)行總線尋址。I2C總線上所有外圍器件都需要有惟一的地址,由器件地址和引腳地址兩部分組成,共7位。器件地址是I2C器件固有的地址編碼,器件出廠時(shí)就已經(jīng)給定,不可更改。引腳地址是由I2C總線外圍器件的地址引腳A2,A1,A0決議,根據(jù)其在電路中接電源正極、接地或懸空的不同,形成不同的地址代碼。引腳地址數(shù)也決定了同一種器件可接入總線的最大數(shù)目。地址位與一個(gè)
5、方向位共同構(gòu)成I2C總線器件尋址字節(jié)。尋址字節(jié)的格式如表所示。方向位R/)規(guī)定了總線上的主器件與外圍器件從器件的數(shù)據(jù)傳輸送方向。當(dāng)方向位R/=1,表示主器件讀取從器件中的數(shù)據(jù);R/=0,表示主器件向從器件發(fā)送數(shù)據(jù)。8.3 I2C總線數(shù)據(jù)傳輸協(xié)議及其程序詳解 I2C總線規(guī)定了嚴(yán)格的數(shù)據(jù)通信格式,所有具有I2C總線接口的器件都必須遵守。另外,對(duì)于應(yīng)用最廣的51系列單片機(jī),卻沒(méi)有提供I2C總線接口。實(shí)際上,利用這些單片機(jī)的普通I/O口,采用軟件模擬I2C總線SCL和SDA上的數(shù)據(jù)傳送時(shí)序,完全可以實(shí)現(xiàn)對(duì)I2C總線器件的讀、寫(xiě)操作。 下面就分別介紹數(shù)據(jù)傳輸過(guò)程中的格式以及如何使用8051單片機(jī)來(lái)實(shí)現(xiàn)。
6、這里假設(shè)51系列單片機(jī)的外接晶振頻率為6MHz,單片機(jī)的機(jī)器周期為2s,采用P1.0作為時(shí)鐘線SCL,P1.1作為數(shù)據(jù)線SDA。8.3.1 起始信號(hào)起始信號(hào)用于開(kāi)始I2C總線通信。在時(shí)鐘線SCL為高電平期間,數(shù)據(jù)線SDA上出現(xiàn)由高電平向低電平變化的下降沿時(shí),被認(rèn)為是起始信號(hào)。起始信號(hào)出現(xiàn)以后,才可以進(jìn)行尋址或數(shù)據(jù)傳輸?shù)?。如果采用C語(yǔ)言進(jìn)行程序設(shè)計(jì),則其程序示例如下:void I_Start() SDA=HIGH;I_Delay(100);SCL=HIGH;I_Delay(100);SDA=LOW;I_Delay(100);SCL=LOW;I_Delay(100);8.3.2 終止信號(hào)終止信號(hào)用
7、于終止I2C總線通信。在時(shí)鐘線SCL為高電平期間,數(shù)據(jù)線SDA上出現(xiàn)由低電平到高電平變化的上升沿時(shí),被認(rèn)為是終止信號(hào)。終止信號(hào)一出現(xiàn),所有總線操作都結(jié)束,主從器件釋放總線控制權(quán)。如果采用C語(yǔ)言進(jìn)行程序設(shè)計(jì),則其程序示例如下:void I_Stop()SDA=LOW;I_Delay(100);SCL=HIGH;I_Delay(100);SDA=HIGH;I_Delay(100);SCL=LOW;I_Delay(100);8.3.3 應(yīng)答信號(hào)應(yīng)答信號(hào)用于表明數(shù)據(jù)傳輸?shù)慕Y(jié)束。I2C總線數(shù)據(jù)傳送時(shí),每傳送一個(gè)字節(jié)數(shù)據(jù)后都必須有應(yīng)答信號(hào)。應(yīng)答信號(hào)從主器件產(chǎn)生。主器件在第9個(gè)時(shí)鐘位上釋放數(shù)據(jù)總線,使其處于
8、高電平狀態(tài),此時(shí)從器件輸出低電平拉低數(shù)據(jù)總線為應(yīng)答信號(hào)。如果采用C語(yǔ)言進(jìn)行程序設(shè)計(jì),則發(fā)送應(yīng)答位子程序示例如下:void I_Ack() SDA=LOW;I_Delay(100);SCL=HIGH;I_Delay(100);SCL=LOW;I_Delay(100);SDA=HIGH;I_Delay(100);8.3.4 非應(yīng)答信號(hào) 非應(yīng)答信號(hào)用于數(shù)據(jù)傳輸出現(xiàn)異常而無(wú)法完成時(shí)。在傳送完一個(gè)字節(jié)數(shù)據(jù)后,在第9個(gè)時(shí)鐘位上從器件輸出高電平為非應(yīng)答信號(hào)。非應(yīng)答信號(hào)的產(chǎn)生有兩種情況。 當(dāng)從器件正在進(jìn)行其他處理而無(wú)法接收總線上的數(shù)據(jù)時(shí),從器件不產(chǎn)生應(yīng)答,此時(shí)從器件釋放總線,將數(shù)據(jù)線置為高電平。這樣,主器件可
9、產(chǎn)生一個(gè)停止信號(hào)來(lái)終止總線數(shù)據(jù)傳輸。 當(dāng)主器件接收來(lái)自從器件的數(shù)據(jù)時(shí),接收到最后一個(gè)數(shù)據(jù)字節(jié)后,必須給從器件發(fā)送一個(gè)非應(yīng)答信號(hào),使從器件釋放數(shù)據(jù)總線。這樣,主器件才可以發(fā)送停止信號(hào),從而終止數(shù)據(jù)傳送。8.3.5 應(yīng)答位檢查應(yīng)答位檢查用于檢測(cè)接收的是否為正常的應(yīng)答信號(hào),以便于判斷數(shù)據(jù)接收是否正常,方便后期處理。如果采用C語(yǔ)言進(jìn)行程序設(shè)計(jì),則檢查應(yīng)答位子程序示例如下:bit I_TestAck() bit ErrorBit;SDA=HIGH;I_Delay(100);SCL=HIGH;I_Delay(100);ErrorBit=SDA;SCL=LOW;I_Delay(100);return(Err
10、orBit);8.3.6 總線數(shù)據(jù)位 在I2C總線啟動(dòng)后或應(yīng)答信號(hào)后的第18個(gè)時(shí)鐘脈沖,對(duì)應(yīng)于要傳送字節(jié)的8位數(shù)據(jù),數(shù)據(jù)位由低到高傳送。 I2C總線上的數(shù)據(jù)是伴隨著時(shí)鐘脈沖,一位一位地傳送的,每位數(shù)據(jù)占一個(gè)時(shí)鐘脈沖。在時(shí)鐘線SCL高電平期間,數(shù)據(jù)線SDA的狀態(tài)就表示要傳送的數(shù)據(jù),高電平為數(shù)據(jù)1,低電平為數(shù)據(jù)0。在數(shù)據(jù)傳送時(shí),數(shù)據(jù)線上數(shù)據(jù)的改變?cè)跁r(shí)鐘線為低電平時(shí)完成,而時(shí)鐘線為高電平時(shí),數(shù)據(jù)線必須保持穩(wěn)定,否則數(shù)據(jù)線上的任何變化都會(huì)被當(dāng)作起始或終止信號(hào),而致使數(shù)據(jù)傳輸停止。8.3.7 寫(xiě)數(shù)據(jù) I2C總線協(xié)議規(guī)定了完整的數(shù)據(jù)傳送格式。按照協(xié)議規(guī)定,數(shù)據(jù)傳輸?shù)拈_(kāi)始以主器件發(fā)出起始信號(hào)為準(zhǔn),然后發(fā)送尋
11、址字節(jié)。尋址字節(jié)共8位,高7位是被尋址的從器件地址,最低一位是方向位,方向位表示主器件與從器件之間的數(shù)據(jù)傳送方向,方向位為“0時(shí)表示主器件向從器件發(fā)送數(shù)據(jù)寫(xiě))。在尋址字節(jié)后是將要傳送的數(shù)據(jù)字節(jié)與應(yīng)答位,數(shù)據(jù)可以多字節(jié)連續(xù)發(fā)送。在數(shù)據(jù)傳送完畢后,主器件必須發(fā)送終止信號(hào)已釋放總線控制權(quán)。如果主器件希望繼續(xù)占用總線,則可以不產(chǎn)生終止信號(hào),馬上再次發(fā)送起始信號(hào),并對(duì)另一從器件進(jìn)行尋址,便可進(jìn)行新的數(shù)據(jù)傳送。寫(xiě)入8位I_Write8Bit(INT8U input) INT8U i;for(i=0;i8;i+)SDA=(bit)(input&0 x80);SCL=HIGH;I_Delay(100)
12、;SCL=LOW;I_Delay(100);input=input1;向指定的地址中寫(xiě)入一個(gè)字節(jié)的數(shù)據(jù)void write_byte(INT8U RomAddress,INT8U Wdata)I_Start();I_Write8Bit(WriteDeviceAddress);I_TestAck();I_Write8Bit(RomAddress);I_TestAck(); I_Write8Bit(Wdata);I_TestAck();I_Stop();I_Wait(20);8.3.8 讀數(shù)據(jù) I2C總線進(jìn)行讀數(shù)據(jù)時(shí),數(shù)據(jù)傳輸?shù)拈_(kāi)始以主器件發(fā)出起始信號(hào)為準(zhǔn),然后發(fā)送尋址字節(jié)。尋址字節(jié)共8位,高7位
13、是被尋址的從器件地址,最低一位是方向位,方向位表示主器件與從器件之間的數(shù)據(jù)傳送方向,方向位為“1時(shí)表示主器件從從器件中接收數(shù)據(jù)讀)。在尋址字節(jié)后是將要傳送的數(shù)據(jù)字節(jié)與應(yīng)答位,數(shù)據(jù)可以多字節(jié)連續(xù)發(fā)送。在數(shù)據(jù)傳送完畢后,主器件必須發(fā)送終止信號(hào)已釋放總線控制權(quán)。如果主器件希望繼續(xù)占用總線,則可以不產(chǎn)生終止信號(hào),馬上再次發(fā)送起始信號(hào),并對(duì)另一從器件進(jìn)行尋址,便可進(jìn)行新的數(shù)據(jù)傳送。讀取8位 INT8U I_Read8Bit() INT8U i,rbyte=0;for(i=0;i8;i+)SCL=HIGH;rbyte=rbyte1;rbyte=rbyte|(INT8U)(SDA);SCL=LOW;retu
14、rn(rbyte); 從地址中讀取一個(gè)字節(jié)的數(shù)據(jù)INT8U read_random(INT8U RomAddress) INT8U Read_data; I_Start();I_Write8Bit(WriteDeviceAddress);I_TestAck();I_Write8Bit(RomAddress);I_TestAck();I_Start();I_Write8Bit(ReadDeviceAddress);I_TestAck();Read_data=I_Read8Bit();I_NoAck();I_Stop();return (Read_data);8.4 51單片機(jī)讀寫(xiě)EEPROM I
15、2C總線接口器件以體積小、接口簡(jiǎn)單、讀寫(xiě)操作方便等優(yōu)點(diǎn),使其在單片機(jī)系統(tǒng)中有著廣泛的應(yīng)用。目前常用于存儲(chǔ)系統(tǒng)必要的參數(shù),如密碼、啟動(dòng)代碼、設(shè)備標(biāo)識(shí)等。例如,計(jì)算機(jī)主板中的BIOS就使用的是一個(gè)帶有I2C總線的EEPROM,其中保存了系統(tǒng)得重要信息和系統(tǒng)參數(shù)的設(shè)置程序。 目前USB接口及其設(shè)備越來(lái)越被廣泛使用,大有取代其他老式接口的趨勢(shì)。然而,如何區(qū)分計(jì)算機(jī)上連接的眾多USB外圍設(shè)備呢?其實(shí)絕大部分的USB接口芯片都通過(guò)上電讀一個(gè)帶有I2C總線的串行EEPROM,來(lái)載入該設(shè)備的ID包括Vendor ID、Product ID和Device ID),根據(jù)這些ID來(lái)區(qū)分各個(gè)USB設(shè)備,并加載相應(yīng)的驅(qū)
16、動(dòng)程序。8.4.1 串行EEPROM存儲(chǔ)器簡(jiǎn)介串行EEPROM存儲(chǔ)器是一種采用串行總線的存儲(chǔ)器,這類(lèi)存儲(chǔ)器具有體積小、功耗低、允許工作電壓范圍寬等特點(diǎn)。目前,單片機(jī)系統(tǒng)中使用較多的EEPROM芯片是24系列串行EEPROM。其具有型號(hào)多、容量大、支持I2C總線協(xié)議、占用單片機(jī)I/O端口少,芯片擴(kuò)展方便、讀寫(xiě)簡(jiǎn)單等優(yōu)點(diǎn)。目前,Atmel、MicroChip、National等公司均提供各種型號(hào)的I2C總線接口的串行EEPROM存儲(chǔ)器。下面以Atmel公司的產(chǎn)品為例進(jìn)行介紹。AT24C01/02/04/08系列是Atmel公司典型的I2C串行總線的EEPROM。這里以AT24C08為例介紹。AT24C08具有10248位的存儲(chǔ)容量,工作于從器件模式,可重復(fù)擦寫(xiě)100萬(wàn)次,數(shù)據(jù)可以掉電保存100年。8引腳DIP封裝的AT24C08的封裝結(jié)構(gòu),如下圖。函數(shù)的調(diào)用 main() INT8U iic_dat; clr_scr(0); clr_scr(1); /write_byte(1,13); iic_dat=read_random(1); disp_zf(iic_dat/10,0,0
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 太原市裝飾材料市場(chǎng)租賃合同
- 夜市美食街房屋租賃合同
- 加工中心裝修工程施工合同
- 通訊設(shè)備外貿(mào)業(yè)務(wù)員招聘合同
- 電子產(chǎn)品組裝材料員招聘協(xié)議
- 紅外線治療的操作流程
- 擴(kuò)張性心肌病治療指南
- 關(guān)于感恩國(guó)旗演講稿集錦8篇
- 消防應(yīng)急逃生
- 2024年度質(zhì)量保證費(fèi)用支持合同
- 北京市第四中學(xué)2024-2025學(xué)年七年級(jí)上學(xué)期期中生物學(xué)試題(含答案)
- 體育教師先進(jìn)個(gè)人事跡材料
- 2025屆江蘇省蘇州市第一中學(xué)物理高三第一學(xué)期期末學(xué)業(yè)水平測(cè)試模擬試題含解析
- 企業(yè)財(cái)務(wù)管理數(shù)字化轉(zhuǎn)型實(shí)施方案
- 第九課+發(fā)展中國(guó)特色社會(huì)主義文化+課件高中政治統(tǒng)編必修四哲學(xué)與文化
- 牙用漂白凝膠市場(chǎng)環(huán)境與對(duì)策分析
- 2024年山東省濟(jì)南市中考英語(yǔ)試題卷(含答案)
- 人教版七年級(jí)道德與法治上冊(cè) 期中復(fù)習(xí)知識(shí)梳理
- 3.1 農(nóng)業(yè)區(qū)位因素及其變化 課件 高一地理人教版(2019)必修第二冊(cè)
- 建筑施工企業(yè)(安全管理)安全生產(chǎn)管理人員安全生產(chǎn)考試參考題及答案
- 鍋爐應(yīng)急預(yù)案演練方案
評(píng)論
0/150
提交評(píng)論