




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 實(shí)驗(yàn)八 51系列單片機(jī)讀寫I2C總線I2C總線是Philips公司推出的一種雙向二線制總線,全稱為芯片間總線Inter Integrate Circuit BUS)。其在芯片間使用兩根連線實(shí)現(xiàn)全雙工同步數(shù)據(jù)傳送,一條數(shù)據(jù)線SDA和一條串行時鐘線SCL),可以很方便地構(gòu)成外圍器件擴(kuò)展系統(tǒng)。I2C總線是很簡單方便的芯片間串行擴(kuò)展總線。使用I2C總線可以直接和具有I2C總線接口的單片機(jī)通信,也可以和各種類型的外圍器件進(jìn)行通信,如存儲器、A/D、D/A、鍵盤、LCD等。目前Philips、Atmel、Maxim以及其他集成電路制造商推出了很多基于I2C總線的單片機(jī)和外圍器件,如24系列E2PROM、
2、串行實(shí)時時鐘芯片DS1302、USB2.0芯片CY7C68013A等。本章主要介紹了I2C總線的工作原理、結(jié)構(gòu)以及尋址方式,并重點(diǎn)介紹了數(shù)據(jù)傳輸協(xié)議以及程序?qū)崿F(xiàn)。這些程序均以子程序的形式提供,便于讀者調(diào)用。最后通過具體的實(shí)例,介紹如何使用單片機(jī)讀寫具有I2C總線接口的E2PROM。 I2C總線概述 I2C總線對數(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和時鐘線SCL構(gòu)成??偩€上掛接的單片機(jī)主器件或外圍器件從器件),其接口
3、電路都應(yīng)具有I2C總線通信能力。8.1 I2C總線的電氣結(jié)構(gòu)和負(fù)載能力I2C總線的SCL和SDA端口輸出為漏極開路,因此使用時上必須連接上拉電阻。不同型號的器件對上拉電阻的要求不同,可參考具體器件的數(shù)據(jù)手冊。上拉電阻的大小與電源電壓、傳輸速率等有關(guān)系。I2C總線的傳輸速率可以支持100kHz和400kHz兩種,對于100kHz的速率一般采用10K的上拉電阻,對于400kHz的速率一般采用2K的上拉電阻。I2C總線上的外圍擴(kuò)展器件都是屬于電壓型負(fù)載的CMOS器件,因此總線上的器件數(shù)量不是由電流負(fù)載能力決定,而是由電容負(fù)載能力確定。I2C總線上每一個節(jié)點(diǎn)器件的接口都有一定的等效電容,這會造成信號傳
4、輸?shù)难舆t。通常I2C總線的負(fù)載能力為400pF通過驅(qū)動擴(kuò)展可達(dá)4000pF),據(jù)此可計(jì)算出總線長度及連接器件的數(shù)量。8.3 I2C總線器件的尋址方式I2C總線上的所有器件連接在一個公共的總線上,因此,主器件在進(jìn)行數(shù)據(jù)傳輸前選擇需要通信的從器件,即進(jìn)行總線尋址。I2C總線上所有外圍器件都需要有惟一的地址,由器件地址和引腳地址兩部分組成,共7位。器件地址是I2C器件固有的地址編碼,器件出廠時就已經(jīng)給定,不可更改。引腳地址是由I2C總線外圍器件的地址引腳A2,A1,A0決議,根據(jù)其在電路中接電源正極、接地或懸空的不同,形成不同的地址代碼。引腳地址數(shù)也決定了同一種器件可接入總線的最大數(shù)目。地址位與一個
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總線接口的器件都必須遵守。另外,對于應(yīng)用最廣的51系列單片機(jī),卻沒有提供I2C總線接口。實(shí)際上,利用這些單片機(jī)的普通I/O口,采用軟件模擬I2C總線SCL和SDA上的數(shù)據(jù)傳送時序,完全可以實(shí)現(xiàn)對I2C總線器件的讀、寫操作。 下面就分別介紹數(shù)據(jù)傳輸過程中的格式以及如何使用8051單片機(jī)來實(shí)現(xiàn)。
6、這里假設(shè)51系列單片機(jī)的外接晶振頻率為6MHz,單片機(jī)的機(jī)器周期為2s,采用P1.0作為時鐘線SCL,P1.1作為數(shù)據(jù)線SDA。8.3.1 起始信號起始信號用于開始I2C總線通信。在時鐘線SCL為高電平期間,數(shù)據(jù)線SDA上出現(xiàn)由高電平向低電平變化的下降沿時,被認(rèn)為是起始信號。起始信號出現(xiàn)以后,才可以進(jìn)行尋址或數(shù)據(jù)傳輸?shù)?。如果采用C語言進(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 終止信號終止信號用
7、于終止I2C總線通信。在時鐘線SCL為高電平期間,數(shù)據(jù)線SDA上出現(xiàn)由低電平到高電平變化的上升沿時,被認(rèn)為是終止信號。終止信號一出現(xiàn),所有總線操作都結(jié)束,主從器件釋放總線控制權(quán)。如果采用C語言進(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)答信號應(yīng)答信號用于表明數(shù)據(jù)傳輸?shù)慕Y(jié)束。I2C總線數(shù)據(jù)傳送時,每傳送一個字節(jié)數(shù)據(jù)后都必須有應(yīng)答信號。應(yīng)答信號從主器件產(chǎn)生。主器件在第9個時鐘位上釋放數(shù)據(jù)總線,使其處于
8、高電平狀態(tài),此時從器件輸出低電平拉低數(shù)據(jù)總線為應(yīng)答信號。如果采用C語言進(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)答信號 非應(yīng)答信號用于數(shù)據(jù)傳輸出現(xiàn)異常而無法完成時。在傳送完一個字節(jié)數(shù)據(jù)后,在第9個時鐘位上從器件輸出高電平為非應(yīng)答信號。非應(yīng)答信號的產(chǎn)生有兩種情況。 當(dāng)從器件正在進(jìn)行其他處理而無法接收總線上的數(shù)據(jù)時,從器件不產(chǎn)生應(yīng)答,此時從器件釋放總線,將數(shù)據(jù)線置為高電平。這樣,主器件可
9、產(chǎn)生一個停止信號來終止總線數(shù)據(jù)傳輸。 當(dāng)主器件接收來自從器件的數(shù)據(jù)時,接收到最后一個數(shù)據(jù)字節(jié)后,必須給從器件發(fā)送一個非應(yīng)答信號,使從器件釋放數(shù)據(jù)總線。這樣,主器件才可以發(fā)送停止信號,從而終止數(shù)據(jù)傳送。8.3.5 應(yīng)答位檢查應(yīng)答位檢查用于檢測接收的是否為正常的應(yīng)答信號,以便于判斷數(shù)據(jù)接收是否正常,方便后期處理。如果采用C語言進(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總線啟動后或應(yīng)答信號后的第18個時鐘脈沖,對應(yīng)于要傳送字節(jié)的8位數(shù)據(jù),數(shù)據(jù)位由低到高傳送。 I2C總線上的數(shù)據(jù)是伴隨著時鐘脈沖,一位一位地傳送的,每位數(shù)據(jù)占一個時鐘脈沖。在時鐘線SCL高電平期間,數(shù)據(jù)線SDA的狀態(tài)就表示要傳送的數(shù)據(jù),高電平為數(shù)據(jù)1,低電平為數(shù)據(jù)0。在數(shù)據(jù)傳送時,數(shù)據(jù)線上數(shù)據(jù)的改變在時鐘線為低電平時完成,而時鐘線為高電平時,數(shù)據(jù)線必須保持穩(wěn)定,否則數(shù)據(jù)線上的任何變化都會被當(dāng)作起始或終止信號,而致使數(shù)據(jù)傳輸停止。8.3.7 寫數(shù)據(jù) I2C總線協(xié)議規(guī)定了完整的數(shù)據(jù)傳送格式。按照協(xié)議規(guī)定,數(shù)據(jù)傳輸?shù)拈_始以主器件發(fā)出起始信號為準(zhǔn),然后發(fā)送尋
11、址字節(jié)。尋址字節(jié)共8位,高7位是被尋址的從器件地址,最低一位是方向位,方向位表示主器件與從器件之間的數(shù)據(jù)傳送方向,方向位為“0時表示主器件向從器件發(fā)送數(shù)據(jù)寫)。在尋址字節(jié)后是將要傳送的數(shù)據(jù)字節(jié)與應(yīng)答位,數(shù)據(jù)可以多字節(jié)連續(xù)發(fā)送。在數(shù)據(jù)傳送完畢后,主器件必須發(fā)送終止信號已釋放總線控制權(quán)。如果主器件希望繼續(xù)占用總線,則可以不產(chǎn)生終止信號,馬上再次發(fā)送起始信號,并對另一從器件進(jìn)行尋址,便可進(jìn)行新的數(shù)據(jù)傳送。寫入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;向指定的地址中寫入一個字節(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ù)據(jù)傳輸?shù)拈_始以主器件發(fā)出起始信號為準(zhǔn),然后發(fā)送尋址字節(jié)。尋址字節(jié)共8位,高7位
13、是被尋址的從器件地址,最低一位是方向位,方向位表示主器件與從器件之間的數(shù)據(jù)傳送方向,方向位為“1時表示主器件從從器件中接收數(shù)據(jù)讀)。在尋址字節(jié)后是將要傳送的數(shù)據(jù)字節(jié)與應(yīng)答位,數(shù)據(jù)可以多字節(jié)連續(xù)發(fā)送。在數(shù)據(jù)傳送完畢后,主器件必須發(fā)送終止信號已釋放總線控制權(quán)。如果主器件希望繼續(xù)占用總線,則可以不產(chǎn)生終止信號,馬上再次發(fā)送起始信號,并對另一從器件進(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); 從地址中讀取一個字節(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ī)讀寫EEPROM I
15、2C總線接口器件以體積小、接口簡單、讀寫操作方便等優(yōu)點(diǎn),使其在單片機(jī)系統(tǒng)中有著廣泛的應(yīng)用。目前常用于存儲系統(tǒng)必要的參數(shù),如密碼、啟動代碼、設(shè)備標(biāo)識等。例如,計(jì)算機(jī)主板中的BIOS就使用的是一個帶有I2C總線的EEPROM,其中保存了系統(tǒng)得重要信息和系統(tǒng)參數(shù)的設(shè)置程序。 目前USB接口及其設(shè)備越來越被廣泛使用,大有取代其他老式接口的趨勢。然而,如何區(qū)分計(jì)算機(jī)上連接的眾多USB外圍設(shè)備呢?其實(shí)絕大部分的USB接口芯片都通過上電讀一個帶有I2C總線的串行EEPROM,來載入該設(shè)備的ID包括Vendor ID、Product ID和Device ID),根據(jù)這些ID來區(qū)分各個USB設(shè)備,并加載相應(yīng)的驅(qū)
16、動程序。8.4.1 串行EEPROM存儲器簡介串行EEPROM存儲器是一種采用串行總線的存儲器,這類存儲器具有體積小、功耗低、允許工作電壓范圍寬等特點(diǎn)。目前,單片機(jī)系統(tǒng)中使用較多的EEPROM芯片是24系列串行EEPROM。其具有型號多、容量大、支持I2C總線協(xié)議、占用單片機(jī)I/O端口少,芯片擴(kuò)展方便、讀寫簡單等優(yōu)點(diǎn)。目前,Atmel、MicroChip、National等公司均提供各種型號的I2C總線接口的串行EEPROM存儲器。下面以Atmel公司的產(chǎn)品為例進(jìn)行介紹。AT24C01/02/04/08系列是Atmel公司典型的I2C串行總線的EEPROM。這里以AT24C08為例介紹。AT24C08具有10248位的存儲容量,工作于從器件模式,可重復(fù)擦寫100萬次,數(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 兼職維修合同樣本
- 產(chǎn)品維護(hù)合同樣本
- 教師入職筆試題及答案
- 專利轉(zhuǎn)讓合同
- TUG-891激活GPR120受體減輕缺血性腦卒中損傷及其機(jī)制研究
- 基于非接觸測量的液壓鑿巖機(jī)工作性能測試方法研究
- 農(nóng)作物種子訂購合同樣本
- 剛建構(gòu)施工合同樣本
- 出租車成本監(jiān)審合同標(biāo)準(zhǔn)文本
- 債權(quán)交易合同樣本
- 生產(chǎn)車間5S管理制度
- 2025年吉林鐵道職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性考試題庫含答案
- 品牌總監(jiān)的面試題及答案
- 裝修公司設(shè)計(jì)經(jīng)理述職報(bào)告
- 水電配電箱知識培訓(xùn)課件
- 2025年吉林鐵道職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫一套
- 【珍藏版】魯教版初中英語全部單詞表(帶音標(biāo)、按單元順序)
- 2023學(xué)年杭州市余杭區(qū)七年級語文下學(xué)期期中考試卷附答案解析
- 9《小水滴的訴說》(教學(xué)設(shè)計(jì))-2023-2024學(xué)年統(tǒng)編版道德與法治二年級下冊
- 2025年安徽合肥興泰金融控股集團(tuán)招聘筆試參考題庫含答案解析
- 2025年駕校安全生產(chǎn)工作計(jì)劃
評論
0/150
提交評論