單片機與I2C總線技術文檔.doc_第1頁
單片機與I2C總線技術文檔.doc_第2頁
單片機與I2C總線技術文檔.doc_第3頁
單片機與I2C總線技術文檔.doc_第4頁
單片機與I2C總線技術文檔.doc_第5頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

IIC總線即I2C,一種總線結構。IIC 是作為英特爾IC 的互補,這種總線類型是由菲利浦半導體公司在八十年代初設計出來的,主要是用來連接整體電路(ICS) ,IIC是一種多向控制總線,也就是說多個芯片可以連接到同一總線結構下,同時每個芯片都可以作為實施數據傳輸的控制源。這種方式簡化了信號傳輸總線。例如:內存中的SPD信息,通過IIC,與BX芯片組聯系,IIC 存在于英特爾PIIX4結構體系中。 隨著大規(guī)模集成電路技術的發(fā)展,把CPU和一個單獨工作系統(tǒng)所必需的ROM、RAM、I/O端口、A/D、D/A等外圍電路集成在一個單片內而制成的單片機或微控制器愈來愈方便。目前,世界上許多公司生產單片機,品種很多。其中包括各種字長的CPU,各種容量的ROM、RAM以及功能各異的I/O接口電路等等,但是,單片機的品種規(guī)格仍然有限,所以只能選用某種單片機來進行擴展。擴展的方法有兩種:一種是并行總線,另一種是串行總線。由于串行總線的連線少,結構簡單,往往不用專門的母板和插座而直接用導線連接各個設備。因此,采用串行線可大大簡化系統(tǒng)的硬件設計。PHILIPS公司早在十幾年前就推出了I2C串行總線,利用該總線可實現多主機系統(tǒng)所需的裁決和高低速設備同步等功能。因此,這是一種高性能的串行總線。 1 I2C總線的硬件結構 I2C串行總線一般有兩根信號線,一根是雙向的數據線SDA,另一根是時鐘線SCL。所有接到I2C總線設備上的串行數據SDA都接到總線的SDA上,各設備的時鐘線SCL接到總線的SCL上。典型的I2C總線結構如圖1所示。 為了避免總線信號的混亂,要求各設備連接到總線的輸出端時必須是開漏輸出或集電極開路輸出。設備與總線的接口電路如圖2所示。設備上的串行數據線SDA接口電路應該是雙向的,輸出電路用于向總線上發(fā)送數據,輸入電路用于接收總線上的數據。而串行時鐘線也應是雙向的,作為控制總線數據傳送的主機,一方面要通過SCL輸出電路發(fā)送時鐘信號,另一方面還要檢測總線上的SCL電平,以決定什么時候發(fā)送下一個時鐘脈沖電平;作為接受主機命令的從機,要按總線上的SCL信號發(fā)出或接收SDA上的信號,也可以向SCL線發(fā)出低電平信號以延長總線時鐘信號周期??偩€空閑時,因各設備都是開漏輸出,上拉電阻Rp使SDA和SCL線都保持高電平。任一設備輸出的低電平都將使相應的總線信號線變低,也就是說:各設備的SDA是“與”關系,SCL也是“與”關系。 總線對設備接口電路的制造工藝和電平都沒有特殊的要求(NMOS、CMOS都可以兼容)。在I2C總線上的數據傳送率可高達每秒十萬位,高速方式時在每秒四十萬位以上。另外,總線上允許連接的設備數以其電容量不超過400pF為限。 總線的運行(數據傳輸)由主機控制。所謂主機是指啟動數據的傳送(發(fā)出啟動信號)、發(fā)出時鐘信號以及傳送結束時發(fā)出停止信號的設備,通常主機都是微處理器。被主機尋訪的設備稱為從機。為了進行通訊,每個接到I2C總線的設備都有一個唯一的地址,以便于主機尋訪。主機和從機的數據傳送,可以由主機發(fā)送數據到從機,也可以由從機發(fā)到主機。凡是發(fā)送數據到總線的設備稱為發(fā)送器,從總線上接收數據的設備被稱為接受器。 I2C總線上允許連接多個微處理器以及各種外圍設備,如存儲器、LED及LCD驅動器、A/D及D/A轉換器等。為了保證數據可靠地傳送,任一時刻總線只能由某一臺主機控制,各微處理器應該在總線空閑時發(fā)送啟動數據,為了妥善解決多臺微處理器同時發(fā)送啟動數據的傳送(總線控制權)沖突,以及決定由哪一臺微處理器控制總線的問題,I2C總線允許連接不同傳送速率的設備。多臺設備之間時鐘信號的同步過程稱為同步化。 2 I2C數據傳輸 在I2C總線傳輸過程中,將兩種特定的情況定義為開始和停止條件(見圖3):當SCL保持“高”時,SDA由“高”變?yōu)椤暗汀睘殚_始條件;當SCL保持“高”且SDA由“低”變?yōu)椤案摺睍r為停止條件。開始和停止條件均由主控制器產生。使用硬件接口可以很容易地檢測到開始和停止條件,沒有這種接口的微機必須以每時鐘周期至少兩次對SDA取樣,以檢測這種變化。 SDA線上的數據在時鐘“高”期間必須是穩(wěn)定的,只有當SCL線上的時鐘信號為低時,數據線上的“高”或“低”狀態(tài)才可以改變。輸出到SDA線上的每個字節(jié)必須是8位,每次傳輸的字節(jié)不受限制,但每個字節(jié)必須要有一個應答ACK。如果一接收器件在完成其他功能(如一內部中斷)前不能接收另一數據的完整字節(jié)時,它可以保持時鐘線SCL為低,以促使發(fā)送器進入等待狀態(tài);當接收器準備好接受數據的其它字節(jié)并釋放時鐘SCL后,數據傳輸繼續(xù)進行。I2C數據總線傳送時序如圖4所示。 數據傳送具有應答是必須的。與應答對應的時鐘脈沖由主控制器產生,發(fā)送器在應答期間必須下拉SDA線。當尋址的被控器件不能應答時,數據保持為高并使主控器產生停止條件而終止傳輸。在傳輸的過程中,在用到主控接收器的情況下,主控接收器必須發(fā)出一數據結束信號給被控發(fā)送器,從而使被控發(fā)送器釋放數據線,以允許主控器產生停止條件。合法的數據傳輸格式如下: I2C總線在開始條件后的首字節(jié)決定哪個被控器將被主控器選擇,例外的是“通用訪問”地址,它可以在所有期間尋址。當主控器輸出一地址時,系統(tǒng)中的每一器件都將開始條件后的前7位地址和自己的地址進行比較。如果相同,該器件即認為自己被主控器尋址,而作為被控接收器或被控發(fā)送器則取決于R/W位。 3 I2C總線的應用 I2C總線是各種總線中使用信號線最少,并具有自動尋址、多主機時鐘同步和仲裁等功能的總線。因此,使用I2C總線設計計算機系統(tǒng)十分方便靈活,體積也小,因而在各類實際應用中得到廣泛應用。下面舉二個應用示例。 3.1 伺服控制系統(tǒng)用I2C擴展LCD顯示器 圖5是一個伺服系統(tǒng)的結構圖。它用8XC752單片機的PWM輸出經放大后來驅動電機,電機的轉速由測速機測取并直接送到8XC752片內的A/D電路。處理后的有關信息經I2C總線送到LCD驅動芯片PCF8577以驅動64段LCD顯示板。 3.2 通用I/O端口作為I2C總線接口 目前,51、96系列的單片機應用很廣,但是由于它們都沒有I2C總線接口,從而限制了在這些系統(tǒng)中使用具有I2C總線接口的器件。通過對I2C總線時序的分析,可以用51單片機的兩根I/O線來實現I2C總線的功能。接I2C總線規(guī)定:SCL線和SDA線是各設備對應輸出狀態(tài)相“與”的結果,任一設備都可以用輸出低電平的方法來延長SCL的低電平時間,以迫使高速設備進入等待狀態(tài),從而實現不同速度設備間的時鐘同步。因此,即使時鐘脈沖的高、低電平時間長短不一,也能實現數據的可靠傳送,可以用軟件控制I/O口做I2C接口。下面就是用GMS97C2051的通用I/O口來作為I2C總線接口,并由軟件控制實現數據傳送的例子,圖6為其連線圖。 在單主控器的系統(tǒng)中,時鐘線僅由主控器驅動,因此可以用51系列的一根I/O線作為SCL的信號線,將其設備為輸出方式,并由軟件控制來產生串行時鐘信號。在實際系統(tǒng)中使用了P1.3。另一根I/O線P1.2作為I2C總線的串行數據線,可在軟件控制下在時鐘的低電平期間讀取或輸出數據。系統(tǒng)傳輸數據的過程如下:先由單片機發(fā)出一個啟始數據信號,接著送出要訪問器件的7位地址數據,并等待被控器件的應答信號。當收以應答信號后,根據訪問要求進行相應的操作。如果是讀入數據,則數據線可一直設為輸入方式,中間不需要改變SDA線的工作方式,每讀入一個字節(jié)均應依次檢測應答信號;如果是輸出數據,則首先將SDA設置為輸出方式,當發(fā)送完一個字節(jié)后,需要改變SDA線為輸入方式,此時讀入被控器件的應答信號就完成了一個字節(jié)的傳送。當所有數據傳輸完畢后,應向SDA發(fā)出一個停止信號,以結束該次數據傳輸。 下面給出51系列用匯編語言實現啟始、停止、讀、寫、應答的程序,讀者也可以根據I2C總線時序在96系列或其它單片機上實現I2C總線接口。 a.啟動位程序 ACK:CLR P1.3 NOP NOP SETB P1.2 NOP NOP NOP CPL P1.3 ;P1.3=1 NOP NOP NOP DENGDAI:JB P1.2,DENGDAI RET b.讀數據程序 讀字節(jié)可以在當前地址讀(CURRENT READ),也可以隨機讀(RANDOM READ),讀出數據的最后一個字節(jié)后不用加應答信號。 READ:PUSH 0EH CLR P1.4 LCALL BSTART ;START MOV A,#0A0H ;SEND THE CNOTROL BYTE LCALL SENDBYTE LCALL ACK MOV A,R1 ;SEND THE ADDRESS LCALL SENDBYTE LCALL ACK LCALL BSTART ;START MOV A,#0A1H ;SEND THE CNOTROL BYTE LCALL SENDBYTE LCALL ACK LCALL READBYTE LCALL BSTOP POP 0EH RET 送字節(jié)程序: SENDBYTE:PUSH 0EH PUSH 00H MOV R0,#08H LOOP1:CLR P1.3 NOP NOP RLC A MOV P1.2,C CPL P1.3 ;P1.3=1 NOP NOP DJNZ R0,LOOP1 POP 00H POP 0EH RET 讀字節(jié)子程序: READBYTE:PUSH 0EH PUSH 00H MOV R0,#08H;READ THE CONTENT CLR A LOOP4:CLR P1.3 NOP NOP NOP SETB P1.3 ;P1.3=1 MOV C,P1.2 RLC A DJNZ R0,LOOP4 MOV R2,A POP 00H POP 0EH RET c.寫數據程序: WRITE:PUSH 0EH CLR P1.4 LCALL BSTART MOV A,#0A0H CLALL SENDBYTE ;SEND THE CONTROL BYTE LCALL ACK MOV A,R1 ;SEND THE ADDRESS LCALL SENDBYTE LCALL ACK MOV A,R2 ;WRITE THE CONTENT LCALL SENDBYTE LCALL ACK LCALL BSTOP POP 0EH RET 連續(xù)寫的兩個字節(jié)之間最好是有10ms的延時。當然,也可以進行頁寫(PAGE WRITE),即一次性連續(xù)寫8個字節(jié),但采用頁寫方式時每個字節(jié)后要有一個應答信號。 d.停止位程序: BSTOP:CLR P1.3 NOP NOP CLR P1.2 NOP NOP NOP SETB P1.3 NOP NOP NOP SETB P1.2 RETIIC總線的基本原理與應用實例2009-08-18 09:27大家好,通過以前的學習,我們已經對51單片機綜合學習系統(tǒng)的使用方法及學習方式有所了解與熟悉,學會了使用無線遙控模塊的基本知識,體會到了綜合學習系統(tǒng)的易用性與易學性,這一期我們將一起學習IIC總線的基本原理與應用實例。 先看一下我們將要使用的51單片機綜合學習系統(tǒng)能完成哪些實驗與產品開發(fā)工作:分別有流水燈,數碼管顯示,液晶顯示,按鍵開關,蜂鳴器奏 樂,繼電器控制,IIC總線,SPI總線,PS/2實驗,AD模數轉換,光耦實驗,串口通信,紅外線遙控,無線遙控,溫度傳感,步進電機控制等等。圖1 51單片機綜合學習系統(tǒng)上圖是我們將要使用的51單片機綜合學習系統(tǒng)硬件平臺,如圖1所示,本期實驗我們用到了綜合系統(tǒng)主機、板載的AT24C02芯片,綜合系統(tǒng)其它功能模塊原理與使用詳見前幾期電子制作雜志及后期連載教程介紹。在很多電子設備中都有要隨時存取數據作為歷史記錄或標志位。目前常用的存儲器有24CXX系列和93CXX系列,前者是I2C總線 結構,后者是SPI總線結構,本小節(jié)先介紹I2C結構的EEPROM(24CXX)作用方法,在后面小節(jié)中再介紹SPI結構的EEPROM(93CXX) 使用方法。I2C總線基本概念I2C總線,是INTERINTEGRATEDCIRCUITBUS的縮寫,即“內部集成電路總線”。 I2C總線是Philips公司推出的一種雙向二線制總線。目前Philips公司和其它集成電路制造商推出了很多基于I2C總線的外圍器件。I2C總線 包括一條數據線(SDA)和一條時鐘線(SCL)。協(xié)議允許總線接入多個器件,并支持多主工作??偩€中的器件既可以作為主控器也可以作為被控器,既可以是 發(fā)送器也可以是接收器。總線按照一定的通信協(xié)議進行數據交換。在每次數據交換開始,作為主控器的器件需要通過總線競爭獲得主控權,并啟動一次數據交換。系 統(tǒng)中各個器件都具有唯一的地址,各器件之間通過尋址確定數據接收方。I2C總線的系統(tǒng)結構一個典型的I2C總線標準的IC器件,其內部不僅有I2C接口電路,還可將內部各單元電路劃分成若干相對獨立的模塊,它只有二根信 號線,一根是雙向的數據線SDA,另一根是時鐘線SCL。CPU可以通過指令對各功能模塊進行控制。各種被控制電路均并聯在這條總線上,但就像電話機一 樣只有撥通各自的號碼才能工作,所以每個電路和模塊都有唯一的地址,在信息的傳輸過程中,I 2 C總線上并接的每一模塊電路既是主控器(或被控器),又是發(fā)送器(或接收器)。CPU發(fā)出的控制信號分為地址碼和控制量(數據)兩部分,地址碼用來選址, 即接通需要控制的電路,確定控制的種類;控制量決定該調整的類別及需要調整的量。這樣,各控制電路雖然掛在同一條總線上,卻彼此獨立,互不相關。I2C總 線接口電路如下圖2所示。圖2 I2C總線接口電路圖I2C總線的器件分為主器件和從器件。主器件的功能是啟動在總線上傳送數據,并產生時鐘脈沖,以允許與被尋址的器件進行數據傳送。 被尋址的器件,稱為從器件。一般來講,任何器件均可以成為從器件,只有微控制器才能稱為主器件。主、從器件對偶出現,工作在接收還是發(fā)送數據方式,由器件 的功能和數據傳送方向所決定。I2C總線允許連接多個微控制器,顯然不能同時存在兩個主器件,先控制總線的器件成為主器件,這就是總線競爭。在競爭過程中數據不會被破壞、丟失。數據只能在主、從器件中傳送,結束后,主、從器件將釋放總線,退出主、從器件角色。I2C總線接口特性傳統(tǒng)的單片機串行接口的發(fā)送和接收一般都分別各用一條線,如MCS-51系列的TXD和RXD,而I2C總線則根據器件的功能通過 軟件程序使其工作于發(fā)送或接收方式。當某個器件向總線上發(fā)送信息時,它就是發(fā)送器(也叫主器件),而當其從總線上接收信息時,又成為接收器(也叫從器 件)。主器件用于啟動總線上傳送數據并產生時鐘以開放傳送的器件,此時任何被尋址的器件均被認為是從器件。I2C總線的控制完全由掛在總線上的主器件送出 的地址和數據決定,在總線上,既沒有中心機也沒有優(yōu)先級??偩€上主和從(即發(fā)送和接收)的關系取決于此時數據傳送的方向。SDA 和SCL 都是雙向線路,都通過一個電流源或上拉電阻連接到電源端。連接總線器件的輸出級必須是集電極或漏極開路,以具有線“與”功能,當總線空閑時,兩根線都是高 電平。I2C總線上數據的傳輸速率在標準模式下可達100kbit/s 在快速模式下可達400kbit/s 在高速模式下可達3.4Mbit/s 連接到總線的接口數量只由總線電容是400pF 的限制決定。I2C總線器件工作原理及時序I2C總線的時鐘信號在I2C總線上傳送信息時的時鐘同步信號是由掛接在SCL時鐘線上的所有器件的邏輯“與”完成的。SCL線上由高電平到低電平的跳 變將影響到這些器件,一旦某個器件的時鐘信號變?yōu)榈碗娖剑瑢⑹筍CL線上所有器件開始并保護低電平期。此時,低電平周期短的器件的時鐘由低至高的跳變并不 影響SCL線的狀態(tài),這些器件將進入高電平等待的狀態(tài)。當所有器件的時鐘信號都變?yōu)楦唠娖綍r,低電平期結束,SCL線被釋放返回高電平,即所有的器件都同時開始它們的高電平期。其后, 第一個結束高電平期的器件又將SCL線拉成低電平。這樣就在SCL線上產生一個同步時鐘??梢?,時鐘低電平時間由時鐘低電平期最長的器件決定,而時鐘高電 平時間由時鐘高電平期最短的器件決定。I2C總線的傳輸協(xié)議與數據傳送起始和停止條件在數據傳送過程中,必須確認數據傳送的開始和結束。在I2C總線技術規(guī)范中,開始和結束信號(也稱啟動和停止信號)的定義如圖3所示。開始信號:當時鐘總線SCL為高電平時,數據線SDA由高電平向低電平跳變,開始傳送數據。結束信號:當SCL線為高電平時,SDA線從低電平向高電平跳變,結束傳送數據。開始和結束信號都是由主器件產生。在開始信號以后,總線即被認為處于忙狀態(tài),其它器件不能再產生開始信號。主器件在結束信號以后退出主器件角色,經過一段時間過,總線被認為是空閑的。圖3超始和停止信號圖數據格式I2C總線數據傳送采用時鐘脈沖逐位串行傳送方式,在SCL的低電平期間,SDA線上高、低電平能變化,在高電平期間,SDA上數據必須保護穩(wěn)定,以便接收器采樣接收,時序如圖4所示。圖4 數據傳送時序圖I2C總線發(fā)送器送到SDA線上的每個字節(jié)必須為8位長,傳送時高位在前,低位在后。與之對應,主器件在SCL線上產生8個脈沖; 第9個脈沖低電平期間,發(fā)送器釋放SDA線,接收器把SDA線拉低,以給出一個接收確認位;第9個脈沖高電平期間,發(fā)送器收到這個確認位然后開始下一字節(jié) 的傳送,下一個字節(jié)的第一個脈沖低電平期間接收器釋放SDA。每個字節(jié)需要9個脈沖,每次傳送的字節(jié)數是不受限制的。I2C總線的數據傳送格式是在I2C總線開始信號后,送出的第一字節(jié)數據是用來選擇從器件地址的,其中前7位為地址碼,第8位為 方向位(R/W)。方向位為“0”表示發(fā)送,即主器件把信息寫到所選擇的從器件中;方向位為“1”表示主器件將從從器件讀信息。格式如下: 1010A2A1A0R/W注:前四位固定為1010。開始信號后,系統(tǒng)中的各個器件將自己的地址和主器件送到總線上的地址進行比較,如果與主器件發(fā)送到總線上的地址一致,則該器件即被主器件尋址的器件,其接收信息還是發(fā)送信息則由第8位(R/W)決定。發(fā)送完第一個字節(jié)后再開始發(fā)數據信號。響應數據傳輸必須帶響應。相關的響應時鐘脈沖由主機產生,當主器件發(fā)送完一字節(jié)的數據后,接著發(fā)出對應于SCL線上的一個時鐘 (ACK)認可位,此時鐘內主器件釋放SDA線,一字節(jié)傳送結束,而從器件的響應信號將SDA線拉成低電平,使SDA在該時鐘的高電平期間為穩(wěn)定的低電 平。從器件的響應信號結束后,SDA線返回高電平,進入下一個傳送周期。通常被尋址的接收器在接收到的每個字節(jié)后必須產生一個響應。當從機不能響應從機地址時,從機必須使數 據線保持高電平,主機然后產生一個停止條件終止傳輸或者產生重復起始條件開始新的傳輸。如果從機接收器響應了從機地址但是在傳輸了一段時間后不能接收更多 數據字節(jié),主機必須再一次終止傳輸。這個情況用從機在第一個字節(jié)后沒有產生響應來表示。從機使數據線保持高電平主機產生一個停止或重復起始條件。完整的數 據傳送過程如圖5所示。圖5 完整的數據傳送過程I2C總線還具有廣播呼叫地址用于尋址總線上所有器件的功能。若一個器件不需要廣播呼叫尋址中所提供的任何數據,則可以忽咯該地址不作響應。如果該器件需要廣播呼叫尋址中按需提供的數據,則應對地址作出響應,其表現為一個接收器。24C系列存儲器的軟硬件設計實例IIC總線常用的芯片有24C01、24C02、24C04、24C08等,下面以目前在單片機系統(tǒng)中常用的帶I2C接口的EEPROM芯片AT24C02為例,介紹I2C器件的基本應用,不同型號的24C芯片,只是容量大小不同,讀寫方式與基本原理幾乎一樣。AT24C02簡介AT24C02是美國ATMEL公司的低功耗CMOS串行EEPROM,它是內含2568位存儲空間,具有工作電壓寬 (2.55.5V)、擦寫次數多(大于10000次)、寫入速度快(小于10ms)等特點。AT24C02中帶有片內尋址寄存器。每寫入或讀出一個數據 字節(jié)后,該地址寄存器自動加1,以實現對下一個存儲單元的操作。所有字節(jié)都以單一操作方式讀取。為降低總的寫入時間,一次操作可寫入多達8字節(jié)的數據。圖 6為AT24C系列芯片的封裝圖。各引腳功能如下:圖6 24C系列芯片封裝圖SCL:串行時鐘。在該引腳的上升沿時,系統(tǒng)將數據輸入到每個EEPROM器件,在下降沿時輸出。SDA:串行數據。該引腳為開漏極驅動,可雙向傳送數據。A0、A1、A2:器件/頁面尋址。為器件地址輸入端。WP:硬件寫保護。當該引腳為高電平時禁止寫入,當為低電平時可正常讀寫數據。VCC:電源。一般輸入+5V電壓。VSS:接地。程序功能本例的程序功能是利用單片機與24C02進行I2C通信,實現對某一地址內數據的讀寫校驗操作。本程序先對地址0x01和0x02地址內寫入數據0x55和0xAA,然后讀其中一個地址內的數據,并在數碼管上顯示驗證。本程序 默認是讀取0x02地址內的數據,讀者也可以改變地址來讀取其它空間內的數據。本實驗進行前要先將實驗板上功能選擇開關調到24C*位置上,如圖7所 示,程序執(zhí)行效果如圖8所示。圖7圖8 24C02實驗演示圖硬件原理圖圖9 硬件原理圖程序流程圖圖10 程序流程圖相信看到這里,你應該可以理解我們是如何利用單片機來進行IIC總線的讀寫操作了,你也可以根據自己的需要來寫芯片讀寫、存儲的相關程 序。由于篇幅有限,讀者朋友可以通過網站或電子郵件一起交流與學習。在下幾期中,我們將陸續(xù)介紹51單片機綜合學習系統(tǒng)的其它功能原理與應用。iic總線程序2009-06-12 20:47I2C(InterIntegrated Circuit)串行總線是PHILIPS公司推出的一種是具備多主機系統(tǒng)所需的包括裁決和高低速設備同步等功能的高性能串行總線,用于連接微控制器及其外圍設備。I2C 總線產生于在80年代,最初為音頻和視頻設備開發(fā),如今主要在服務器管理中使用,其中包括單個組件狀態(tài)的通信。例如管理員可對各個組件進行查詢,以管理系 統(tǒng)的配置或掌握組件的功能狀態(tài),如電源和系統(tǒng)風扇??呻S時監(jiān)控內存、硬盤、網絡、系統(tǒng)溫度等多個參數,增加了系統(tǒng)的安全性,方便了管理。在主從通信中,可以有多個I2C總線器件同時接到I2C總線上,所有I2C兼容的器件都具有標準的接口,通過地址來識別通信對象,使它們可以經由I2C總線互相直接通信。 iic數據傳輸格式如下: 超始位被控接收器地址R/W應答位數據應答位、停止位在傳輸數據開始前,主控器件應發(fā)送起始位,通知從器件做好接收準備;在傳輸數據結束時,主控器件應發(fā)送停止位,通知從器件停止接收,起始位時序:當SCL位為高位時,SDA線由高到低的轉換。停止位時序:當SCL位為高位時,SDA線由低到高的轉換。SDA上的數據在時鐘高電平期間必須保持穩(wěn)定,在SCL低電平期間才可以改變,輸出到SDA 線上的每個字節(jié)必須是8位,每次傳輸的字節(jié)不受限制,每個字節(jié)必須有一個應答位ACK,與應答位對應的時鐘脈沖由主控器產生,發(fā)送器在應答期間必須拉低SDA線。SDA線連續(xù)寫操作數據狀態(tài)為:(S表示開始信號START,A表示應答信號ACK,P表示停止信號STOP ) /* 全局符號定義 */#define HIGH 1#define LOW 0#define FALSE 0#define TRUE FALSE#define function#define end_if#define end_for#define byte unsigned charsbit SCL = 0x96 ;sbit SDA = 0x97 ;/* 函數原型: void function delay(void);* 功 能: 本函數實際上只有一條返回指令, 在具體應用中可視具體要求增加延時 * 指令。*/void function delay( void ) ;/* 函數原型: void function I2C_start(void);* 功 能: 提供I2C總線工作時序中的起始位。 */void function I2C_start( void ) SDA=HIGH;SCL = HIGH ;delay();SDA = LOW ;delay() ;SCL = LOW ;delay() ;/* 函數原型: void function I2C_stop(void);* 功 能: 提供I2C總線工作時序中的停止位。*/void function I2C_stop( void ) SDA = LOW ;SCL = HIGH ;delay() ;SDA = HIGH ;delay() ;SCL = LOW ;delay() ;/* 函數原型: void function I2C_init(void);* 功 能: I2C總線初始化。在main()函數中應首先調用本函數, 然后再調用* 其它函數。 */void function I2C_init( void ) SCL = LOW ;I2C_stop() ;/* 函數原型: bit function I2C_clock(void);* 功 能: 提供I2C總線的時鐘信號, 并返回在時鐘電平為高期間SDA 信號線上狀* 態(tài)。本函數可用于數據發(fā)送, 也可用于數據接收。 */bit function I2C_clock( void ) bit sample ;SCL = HIGH ;delay() ;sample = SDA ;SCL = LOW ;delay() ;return ( sample ) ;/* 函數原型: bit function I2C_send(byte I_data);* 功 能: 向I2C總線發(fā)送8位數據, 并請求一個應答信號ACK。如果收到ACK應答* 則返回1(TRUE), 否則返回0(FALSE)。 */bit function I2C_send( byte I2C_data ) register byte i ;/* 發(fā)送8位數據 */for ( i=0 ; i8 ; i+ ) SDA = (bit)( I2C_data & 0x80 ) ; I2C_data = I2C_data 1 ; I2C_clock() ;end_for/* 請求應答信號ACK */SDA = HIGH ;return ( I2C_clock() ) ;/* 函數原型: byte function I2C_receive(void);* 功 能: 從I2C總線上接收8位數據信號, 并將接收到8位數據作為一個字節(jié)* 返回, 不回送應答信號ACK。主函數在調用本函數之前應保證SDA信* 號線處于浮置狀態(tài), 即使8051的P1.7腳置1。 */byte function I2C_receive( void ) byte I2C_data = 0 ;register byte i ;for ( i=0 ; i8 ; i+ ) I2C_data =1 ; if ( I2C_clock() ) I2C_data+ ; end_ifend_for return ( I2C_data ) ;/* 函數原型: void function I2C_ack(void);* 功 能: 向I2C總線發(fā)送一個應答信號ACK, 一般用于連續(xù)數據讀取時。*/void function I2C_ack( void ) SDA = LOW ;I2C_clock() ;SDA = HIGH ;/*/* 函數原型: void function I2C_nack(void);* 功 能: 向I2C總線發(fā)送一個非應答信號NACK。*/void function I2C_nack( void ) SDA = HIGH ;I2C_clock() ;SDA = LOW;=* * 上面給出的是I2C總線基本操作函數, 下面給出的是幾個對I2C總線接口器件* 24C04操作的函數。* =*/#define WRITE 0xA0 /* 定義24C04的器件地址SLA和方向位W */#define READ 0xA1 /* 定義24C04的器件地址SLA和方向位R */#define BLOCK_SIZE 32 /* 定義指定字節(jié)個數 */extern xdata byte EAROMImageBLOCK_SIZE;/* 在外部RAM中定義存儲映象單元 */* 函數原型: bit function E_address(byte Address);* 功 能: 向24C04寫入器件地址和一個指定的字節(jié)地址。*/bit function E_address( byte Address ) I_start() ;if ( I_send( WRITE ) ) return ( I_send( Address ) ) ;else return ( FALSE ) ;end_if/* 函數原型: bit function E_read_block(void);* 功 能: 從24C04中讀取BLOCK_SIZE個字節(jié)的數據并轉存于外部RAM存儲映象* 單元, 采用序列讀操作方式從片內0地址開始連續(xù)讀取數據。如果* 24C04不接受指定的地址則返回0(FALSE)。*/bit function E_read_block( void ) register byte i ;/* 從地址0開始讀取數據 */if ( E_address( 0 ) ) /* 發(fā)送重復啟動信號 */ I_start() ; if ( I_send( READ ) ) for ( i=0 ; i=BLOCK_SIZE ; i+ ) EAROMImagei = ( I_receive() ) ; if ( i != BLOCK_SIZE ) I_Ack() ; else I_clock() ; I_stop() ; end_if end_for return ( TRUE ) ; else I_stop() ; return ( FALSE ) ; end_if else I_stop() ; return ( FALSE ) ;end_if/* 函數原型: void function wait_5ms(void);* 功 能: 提供5ms延時(時鐘頻率為12MHz)。*/void function wait_5ms( void ) register int i ;for ( i=0 ; i1000 ; i+ ) ;end_for/* 函數原型: bit function E_write_block(void);* 功 能: 將外部RAM存儲映象單元中的數據寫入到24C04的頭BLOCK_SIZE個字節(jié)。* 采用字節(jié)寫操作方式, 每次寫入時都需要指定片內地址。如果24C04* 不接受指定的地址或某個傳送的字節(jié)未收到應答信號ACK, 則返回0* (FALSE)。 */bit function E_write_block( void ) register byte i ;for ( i=0 ; i=BLOCK_SIZE ; i+ ) if ( E_address(i) & I_send( EAROMImagei ) ) I_stop() ; wait_5ms(); else return ( FALSE ) ; end_ifend_for return ( TRUE ) ;I2C總線是由數據線SDA和時鐘線SCL構成的串行總線,可發(fā)送和接收數據。在CPU與被控IC之間、IC與IC之間進行雙向傳送,最高傳送速率為400kb/s,各種被控電路均并聯在這條總線上,每個電路都有唯一的地址。在信息的傳輸過程當中,I2C總線上并聯的每一個模塊電路既是被控器(或是主控器),又是發(fā)送器(或是接收器),這取決于它所要完成的功能。CPU發(fā)出的控制信號分為地址碼和數據碼兩部分:地址碼用來選址,及接通需要控制的電路;數據碼是通信的內容,這樣各控制電路雖然掛在同一條總線上,卻彼此獨立。IIC總線工作原理2009-04-30 14:36IIC總線工作原理 I2C總線進行數據傳送時,時鐘信號為高電平期間,數據線上的數據必須保持穩(wěn)定,只有在時鐘線上的信號為低電平期間,數據線上的高電平或低電平狀態(tài)才允許變化。 起始和終止信號 :SCL線為高電平期間,SDA線由高電平向低電平的變化表示起始信號;SCL線為高電平期間,SDA線由低電平向高電平的變化表示終止信號。數據傳送格式(1)字節(jié)傳送與應答每一個字節(jié)必須保證是8位長度。數據傳送時,先傳送最高位(MSB),每一個被傳送的字節(jié)后面都必須跟隨一位應答位(即一幀共有9位)。如果一段時間內沒有收到從機的應答信號,則自動認為從機已正確接收到數據。 AT24C02的芯片地址如下圖,1010為固定,A0,A1,A2正好與芯片的1,2,3引角對應,為當前電路中的地址選擇線,三根線可選擇8個芯片同時連接在電路中,當要與哪個芯片通信時傳送相應的地址即可與該芯片建立連接,TX-1B實驗板上三根地址線都為0。最后一位R/W為告訴從機下一字節(jié)數

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論