I2C串行接口技術(shù)課件_第1頁
I2C串行接口技術(shù)課件_第2頁
I2C串行接口技術(shù)課件_第3頁
I2C串行接口技術(shù)課件_第4頁
I2C串行接口技術(shù)課件_第5頁
已閱讀5頁,還剩99頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

串行接口技術(shù)I2C串行總線I2C串行總線是Philips公司提出的一種板內(nèi)芯片間串行總線。它用兩根連線即可方便地實(shí)現(xiàn)外圍器件擴(kuò)展。I2C總線上數(shù)據(jù)傳送的基本單位為字節(jié),采用高位在前的格式。主從器件之間一次傳輸?shù)臄?shù)據(jù)稱為一幀,由啟動(dòng)信號(hào)、若干個(gè)數(shù)據(jù)字節(jié)和應(yīng)答位以及停止信號(hào)組成。串行接口技術(shù)I2C串行總線1第6章串行接口技術(shù)I2C串行總線原理與應(yīng)用串行單總線原理與應(yīng)用串行模/數(shù)轉(zhuǎn)換器I2C總線鍵盤/顯示器接口芯片ZLG7290I2C總線串行8位數(shù)/模轉(zhuǎn)換器MAX517基于I2C總線的ADS1100型16位模/數(shù)轉(zhuǎn)換器第6章串行接口技術(shù)I2C串行總線原理與應(yīng)用2I2C串行總線原理與應(yīng)用I2C串行總線的組成與工作原理I2C串行總線的接口設(shè)計(jì)I2C串行總線器件應(yīng)用舉例實(shí)踐與思考I2C串行總線原理與應(yīng)用I2C串行總線的組成與工作原理3I2C串行總線的組成與工作原理

I2C串行總線的基本特性I2C總線的數(shù)據(jù)傳送I2C串行總線的組成與工作原理

4I2C串行總線的基本特性I2C總線是Philips公司推出的一種串行總線,是具備多主機(jī)系統(tǒng)所需的包括總線仲裁和高低速器件同步功能的高性能串行總線。它具有如下基本特性。I2C串行總線只有兩根雙向信號(hào)線I2C總線是一個(gè)多主機(jī)總線I2C總線的SDA和SCL是雙向的,均通過上拉電阻接正電源I2C總線的總線仲裁I2C串行總線的基本特性I2C總線是Philips公司推出的5I2C串行總線只有兩根雙向信號(hào)線一根是數(shù)據(jù)線SDA,另一根是時(shí)鐘線SCL。所有連接到I2C總線上的器件的數(shù)據(jù)線都接到SDA線上,各器件的時(shí)鐘線均接到SCL線上。I2C總線的基本結(jié)構(gòu)如圖所示。I2C串行總線只有兩根雙向信號(hào)線一根是數(shù)據(jù)線SDA,另一根6I2C總線是一個(gè)多主機(jī)總線總線上可以有一個(gè)或多個(gè)主機(jī),總線運(yùn)行由主機(jī)控制。這里所說的主機(jī)是指啟動(dòng)數(shù)據(jù)的傳送(發(fā)起始信號(hào))、發(fā)出時(shí)鐘信號(hào)、傳送結(jié)束時(shí)發(fā)出終止信號(hào)的器件。通常,主機(jī)由各種單片機(jī)或其他微處理器充當(dāng)。被主機(jī)尋訪的器件叫從機(jī),它可以是各種單片機(jī)或其他微處理器,也可以是其他器件,如存儲(chǔ)器、LED或LCD驅(qū)動(dòng)器、A/D或D/A轉(zhuǎn)換器、時(shí)鐘日歷器件等。I2C總線是一個(gè)多主機(jī)總線總線上可以有一個(gè)或多個(gè)主機(jī),總線運(yùn)7I2C總線的SDA和SCL是雙向的

均通過上拉電阻接正電源如圖所示,當(dāng)總線空閑時(shí),兩根線均為高電平。連到總線上的器件(相當(dāng)于結(jié)點(diǎn))的輸出級(jí)必須是漏極或集電極開路的,任一器件輸出的低電平,都將使總線的信號(hào)變低,即各器件的SDA及SCL都是線“與”關(guān)系。SCL線上的時(shí)鐘信號(hào)對(duì)SDA線上各器件間數(shù)據(jù)的傳輸起同步作用。SDA線上數(shù)據(jù)的起始、終止及數(shù)據(jù)的有效性均要根據(jù)SCL線上的時(shí)鐘信號(hào)來判斷。在標(biāo)準(zhǔn)I2C普通模式下,數(shù)據(jù)的傳輸率為100Kbps,高速模式下可達(dá)400Kbps。連接的器件越多,電容值越大,總線上允許的器件數(shù)以總線上的電容量不超過400pF為限。I2C總線的SDA和SCL是雙向的

均通過上拉電阻接正電源8I2C總線的總線仲裁在多主機(jī)系統(tǒng)中,可能同時(shí)有幾個(gè)主機(jī)企圖啟動(dòng)總線傳送數(shù)據(jù)。為了避免混亂,I2C總線要通過總線仲裁,以決定由哪一臺(tái)主機(jī)控制總線。首先,不同主器件(欲發(fā)送數(shù)據(jù)的器件)分別發(fā)出的時(shí)鐘信號(hào)在SCL線上“線與”產(chǎn)生系統(tǒng)時(shí)鐘:其低電平時(shí)間為周期最長的主器件的低電平時(shí)間,高電平時(shí)間則是周期最短主器件的高電平時(shí)間。仲裁的方法是:各主器件在各自時(shí)鐘的高電平期間送出各自要發(fā)送的數(shù)據(jù)到SDA線上,并在SCL的高電平期間檢測SDA線上的數(shù)據(jù)是否與自己發(fā)出的數(shù)據(jù)相同。I2C總線的總線仲裁在多主機(jī)系統(tǒng)中,可能同時(shí)有幾個(gè)主機(jī)企圖啟9I2C總線的數(shù)據(jù)傳送數(shù)據(jù)位的有效性規(guī)定起始和終止信號(hào)數(shù)據(jù)傳送格式I2C總線的時(shí)序特性I2C總線的尋址I2C總線的數(shù)據(jù)傳送數(shù)據(jù)位的有效性規(guī)定10數(shù)據(jù)位的有效性規(guī)定I2C總線進(jìn)行數(shù)據(jù)傳送時(shí),時(shí)鐘信號(hào)為高電平期間,數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定。只有在時(shí)鐘線上的信號(hào)為低電平期間,數(shù)據(jù)線上的高電平或低電工狀態(tài)才允許變化,如圖所示。數(shù)據(jù)位的有效性規(guī)定I2C總線進(jìn)行數(shù)據(jù)傳送時(shí),時(shí)鐘信號(hào)為高電平11起始和終止信號(hào)根據(jù)I2C總線協(xié)議的規(guī)定,SCL線為高電平期間,SDA線由高電平向低電平的變化表示起始信號(hào);SCL線為高電平期間,SDA線由低電平向高電平的變化表示終止信號(hào)。起始和終止信號(hào)如圖所示。起始和終止信號(hào)根據(jù)I2C總線協(xié)議的規(guī)定,SCL線為高電平期12數(shù)據(jù)傳送格式(1)字節(jié)傳送與應(yīng)答利用I2C總線進(jìn)行數(shù)據(jù)傳送時(shí),傳送的字節(jié)數(shù)是沒有限制的,但是每一個(gè)字節(jié)必須保證是8位長度。數(shù)據(jù)傳送時(shí),先傳送最高位(MSB),每一個(gè)被傳送的字節(jié)后面都必須跟隨一位應(yīng)答位(即一幀共有9位),如圖所示:應(yīng)答時(shí)序圖數(shù)據(jù)傳送格式(1)字節(jié)傳送與應(yīng)答利用I2C總線進(jìn)行數(shù)據(jù)傳13數(shù)據(jù)傳送格式(2)數(shù)據(jù)幀格式在總線的一次數(shù)據(jù)傳送過程中,可以有以下幾種組合方式:主機(jī)向從機(jī)發(fā)送數(shù)據(jù),數(shù)據(jù)傳送方向在整個(gè)傳送過程中不變。P數(shù)據(jù)A數(shù)據(jù)A0從機(jī)地址S主機(jī)在第一個(gè)字節(jié)后,立即由從機(jī)讀數(shù)據(jù)。P數(shù)據(jù)A數(shù)據(jù)A1從機(jī)地址SA在傳送過程中,當(dāng)需要改變傳送方向時(shí),起始信號(hào)和從機(jī)地址都被重復(fù)產(chǎn)生一次,但兩次讀/寫方向位正好反向。P數(shù)據(jù)A1從機(jī)地址S數(shù)據(jù)A0從機(jī)地址S注:有陰影部分表示數(shù)據(jù)由主機(jī)向從機(jī)傳送,無陰影部分則表示數(shù)據(jù)由從機(jī)向主機(jī)傳送。A表示應(yīng)答,表示非應(yīng)答(高電平)。S表示起始信號(hào),P表示終止信號(hào)。數(shù)據(jù)傳送格式(2)數(shù)據(jù)幀格式在總線的一次數(shù)據(jù)傳送過程中,可14I2C總線的時(shí)序特性為了保證數(shù)據(jù)傳送的可靠性,標(biāo)準(zhǔn)I2C總線的數(shù)據(jù)傳送有嚴(yán)格的時(shí)序要求。I2C總線的起始信號(hào)、終止信號(hào)、發(fā)送“0”及發(fā)送“1”的模擬時(shí)序如圖所示。典型信號(hào)時(shí)序圖I2C總線的時(shí)序特性為了保證數(shù)據(jù)傳送的可靠性,標(biāo)準(zhǔn)I2C總線15I2C總線的時(shí)序特性下表為I2C總線的時(shí)序特性。由表可見,除了SDA、SCL線的信號(hào)下降時(shí)間為最大值外,其他參數(shù)只有最小值。這表明在I2C總線的數(shù)據(jù)傳送中,可以利用時(shí)鐘同步機(jī)制展寬低電平周期,迫使主器件處于等待狀態(tài),使傳送速率降低。參數(shù)說明符號(hào)最小值最大值單位新的起始信號(hào)前總線必須的空閑時(shí)間TBUF4.7—s起始信號(hào)保持時(shí)間THD:STA4.0—s時(shí)鐘的低電平時(shí)間TLOW4.7—s時(shí)鐘的高電平時(shí)間THIGH4.0—s起始信號(hào)建立時(shí)間(僅對(duì)重復(fù)起始信號(hào))TSU:STA4.0—s數(shù)據(jù)建立時(shí)間TSU:DAT250—nsSDA、SCL線的信號(hào)下降時(shí)間TF—300ns終止信號(hào)建立時(shí)間TSU:STO4.7—sI2C總線的時(shí)序特性下表為I2C總線的時(shí)序特性。由表可見,除16I2C總線的尋址I2C總線協(xié)議有明確的規(guī)定:采用7位的尋址字節(jié)(尋址字節(jié)是起始信號(hào)后的第一個(gè)字節(jié))。(1)尋址字節(jié)的位定義D7~D1位組成從機(jī)的地址。D0位是數(shù)據(jù)傳送方向位,為“0”時(shí)表示主機(jī)向從機(jī)寫數(shù)據(jù),為“1”時(shí)表示主機(jī)由從機(jī)讀數(shù)據(jù)。主機(jī)發(fā)送地址時(shí),總線上的每個(gè)從機(jī)都將這7位地址碼與自己的地址進(jìn)行比較,如果相同,則認(rèn)為自己正被主機(jī)尋址,根據(jù)R/W位將自己確定為發(fā)送器或接收器。從機(jī)的地址由固定部分和可編程部分組成。在一個(gè)系統(tǒng)中可能希望接入多個(gè)相同的從機(jī),從機(jī)地址中可編程部分決定了可接入總線該類器件的最大數(shù)目。如一個(gè)從機(jī)的7位尋址位有4位是固定位,3位是可編程位,這時(shí)僅能尋址8個(gè)同樣的器件,即可以有8個(gè)同樣的器件接入到該I2C總線系統(tǒng)中。I2C總線的尋址I2C總線協(xié)議有明確的規(guī)定:采用7位的尋址17I2C總線的尋址(2)尋址字節(jié)中的特殊地址總線規(guī)定了一些特殊地址。其中兩組固定地址編號(hào)0000和1111已被保留作為特殊用途,如表所示。R/十位從機(jī)地址×0××1111×1××1111×1××0000保留×0110000為不同總線的保留地址×0100000CBUS地址×0010000起始字節(jié)10000000通用呼叫地址00000000意義地址位I2C總線的尋址(2)尋址字節(jié)中的特殊地址總線規(guī)定了一些特18I2C總線的尋址起始信號(hào)后第一字節(jié)的8位為“00000000”時(shí),稱為通用呼叫地址,即用于尋訪接到I2C總線上所有器件的地址。通用呼叫地址的用意在第二字節(jié)中加以說明。格式為:00000000A×××××××BA第二字節(jié)為06H時(shí),所有能響應(yīng)通用呼叫地址的從機(jī)器件復(fù)位,并由硬件裝入從機(jī)地址的可編程部分。能響應(yīng)命令的從機(jī)器件復(fù)位時(shí)不拉低SDA和SCL線,以免堵塞總線。第二字節(jié)為04H時(shí),所有能響應(yīng)通用呼叫地址并通過硬件來定義其可編程地址的從機(jī)器件將鎖定地址中的可編程位,但不進(jìn)行復(fù)位。如果第二字節(jié)的方向位B為“1”,則這兩個(gè)字節(jié)命令稱為硬件通用呼叫命令。也就是說這是由“硬件主器件”發(fā)出的。I2C總線的尋址起始信號(hào)后第一字節(jié)的8位為“000000019I2C總線的尋址所謂硬件主器件,就是不能發(fā)送所要尋訪從器件地址的發(fā)送器,如鍵盤掃描器等。制造這種器件時(shí)無法知道信息應(yīng)向哪兒傳送,所以,它發(fā)出硬件呼叫命令,在這第二字節(jié)的高7位說明自己的地址。接在總線上的智能器件,如單片機(jī)或其他微處理器能識(shí)別這個(gè)地址,并與之傳送數(shù)據(jù)。硬件主器件作為從機(jī)使用時(shí),也用這個(gè)地址作為從機(jī)地址。格式為:S00000000A主機(jī)地址1A數(shù)據(jù)A數(shù)據(jù)AP在系統(tǒng)中另一種選擇可能是系統(tǒng)復(fù)位時(shí)硬件主機(jī)器件工作在從機(jī)接收器方式,這時(shí)由系統(tǒng)中的主機(jī)先告訴硬件主機(jī)器件數(shù)據(jù)應(yīng)送往的從機(jī)器件地址,當(dāng)硬件主機(jī)器件要發(fā)送數(shù)據(jù)時(shí),就可以直接向指定從機(jī)器件發(fā)送數(shù)據(jù)了。I2C總線的尋址所謂硬件主器件,就是不能發(fā)送所要尋訪從器件地20I2C總線的尋址(3)起始字節(jié)起始字節(jié)是提供給沒有I2C總線接口的單片機(jī)查詢I2C總線時(shí)使用的特殊字節(jié)。于是單片機(jī)的速度與硬件接口器件的速度存在較大的差別,因此I2C總線上的數(shù)據(jù)傳送要由一個(gè)較長的起始過程加以引導(dǎo),如圖所示。起始引導(dǎo)字節(jié)I2C總線的尋址(3)起始字節(jié)起始字節(jié)是提供給沒有I2C總21I2C串行總線的接口設(shè)計(jì)I2C串行總線的接口設(shè)計(jì)分兩種情況:一種是單片機(jī)自身帶有I2C總線硬件接口,另一種是早期單片機(jī)不含I2C總線硬件接口。Philips公司推出的P89C66X系列單片機(jī)內(nèi)含I2C總線邏輯,提供了符合I2C總線規(guī)范的串行接口,具有性能穩(wěn)定、速度快、使用方便等優(yōu)點(diǎn);而Philips公司推出的P8XC552、P8XC654以及P8XC652系列單片機(jī)不具有I2C總線邏輯,在外接I2C總線接口器件,需要模擬實(shí)現(xiàn)。P89C66X系列單片機(jī)I2C總線接口

I2C總線模擬硬件接口軟件設(shè)計(jì)I2C串行總線的接口設(shè)計(jì)I2C串行總線的接口設(shè)計(jì)分兩種情況22P89C66X系列單片機(jī)I2C總線接口1.引腳設(shè)計(jì)P89C66X系列單片機(jī)有44腳PLCC和LQFP兩種封裝,其中P1.6/SCL和P1.7/SDA分別為I2C總線的時(shí)鐘線和數(shù)據(jù)線,且因?yàn)樾酒瑑?nèi)部采用漏級(jí)開路工藝,所以當(dāng)用戶將這兩個(gè)引腳用做I2C總線接口時(shí),需外接上拉電阻,如圖所示。P89C66X系列單片機(jī)I2C總線接口引腳圖P89C66X系列單片機(jī)I2C總線接口1.引腳設(shè)計(jì)P8923P89C66X系列單片機(jī)I2C總線接口2.P89C66X系列單片機(jī)I2C總線的控制寄存器P89C66X系列單片機(jī)內(nèi)部與I2C總線有關(guān)的寄存器共有4個(gè),通過對(duì)這4個(gè)寄存器的編程實(shí)現(xiàn)I2C總線功能,如表所示:名稱寄存器符號(hào)說明地址寄存器S1ADR該寄存器用于保存單片機(jī)本身的從地址數(shù)據(jù)寄存器S1DAT該寄存器用于保存發(fā)送或接收到的數(shù)據(jù)字節(jié)控制寄存器S1CON該寄存器用于I2C總線的設(shè)置狀態(tài)寄存器S1STA該寄存器用于顯示當(dāng)前I2C總線的狀態(tài)P89C66X系列單片機(jī)I2C總線接口2.P89C66X系24地址寄存器(S1ADR)該寄存器用于保存單片機(jī)本身的從地址,CPU可以對(duì)該寄存器進(jìn)行讀寫操作。其中高7位為地址本身,最低位為通用地址識(shí)別標(biāo)志GC。當(dāng)單片機(jī)作為主器件存在時(shí),該寄存器不起作用;當(dāng)單片機(jī)作為從器件存在的時(shí)候,接收到的地址字節(jié)的高7位將與S1ADR的值相比較,如果相同則接收后面的數(shù)據(jù)信息。此外,如果通用地址識(shí)別標(biāo)志GC為0,單片機(jī)不識(shí)別通用調(diào)用地址(如廣播地址);GC為1時(shí),單片機(jī)識(shí)別通用調(diào)用地址。地址寄存器(S1ADR)該寄存器用于保存單片機(jī)本身的從地址25控制寄存器(S1CON)該寄存器用于對(duì)I2C總線進(jìn)行設(shè)置,各功能位含義如下:D7D6D5D4D3D2D1D0CR2ENS1STASTOSIAACR1CR0ENS1:I2C總線使能位。當(dāng)ENS1為0時(shí),SDA和SCL輸出為高阻狀態(tài);當(dāng)ENS1為1時(shí),I2C總線使能。STA:I2C總線起始條件標(biāo)志位。當(dāng)STA為0時(shí),單片機(jī)不產(chǎn)生起始條件,當(dāng)STA為1時(shí),單片機(jī)首先利用硬件檢測I2C總線狀態(tài)。STO:I2C總線停止條件標(biāo)志位。當(dāng)STO為0時(shí),單片機(jī)不產(chǎn)生停止條件;當(dāng)STO為1時(shí),如果單片機(jī)處于主模式,則立刻向I2C總線發(fā)送停止條件,如果單片機(jī)處于從模式,則可以從錯(cuò)誤條件中恢復(fù)出來。STO位可由硬件清零??刂萍拇嫫鳎⊿1CON)該寄存器用于對(duì)I2C總線進(jìn)行設(shè)置,26控制寄存器(S1CON)SI:串行中斷標(biāo)志位。當(dāng)SI標(biāo)志位置位,并且EA和ES1都置位時(shí),產(chǎn)生一個(gè)中斷請(qǐng)求。單片機(jī)就可以對(duì)接收到的數(shù)據(jù)進(jìn)行處理,處理完成后,SI必須由軟件清零。AA:聲明應(yīng)答標(biāo)志位。當(dāng)AA為1時(shí),如果器件接收到自身的從地址(或廣播地址),或者接收到一個(gè)完整的數(shù)據(jù)字節(jié)之后,將會(huì)在SCL的響應(yīng)時(shí)鐘脈沖期間保持SDA為低電平,即發(fā)送應(yīng)答信號(hào)。當(dāng)AA為0時(shí),器件接收到一個(gè)完整的數(shù)據(jù)字節(jié)之后,在SCL的響應(yīng)時(shí)鐘脈沖期間保持SDA為高電平,即發(fā)送非應(yīng)答信號(hào)。CR0、CR1和CR2:串行時(shí)鐘速率選擇位。這3位決定了器件在主模式下的串行時(shí)鐘速率,其值與單片機(jī)工作頻率有關(guān),如下表所示。控制寄存器(S1CON)SI:串行中斷標(biāo)志位。當(dāng)SI標(biāo)志位置27控制寄存器(S1CON)CR2CR1CR0單片機(jī)時(shí)鐘頻率分頻數(shù)6MHz12MHz16MHz000234762.5256001275471224010316383.319201137751001601006.2512.51796010150100133120110100200267601110.24~6.250.49~62.50.65~55.6定時(shí)器在模式2時(shí)的重裝數(shù)值I2C總線串行時(shí)鐘速率選擇速率單位:kHz控制寄存器(S1CON)CR2CR1CR0單片機(jī)時(shí)鐘頻率分28狀態(tài)寄存器(S1STA)狀態(tài)寄存器S1STA用于顯示當(dāng)前I2C總線的狀態(tài),該寄存器是只讀的。寄存器的低3位始終為0,高5位為總線狀態(tài)編碼。總線共有26種可能的狀態(tài)。每種狀態(tài)都有一種固定的狀態(tài)編碼??偩€每進(jìn)入一個(gè)狀態(tài)都會(huì)產(chǎn)生串行中斷請(qǐng)求,并將SI置位,SI置位一個(gè)機(jī)器周期后,當(dāng)前S1STA中代碼有效。在SI由軟件復(fù)位的一個(gè)機(jī)器周期之后,此代碼仍然存在。狀態(tài)寄存器(S1STA)狀態(tài)寄存器S1STA用于顯示當(dāng)前I29P89C66X系列單片機(jī)

I2C總線接口的軟件設(shè)計(jì)(1)主模式程序設(shè)計(jì)。主模式程序設(shè)計(jì)包括以下幾項(xiàng):申請(qǐng)占用總線;發(fā)送一個(gè)數(shù)據(jù)字節(jié);向無子地址器件發(fā)送單字節(jié)數(shù)據(jù);向無子地址讀字節(jié)數(shù)據(jù);向有子地址器件發(fā)送和接收多字節(jié)數(shù)據(jù)。(2)從模式程序設(shè)計(jì)。從模式程序設(shè)計(jì)包括:設(shè)置總線;發(fā)送字節(jié)數(shù)據(jù);接收字節(jié)數(shù)據(jù)。3.P89C66X系列單片機(jī)I2C總線接口的軟件設(shè)計(jì)P89C66X系列單片機(jī)

I2C總線接口的軟件設(shè)計(jì)(1)主30I2C總線模擬硬件接口軟件設(shè)計(jì)使用硬件接口進(jìn)行I2C總線設(shè)計(jì),要使用具有I2C總線硬件接口的單片機(jī)。對(duì)通常的單片機(jī),要支持I2C總線,可以選擇外接I2C總線芯片,但這要增加系統(tǒng)的整體成本,另一種解決方案是使用軟件模擬,使用程序控制實(shí)現(xiàn)I2C總線的時(shí)序。首先可定義P1口任意兩個(gè)引腳作為單片機(jī)I2C總線的SCL和SDA,然后再編程實(shí)現(xiàn)I2C功能。下面介紹一個(gè)主方式下的虛擬I2C總線軟件包。匯編軟件包說明軟件包程序清單I2C總線模擬硬件接口軟件設(shè)計(jì)使用硬件接口進(jìn)行I2C總線設(shè)31匯編軟件包說明虛擬I2C總線操作平臺(tái)軟件包是用在單主I2C總線上,硬件接口是SCL、SDA,使用單片機(jī)的I/O口來模擬SCL/SDA總線。根據(jù)I2C總線器件的特點(diǎn),設(shè)計(jì)無子地址和有子地址子程序。(1)軟件包文件名。軟件包文件名是VI2C_ASM.ASM,是I2C總線應(yīng)用程序的底層子程序,使用前要定義好SCL和SDA。在標(biāo)準(zhǔn)80C51模式下,時(shí)鐘頻率不高于12MHz,若高于12MHz,則在程序中要相應(yīng)增加NOP指令數(shù)。使用本軟件包時(shí),只需在程序的末尾加上$INCLUDE(VI2C_ASM.ASM)即可。(2)軟件包的接口界面。IRDBYTE無子地址讀單字節(jié)數(shù)據(jù)(現(xiàn)行地址讀)IWRBYTE無子地址寫單字節(jié)數(shù)據(jù)(現(xiàn)行地址寫)IRDNBYTE有子地址讀N字節(jié)數(shù)據(jù)IWRNBYTE有子地址寫N字節(jié)數(shù)據(jù)說明:現(xiàn)行地址讀/寫是專指無子地址的器件,不需給定子地址的讀/寫操作。匯編軟件包說明虛擬I2C總線操作平臺(tái)軟件包是用在單主I2C總32匯編軟件包說明(3)軟件包占用的內(nèi)部資源。R0、R1、R2、R3、ACC、CY。(4)使用前需定義的變量、常量。變量:SLA(器件從地址)、SUBA(器件子地址)、NUMBYTE(讀/寫的字節(jié)數(shù))、ACK(位變量,從器件的應(yīng)答標(biāo)志,ACK為0表示從器件無應(yīng)答)。常量:SDA與SCL總線接口位、MTD(發(fā)送數(shù)據(jù)緩沖區(qū)首址)、MRD(接收數(shù)據(jù)緩沖區(qū)首址)。匯編軟件包說明(3)軟件包占用的內(nèi)部資源。R0、R1、R2、33軟件包程序清單(1)啟動(dòng)I2C總線子程序(2)結(jié)束總線子程序(3)發(fā)送應(yīng)答信號(hào)子程序(4)發(fā)送非應(yīng)答信號(hào)(5)檢查應(yīng)答位子程序(6)發(fā)送字節(jié)子程序(7)讀取字節(jié)子程序(8)無子地址器件寫字節(jié)數(shù)據(jù)(9)無子地址器件讀字節(jié)數(shù)據(jù)(10)向器件指定子地址寫N個(gè)數(shù)據(jù)(11)向器件指定子地址讀取N個(gè)數(shù)據(jù)軟件包程序清單(1)啟動(dòng)I2C總線子程序34啟動(dòng)I2C總線子程序START:SETBSDANOPSETBSCL ;起始條件建立時(shí)間大于4.7sNOPNOPNOPNOPNOPCLRSDANOP ;起始條件鎖定時(shí)大于4sNOPNOPNOPNOPCLRSCL ;鉗住總線,準(zhǔn)備發(fā)送數(shù)據(jù)NOPRET啟動(dòng)I2C總線子程序START:SETBSDA35結(jié)束總線子程序STOP:CLRSDANOPSETBSCL ;發(fā)送結(jié)束條件的時(shí)鐘信號(hào)NOP ;結(jié)束總線時(shí)間大于4sNOPNOPNOPNOPSETBSDA ;結(jié)束總線NOP ;保證一個(gè)終止信號(hào)和起始信號(hào)的空閑時(shí)間大于4.7sNOPNOPNOPRET結(jié)束總線子程序STOP:CLRSDA36發(fā)送應(yīng)答信號(hào)子程序MACK:CLR SDA ;將SDA置0NOPNOPSETB SCLNOP ;保持?jǐn)?shù)據(jù)時(shí)間,即SCL為高時(shí)間大于4.7sNOPNOPNOPNOPCLR SCLNOPNOPRET發(fā)送應(yīng)答信號(hào)子程序MACK:CLR SDA37發(fā)送非應(yīng)答信號(hào)MNACK:SETB SDA ;將SDA置1NOPNOPSETB SCLNOP NOP ;保持?jǐn)?shù)據(jù)時(shí)間,即SCL為高時(shí)間大于4.7sNOPNOPNOPCLRSCLNOPNOPRET發(fā)送非應(yīng)答信號(hào)MNACK:SETB SDA38檢查應(yīng)答位子程序;返回值,ACK=1時(shí)表示有應(yīng)答CACK:SETBSDANOPNOPSETBSCLCLRACKNOPNOPMOVC,SDAJCCENDSETBACK ;判斷應(yīng)答位CEND:NOPCLRSCLNOPRET檢查應(yīng)答位子程序;返回值,ACK=1時(shí)表示有應(yīng)答39發(fā)送字節(jié)子程序;字節(jié)數(shù)據(jù)放入ACC;每發(fā)送一字節(jié)要調(diào)用一次CACK子程序,取應(yīng)答位WRBYTE:MOVR0,#08HWLP:RLCA ;取數(shù)據(jù)位JCWR1SJMPWR0 ;判斷數(shù)據(jù)位WLP1:DJNZR0,WLPNOPRETWR1:SETBSDA ;發(fā)送1NOPSETBSCLNOPNOPNOPNOPNOP

NOPNOPNOPCLRSCLSJMPWLP1WR0:CLRSDA;發(fā)送0NOPSETBSCLNOPNOPNOPNOPNOPCLRSCLSJMPWLP1發(fā)送字節(jié)子程序;字節(jié)數(shù)據(jù)放入ACC40讀取字節(jié)子程序;讀出的值在ACC內(nèi);每取一字節(jié)要發(fā)送一個(gè)應(yīng)答/非應(yīng)答信號(hào)RDBYTE:MOVR0,#08HRLP:SETBSDANOPSETBSCL ;時(shí)鐘線為高,接收數(shù)據(jù)位NOPNOPMOVC,SDA ;讀取數(shù)據(jù)位MOVA,R2CLRSCL ;將SCL拉低,時(shí)間大于4.7sRLCA ;進(jìn)行數(shù)據(jù)位的處理MOVR2,ANOPNOPNOPDJNZR0,RLP ;未夠8位,再來一次RET讀取字節(jié)子程序;讀出的值在ACC內(nèi)41無子地址器件寫字節(jié)數(shù)據(jù);入口參數(shù):數(shù)據(jù)為ACC、器件從地址SLA;占用:A、R0、CYIWRBYTE:PUSHACCIWBLOOP:LCALLSTART ;起動(dòng)總線MOVA,SLALCALLWRBYTE ;發(fā)送器件從地址LCALLCACKJNBACK,RETWRB ;無應(yīng)答則跳轉(zhuǎn)POPACC ;寫數(shù)據(jù)LCALLWRBYTELCALLCACKLCALLSTOPRETRETWRB:POPACCLCALLSTOPRET無子地址器件寫字節(jié)數(shù)據(jù);入口參數(shù):數(shù)據(jù)為ACC、器件從地42無子地址器件讀字節(jié)數(shù)據(jù);入口參數(shù):器件從地址SLA;出口參數(shù):數(shù)據(jù)為ACC;占用A、R0、R2、CYIRDBYTE: LCALLSTART MOVA,SLA ;發(fā)送器件從地址 INCA LCALLWRBYTE LCALLCACK JNBACK,RETRDB LCALLRDBYTE ;進(jìn)行讀字節(jié)操作 LCALLMNACK ;發(fā)送非應(yīng)信號(hào)RETRDB: LCALLSTOP ;結(jié)束總線 RET無子地址器件讀字節(jié)數(shù)據(jù);入口參數(shù):器件從地址SLA43向器件指定子地址寫N個(gè)數(shù)據(jù);入口參數(shù):器件從地址SLA、器件子地址SUBA、發(fā)送數(shù)據(jù)緩沖區(qū)MTD、發(fā)送字節(jié)數(shù)NUMBYTE;占用:A、R0、R1、R3、CYIWRNBYTE:MOVA,NUMBYTEMOVR3,ALCALLSTART;起動(dòng)總線MOVA,SLALCALLWRBYTE;發(fā)送器件從地址LCALLCACKJNBACK,RETWRN;無應(yīng)答則退出MOVA,SUBA;指定子地址LCALLWRBYTELCALLCACKMOVR1,#MTDWRDA:MOVA,@R1LCALLWRBYTE ;開始寫入數(shù)據(jù)LCALLCACKJNBACK,IWRNBYTE;無應(yīng)答重新開始INCR1DJNZR3,WRDA ;判斷寫完沒有RETWRN:LCALLSTOPRET向器件指定子地址寫N個(gè)數(shù)據(jù);入口參數(shù):器件從地址SLA44向器件指定子地址讀取N個(gè)數(shù)據(jù);入口參數(shù):器件從地址SLA、器件子地址SUBA、接收字節(jié)數(shù)NUMBYTE;出口參數(shù):接收數(shù)據(jù)緩沖區(qū)MTD;占用:A、R0、R1、R2、R3、CYIRDNBYTE: MOVR3,NUMBYTE LCALLSTART MOVA,SLA LCALLWRBYTE ;發(fā)送器件從地址 LCALLCACK JNBACK,RETRDN MOVA,SUBA ;指定子地址 LCALLWRBYTE LCALLCACK LCALLSTART ;重新起動(dòng)總線 MOVA,SLA INCA ;準(zhǔn)備進(jìn)行讀操作 LCALLWRBYTE LCALLCACK JNBACK,IRDNBYTE MOVR1,#MRD向器件指定子地址讀取N個(gè)數(shù)據(jù);入口參數(shù):器件從地址SL45向器件指定子地址讀取N個(gè)數(shù)據(jù)RDN1: LCALLRDBYTE;讀操作開始 MOV@R1,A DJNZR3,SACK LCALLMNACK ;最后一字節(jié)發(fā)非應(yīng)答位RETRDN: LCALLSTOP ;并結(jié)束總線 RETSACK: LCALLMACK ;發(fā)應(yīng)答信號(hào) INCR1 SJMPRDN1向器件指定子地址讀取N個(gè)數(shù)據(jù)RDN1: LCAL46I2C串行總線器件帶有I2C總線接口的單片機(jī)外圍接口芯片,主要產(chǎn)品如表所示。雖然各種器件的原理和功能有很大的差異,但它們與單片機(jī)的連接是相同的,各種器件與單片機(jī)的連接如圖所示。公司名稱產(chǎn)品型號(hào)功能PhilipsPCF8553時(shí)鐘/日歷,且?guī)в?56×8RAMPCF8570256×8RAMPCF87548位I/O口MAXIMMAX127/128A/D轉(zhuǎn)換MAX517/518/519D/A轉(zhuǎn)換ATMELAT24C系列RAMNSNM24C系列RAM常用I2C總線器件連接圖I2C串行總線器件帶有I2C總線接口的單片機(jī)外圍接口芯片,47串行E2PROM典型產(chǎn)品AT24C系列的引腳設(shè)置如圖所示,其型號(hào)與容量的關(guān)系為:AT24CXX引腳圖AT24C01:128字節(jié)(128×8位);AT24C02:256字節(jié)(256×8位);AT24C04:512字節(jié)(512×8位);AT24C08:1K字節(jié)(1K×8位);AT24C16:2K字節(jié)(2K×8位)。串行E2PROM典型產(chǎn)品AT24C系列的引腳設(shè)置如圖所示,48寫入過程AT24C系列E2PROM芯片地址的固定部分為1010,A2、A1、A0引腳接高、低電平后得到確定的3位編碼,形成的7位編碼即為該器件的地址碼。單片機(jī)進(jìn)行寫操作時(shí),首先發(fā)送該器件的7位地址碼和寫方向位“0”(共8位,即一個(gè)字節(jié)),發(fā)送完后釋放SDA線并在SCL線上產(chǎn)生第9個(gè)時(shí)鐘信號(hào)。被選中的存儲(chǔ)器器件在確認(rèn)是自己的地址后,在SDA線上產(chǎn)生一個(gè)應(yīng)答信號(hào)作為響應(yīng),單片機(jī)收到應(yīng)答后就可以傳送數(shù)據(jù)了。傳送數(shù)據(jù)時(shí),單片機(jī)首先發(fā)送被寫入器件的存儲(chǔ)區(qū)的首地址。收到存儲(chǔ)器器件的應(yīng)答后,單片機(jī)就逐個(gè)發(fā)送各數(shù)據(jù)字節(jié),但每發(fā)送一個(gè)字節(jié)后都要等待應(yīng)答。AT24C系列器件片內(nèi)地址在接收到每一個(gè)數(shù)據(jù)字節(jié)地址后自動(dòng)加1,在芯片的“一次裝載字節(jié)數(shù)”(不同芯片字節(jié)數(shù)不同)限度內(nèi),只需輸入首地址。裝載字節(jié)數(shù)超過芯片的“一次裝載字節(jié)數(shù)”時(shí),數(shù)據(jù)地址“上卷”,即前面的數(shù)據(jù)將被覆蓋。當(dāng)要寫入的數(shù)據(jù)傳送完后,單片機(jī)應(yīng)發(fā)出終止信號(hào)以結(jié)束寫入操作。寫入n個(gè)字節(jié)的數(shù)據(jù)格式如下所示:S器件地址+0A寫入首地址AData1A…DatanAP寫入過程AT24C系列E2PROM芯片地址的固定部分為1049讀出過程單片機(jī)進(jìn)行讀操作時(shí),首先發(fā)送該器件的7位地址碼和寫方向位“0”(“偽寫”),發(fā)送完后釋放SDA線并在SCL線上產(chǎn)生第9個(gè)時(shí)鐘信號(hào)。被選中的存儲(chǔ)器器件在確認(rèn)是自己的地址后,在SDA線上產(chǎn)生一個(gè)應(yīng)答信號(hào)作為響應(yīng)。然后,單片機(jī)再發(fā)送要讀出器件的存儲(chǔ)區(qū)的首地址。收到存儲(chǔ)器器件的應(yīng)答后,單片機(jī)要重復(fù)一次起始信號(hào)并發(fā)出器件地址和讀方向位(“1”),收到器件應(yīng)答后就可以讀出數(shù)據(jù)字節(jié)。每讀出一個(gè)字節(jié),單片機(jī)都要回復(fù)應(yīng)答信號(hào)。當(dāng)最后一個(gè)字節(jié)數(shù)據(jù)讀完后,單片機(jī)應(yīng)返回以“非應(yīng)答”(高電平),并發(fā)出終止信號(hào)以結(jié)束讀出操作。讀出n個(gè)字節(jié)的數(shù)據(jù)格式如下所示:S器件地址+0A讀出首地址AS器件地址+1AData1A…DatanP讀出過程單片機(jī)進(jìn)行讀操作時(shí),首先發(fā)送該器件的7位地址碼和寫50應(yīng)用舉例1.程序功能從PCF87548位I/O口讀取輸入命令字,再根據(jù)命令字做如下操作。(1)若為FFH,則從PCF87548位I/O口輸入地址,再根據(jù)此地址從ATC2402中讀取數(shù)據(jù),再將讀取存儲(chǔ)器的地址和數(shù)據(jù)送SAA10644位LED顯示,LED1、LED2顯示地址,LED3、LED4顯示讀出的數(shù)據(jù)。(2)若為00H,則寫ATC2402E2PROM。(3)其他值,則進(jìn)行I/O測試。2.第(1)部分程序程序清單應(yīng)用舉例1.程序功能從PCF87548位I/O口讀取輸51實(shí)踐與思考1.按應(yīng)用實(shí)例構(gòu)建硬件系統(tǒng),編輯、下載與運(yùn)行程序,調(diào)試電路。2.設(shè)計(jì)一個(gè)校園打鈴系統(tǒng)。(1)功能要求。采用圖形LCD顯示日期、時(shí)間與星期,且有節(jié)日顯示標(biāo)志。有溫度檢測功能??稍O(shè)置30組鬧鈴時(shí)間。從AT24Wxx系列芯片中,選擇一款合適的芯片作為鬧鈴時(shí)間數(shù)據(jù)的存儲(chǔ)單元。(2)實(shí)踐要求。撰寫工程設(shè)計(jì)報(bào)告。制作電路,并調(diào)試電路。實(shí)踐與思考1.按應(yīng)用實(shí)例構(gòu)建硬件系統(tǒng),編輯、下載與運(yùn)行程序52串行接口技術(shù)I2C串行總線I2C串行總線是Philips公司提出的一種板內(nèi)芯片間串行總線。它用兩根連線即可方便地實(shí)現(xiàn)外圍器件擴(kuò)展。I2C總線上數(shù)據(jù)傳送的基本單位為字節(jié),采用高位在前的格式。主從器件之間一次傳輸?shù)臄?shù)據(jù)稱為一幀,由啟動(dòng)信號(hào)、若干個(gè)數(shù)據(jù)字節(jié)和應(yīng)答位以及停止信號(hào)組成。串行接口技術(shù)I2C串行總線53第6章串行接口技術(shù)I2C串行總線原理與應(yīng)用串行單總線原理與應(yīng)用串行模/數(shù)轉(zhuǎn)換器I2C總線鍵盤/顯示器接口芯片ZLG7290I2C總線串行8位數(shù)/模轉(zhuǎn)換器MAX517基于I2C總線的ADS1100型16位模/數(shù)轉(zhuǎn)換器第6章串行接口技術(shù)I2C串行總線原理與應(yīng)用54I2C串行總線原理與應(yīng)用I2C串行總線的組成與工作原理I2C串行總線的接口設(shè)計(jì)I2C串行總線器件應(yīng)用舉例實(shí)踐與思考I2C串行總線原理與應(yīng)用I2C串行總線的組成與工作原理55I2C串行總線的組成與工作原理

I2C串行總線的基本特性I2C總線的數(shù)據(jù)傳送I2C串行總線的組成與工作原理

56I2C串行總線的基本特性I2C總線是Philips公司推出的一種串行總線,是具備多主機(jī)系統(tǒng)所需的包括總線仲裁和高低速器件同步功能的高性能串行總線。它具有如下基本特性。I2C串行總線只有兩根雙向信號(hào)線I2C總線是一個(gè)多主機(jī)總線I2C總線的SDA和SCL是雙向的,均通過上拉電阻接正電源I2C總線的總線仲裁I2C串行總線的基本特性I2C總線是Philips公司推出的57I2C串行總線只有兩根雙向信號(hào)線一根是數(shù)據(jù)線SDA,另一根是時(shí)鐘線SCL。所有連接到I2C總線上的器件的數(shù)據(jù)線都接到SDA線上,各器件的時(shí)鐘線均接到SCL線上。I2C總線的基本結(jié)構(gòu)如圖所示。I2C串行總線只有兩根雙向信號(hào)線一根是數(shù)據(jù)線SDA,另一根58I2C總線是一個(gè)多主機(jī)總線總線上可以有一個(gè)或多個(gè)主機(jī),總線運(yùn)行由主機(jī)控制。這里所說的主機(jī)是指啟動(dòng)數(shù)據(jù)的傳送(發(fā)起始信號(hào))、發(fā)出時(shí)鐘信號(hào)、傳送結(jié)束時(shí)發(fā)出終止信號(hào)的器件。通常,主機(jī)由各種單片機(jī)或其他微處理器充當(dāng)。被主機(jī)尋訪的器件叫從機(jī),它可以是各種單片機(jī)或其他微處理器,也可以是其他器件,如存儲(chǔ)器、LED或LCD驅(qū)動(dòng)器、A/D或D/A轉(zhuǎn)換器、時(shí)鐘日歷器件等。I2C總線是一個(gè)多主機(jī)總線總線上可以有一個(gè)或多個(gè)主機(jī),總線運(yùn)59I2C總線的SDA和SCL是雙向的

均通過上拉電阻接正電源如圖所示,當(dāng)總線空閑時(shí),兩根線均為高電平。連到總線上的器件(相當(dāng)于結(jié)點(diǎn))的輸出級(jí)必須是漏極或集電極開路的,任一器件輸出的低電平,都將使總線的信號(hào)變低,即各器件的SDA及SCL都是線“與”關(guān)系。SCL線上的時(shí)鐘信號(hào)對(duì)SDA線上各器件間數(shù)據(jù)的傳輸起同步作用。SDA線上數(shù)據(jù)的起始、終止及數(shù)據(jù)的有效性均要根據(jù)SCL線上的時(shí)鐘信號(hào)來判斷。在標(biāo)準(zhǔn)I2C普通模式下,數(shù)據(jù)的傳輸率為100Kbps,高速模式下可達(dá)400Kbps。連接的器件越多,電容值越大,總線上允許的器件數(shù)以總線上的電容量不超過400pF為限。I2C總線的SDA和SCL是雙向的

均通過上拉電阻接正電源60I2C總線的總線仲裁在多主機(jī)系統(tǒng)中,可能同時(shí)有幾個(gè)主機(jī)企圖啟動(dòng)總線傳送數(shù)據(jù)。為了避免混亂,I2C總線要通過總線仲裁,以決定由哪一臺(tái)主機(jī)控制總線。首先,不同主器件(欲發(fā)送數(shù)據(jù)的器件)分別發(fā)出的時(shí)鐘信號(hào)在SCL線上“線與”產(chǎn)生系統(tǒng)時(shí)鐘:其低電平時(shí)間為周期最長的主器件的低電平時(shí)間,高電平時(shí)間則是周期最短主器件的高電平時(shí)間。仲裁的方法是:各主器件在各自時(shí)鐘的高電平期間送出各自要發(fā)送的數(shù)據(jù)到SDA線上,并在SCL的高電平期間檢測SDA線上的數(shù)據(jù)是否與自己發(fā)出的數(shù)據(jù)相同。I2C總線的總線仲裁在多主機(jī)系統(tǒng)中,可能同時(shí)有幾個(gè)主機(jī)企圖啟61I2C總線的數(shù)據(jù)傳送數(shù)據(jù)位的有效性規(guī)定起始和終止信號(hào)數(shù)據(jù)傳送格式I2C總線的時(shí)序特性I2C總線的尋址I2C總線的數(shù)據(jù)傳送數(shù)據(jù)位的有效性規(guī)定62數(shù)據(jù)位的有效性規(guī)定I2C總線進(jìn)行數(shù)據(jù)傳送時(shí),時(shí)鐘信號(hào)為高電平期間,數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定。只有在時(shí)鐘線上的信號(hào)為低電平期間,數(shù)據(jù)線上的高電平或低電工狀態(tài)才允許變化,如圖所示。數(shù)據(jù)位的有效性規(guī)定I2C總線進(jìn)行數(shù)據(jù)傳送時(shí),時(shí)鐘信號(hào)為高電平63起始和終止信號(hào)根據(jù)I2C總線協(xié)議的規(guī)定,SCL線為高電平期間,SDA線由高電平向低電平的變化表示起始信號(hào);SCL線為高電平期間,SDA線由低電平向高電平的變化表示終止信號(hào)。起始和終止信號(hào)如圖所示。起始和終止信號(hào)根據(jù)I2C總線協(xié)議的規(guī)定,SCL線為高電平期64數(shù)據(jù)傳送格式(1)字節(jié)傳送與應(yīng)答利用I2C總線進(jìn)行數(shù)據(jù)傳送時(shí),傳送的字節(jié)數(shù)是沒有限制的,但是每一個(gè)字節(jié)必須保證是8位長度。數(shù)據(jù)傳送時(shí),先傳送最高位(MSB),每一個(gè)被傳送的字節(jié)后面都必須跟隨一位應(yīng)答位(即一幀共有9位),如圖所示:應(yīng)答時(shí)序圖數(shù)據(jù)傳送格式(1)字節(jié)傳送與應(yīng)答利用I2C總線進(jìn)行數(shù)據(jù)傳65數(shù)據(jù)傳送格式(2)數(shù)據(jù)幀格式在總線的一次數(shù)據(jù)傳送過程中,可以有以下幾種組合方式:主機(jī)向從機(jī)發(fā)送數(shù)據(jù),數(shù)據(jù)傳送方向在整個(gè)傳送過程中不變。P數(shù)據(jù)A數(shù)據(jù)A0從機(jī)地址S主機(jī)在第一個(gè)字節(jié)后,立即由從機(jī)讀數(shù)據(jù)。P數(shù)據(jù)A數(shù)據(jù)A1從機(jī)地址SA在傳送過程中,當(dāng)需要改變傳送方向時(shí),起始信號(hào)和從機(jī)地址都被重復(fù)產(chǎn)生一次,但兩次讀/寫方向位正好反向。P數(shù)據(jù)A1從機(jī)地址S數(shù)據(jù)A0從機(jī)地址S注:有陰影部分表示數(shù)據(jù)由主機(jī)向從機(jī)傳送,無陰影部分則表示數(shù)據(jù)由從機(jī)向主機(jī)傳送。A表示應(yīng)答,表示非應(yīng)答(高電平)。S表示起始信號(hào),P表示終止信號(hào)。數(shù)據(jù)傳送格式(2)數(shù)據(jù)幀格式在總線的一次數(shù)據(jù)傳送過程中,可66I2C總線的時(shí)序特性為了保證數(shù)據(jù)傳送的可靠性,標(biāo)準(zhǔn)I2C總線的數(shù)據(jù)傳送有嚴(yán)格的時(shí)序要求。I2C總線的起始信號(hào)、終止信號(hào)、發(fā)送“0”及發(fā)送“1”的模擬時(shí)序如圖所示。典型信號(hào)時(shí)序圖I2C總線的時(shí)序特性為了保證數(shù)據(jù)傳送的可靠性,標(biāo)準(zhǔn)I2C總線67I2C總線的時(shí)序特性下表為I2C總線的時(shí)序特性。由表可見,除了SDA、SCL線的信號(hào)下降時(shí)間為最大值外,其他參數(shù)只有最小值。這表明在I2C總線的數(shù)據(jù)傳送中,可以利用時(shí)鐘同步機(jī)制展寬低電平周期,迫使主器件處于等待狀態(tài),使傳送速率降低。參數(shù)說明符號(hào)最小值最大值單位新的起始信號(hào)前總線必須的空閑時(shí)間TBUF4.7—s起始信號(hào)保持時(shí)間THD:STA4.0—s時(shí)鐘的低電平時(shí)間TLOW4.7—s時(shí)鐘的高電平時(shí)間THIGH4.0—s起始信號(hào)建立時(shí)間(僅對(duì)重復(fù)起始信號(hào))TSU:STA4.0—s數(shù)據(jù)建立時(shí)間TSU:DAT250—nsSDA、SCL線的信號(hào)下降時(shí)間TF—300ns終止信號(hào)建立時(shí)間TSU:STO4.7—sI2C總線的時(shí)序特性下表為I2C總線的時(shí)序特性。由表可見,除68I2C總線的尋址I2C總線協(xié)議有明確的規(guī)定:采用7位的尋址字節(jié)(尋址字節(jié)是起始信號(hào)后的第一個(gè)字節(jié))。(1)尋址字節(jié)的位定義D7~D1位組成從機(jī)的地址。D0位是數(shù)據(jù)傳送方向位,為“0”時(shí)表示主機(jī)向從機(jī)寫數(shù)據(jù),為“1”時(shí)表示主機(jī)由從機(jī)讀數(shù)據(jù)。主機(jī)發(fā)送地址時(shí),總線上的每個(gè)從機(jī)都將這7位地址碼與自己的地址進(jìn)行比較,如果相同,則認(rèn)為自己正被主機(jī)尋址,根據(jù)R/W位將自己確定為發(fā)送器或接收器。從機(jī)的地址由固定部分和可編程部分組成。在一個(gè)系統(tǒng)中可能希望接入多個(gè)相同的從機(jī),從機(jī)地址中可編程部分決定了可接入總線該類器件的最大數(shù)目。如一個(gè)從機(jī)的7位尋址位有4位是固定位,3位是可編程位,這時(shí)僅能尋址8個(gè)同樣的器件,即可以有8個(gè)同樣的器件接入到該I2C總線系統(tǒng)中。I2C總線的尋址I2C總線協(xié)議有明確的規(guī)定:采用7位的尋址69I2C總線的尋址(2)尋址字節(jié)中的特殊地址總線規(guī)定了一些特殊地址。其中兩組固定地址編號(hào)0000和1111已被保留作為特殊用途,如表所示。R/十位從機(jī)地址×0××1111×1××1111×1××0000保留×0110000為不同總線的保留地址×0100000CBUS地址×0010000起始字節(jié)10000000通用呼叫地址00000000意義地址位I2C總線的尋址(2)尋址字節(jié)中的特殊地址總線規(guī)定了一些特70I2C總線的尋址起始信號(hào)后第一字節(jié)的8位為“00000000”時(shí),稱為通用呼叫地址,即用于尋訪接到I2C總線上所有器件的地址。通用呼叫地址的用意在第二字節(jié)中加以說明。格式為:00000000A×××××××BA第二字節(jié)為06H時(shí),所有能響應(yīng)通用呼叫地址的從機(jī)器件復(fù)位,并由硬件裝入從機(jī)地址的可編程部分。能響應(yīng)命令的從機(jī)器件復(fù)位時(shí)不拉低SDA和SCL線,以免堵塞總線。第二字節(jié)為04H時(shí),所有能響應(yīng)通用呼叫地址并通過硬件來定義其可編程地址的從機(jī)器件將鎖定地址中的可編程位,但不進(jìn)行復(fù)位。如果第二字節(jié)的方向位B為“1”,則這兩個(gè)字節(jié)命令稱為硬件通用呼叫命令。也就是說這是由“硬件主器件”發(fā)出的。I2C總線的尋址起始信號(hào)后第一字節(jié)的8位為“000000071I2C總線的尋址所謂硬件主器件,就是不能發(fā)送所要尋訪從器件地址的發(fā)送器,如鍵盤掃描器等。制造這種器件時(shí)無法知道信息應(yīng)向哪兒傳送,所以,它發(fā)出硬件呼叫命令,在這第二字節(jié)的高7位說明自己的地址。接在總線上的智能器件,如單片機(jī)或其他微處理器能識(shí)別這個(gè)地址,并與之傳送數(shù)據(jù)。硬件主器件作為從機(jī)使用時(shí),也用這個(gè)地址作為從機(jī)地址。格式為:S00000000A主機(jī)地址1A數(shù)據(jù)A數(shù)據(jù)AP在系統(tǒng)中另一種選擇可能是系統(tǒng)復(fù)位時(shí)硬件主機(jī)器件工作在從機(jī)接收器方式,這時(shí)由系統(tǒng)中的主機(jī)先告訴硬件主機(jī)器件數(shù)據(jù)應(yīng)送往的從機(jī)器件地址,當(dāng)硬件主機(jī)器件要發(fā)送數(shù)據(jù)時(shí),就可以直接向指定從機(jī)器件發(fā)送數(shù)據(jù)了。I2C總線的尋址所謂硬件主器件,就是不能發(fā)送所要尋訪從器件地72I2C總線的尋址(3)起始字節(jié)起始字節(jié)是提供給沒有I2C總線接口的單片機(jī)查詢I2C總線時(shí)使用的特殊字節(jié)。于是單片機(jī)的速度與硬件接口器件的速度存在較大的差別,因此I2C總線上的數(shù)據(jù)傳送要由一個(gè)較長的起始過程加以引導(dǎo),如圖所示。起始引導(dǎo)字節(jié)I2C總線的尋址(3)起始字節(jié)起始字節(jié)是提供給沒有I2C總73I2C串行總線的接口設(shè)計(jì)I2C串行總線的接口設(shè)計(jì)分兩種情況:一種是單片機(jī)自身帶有I2C總線硬件接口,另一種是早期單片機(jī)不含I2C總線硬件接口。Philips公司推出的P89C66X系列單片機(jī)內(nèi)含I2C總線邏輯,提供了符合I2C總線規(guī)范的串行接口,具有性能穩(wěn)定、速度快、使用方便等優(yōu)點(diǎn);而Philips公司推出的P8XC552、P8XC654以及P8XC652系列單片機(jī)不具有I2C總線邏輯,在外接I2C總線接口器件,需要模擬實(shí)現(xiàn)。P89C66X系列單片機(jī)I2C總線接口

I2C總線模擬硬件接口軟件設(shè)計(jì)I2C串行總線的接口設(shè)計(jì)I2C串行總線的接口設(shè)計(jì)分兩種情況74P89C66X系列單片機(jī)I2C總線接口1.引腳設(shè)計(jì)P89C66X系列單片機(jī)有44腳PLCC和LQFP兩種封裝,其中P1.6/SCL和P1.7/SDA分別為I2C總線的時(shí)鐘線和數(shù)據(jù)線,且因?yàn)樾酒瑑?nèi)部采用漏級(jí)開路工藝,所以當(dāng)用戶將這兩個(gè)引腳用做I2C總線接口時(shí),需外接上拉電阻,如圖所示。P89C66X系列單片機(jī)I2C總線接口引腳圖P89C66X系列單片機(jī)I2C總線接口1.引腳設(shè)計(jì)P8975P89C66X系列單片機(jī)I2C總線接口2.P89C66X系列單片機(jī)I2C總線的控制寄存器P89C66X系列單片機(jī)內(nèi)部與I2C總線有關(guān)的寄存器共有4個(gè),通過對(duì)這4個(gè)寄存器的編程實(shí)現(xiàn)I2C總線功能,如表所示:名稱寄存器符號(hào)說明地址寄存器S1ADR該寄存器用于保存單片機(jī)本身的從地址數(shù)據(jù)寄存器S1DAT該寄存器用于保存發(fā)送或接收到的數(shù)據(jù)字節(jié)控制寄存器S1CON該寄存器用于I2C總線的設(shè)置狀態(tài)寄存器S1STA該寄存器用于顯示當(dāng)前I2C總線的狀態(tài)P89C66X系列單片機(jī)I2C總線接口2.P89C66X系76地址寄存器(S1ADR)該寄存器用于保存單片機(jī)本身的從地址,CPU可以對(duì)該寄存器進(jìn)行讀寫操作。其中高7位為地址本身,最低位為通用地址識(shí)別標(biāo)志GC。當(dāng)單片機(jī)作為主器件存在時(shí),該寄存器不起作用;當(dāng)單片機(jī)作為從器件存在的時(shí)候,接收到的地址字節(jié)的高7位將與S1ADR的值相比較,如果相同則接收后面的數(shù)據(jù)信息。此外,如果通用地址識(shí)別標(biāo)志GC為0,單片機(jī)不識(shí)別通用調(diào)用地址(如廣播地址);GC為1時(shí),單片機(jī)識(shí)別通用調(diào)用地址。地址寄存器(S1ADR)該寄存器用于保存單片機(jī)本身的從地址77控制寄存器(S1CON)該寄存器用于對(duì)I2C總線進(jìn)行設(shè)置,各功能位含義如下:D7D6D5D4D3D2D1D0CR2ENS1STASTOSIAACR1CR0ENS1:I2C總線使能位。當(dāng)ENS1為0時(shí),SDA和SCL輸出為高阻狀態(tài);當(dāng)ENS1為1時(shí),I2C總線使能。STA:I2C總線起始條件標(biāo)志位。當(dāng)STA為0時(shí),單片機(jī)不產(chǎn)生起始條件,當(dāng)STA為1時(shí),單片機(jī)首先利用硬件檢測I2C總線狀態(tài)。STO:I2C總線停止條件標(biāo)志位。當(dāng)STO為0時(shí),單片機(jī)不產(chǎn)生停止條件;當(dāng)STO為1時(shí),如果單片機(jī)處于主模式,則立刻向I2C總線發(fā)送停止條件,如果單片機(jī)處于從模式,則可以從錯(cuò)誤條件中恢復(fù)出來。STO位可由硬件清零??刂萍拇嫫鳎⊿1CON)該寄存器用于對(duì)I2C總線進(jìn)行設(shè)置,78控制寄存器(S1CON)SI:串行中斷標(biāo)志位。當(dāng)SI標(biāo)志位置位,并且EA和ES1都置位時(shí),產(chǎn)生一個(gè)中斷請(qǐng)求。單片機(jī)就可以對(duì)接收到的數(shù)據(jù)進(jìn)行處理,處理完成后,SI必須由軟件清零。AA:聲明應(yīng)答標(biāo)志位。當(dāng)AA為1時(shí),如果器件接收到自身的從地址(或廣播地址),或者接收到一個(gè)完整的數(shù)據(jù)字節(jié)之后,將會(huì)在SCL的響應(yīng)時(shí)鐘脈沖期間保持SDA為低電平,即發(fā)送應(yīng)答信號(hào)。當(dāng)AA為0時(shí),器件接收到一個(gè)完整的數(shù)據(jù)字節(jié)之后,在SCL的響應(yīng)時(shí)鐘脈沖期間保持SDA為高電平,即發(fā)送非應(yīng)答信號(hào)。CR0、CR1和CR2:串行時(shí)鐘速率選擇位。這3位決定了器件在主模式下的串行時(shí)鐘速率,其值與單片機(jī)工作頻率有關(guān),如下表所示??刂萍拇嫫鳎⊿1CON)SI:串行中斷標(biāo)志位。當(dāng)SI標(biāo)志位置79控制寄存器(S1CON)CR2CR1CR0單片機(jī)時(shí)鐘頻率分頻數(shù)6MHz12MHz16MHz000234762.5256001275471224010316383.319201137751001601006.2512.51796010150100133120110100200267601110.24~6.250.49~62.50.65~55.6定時(shí)器在模式2時(shí)的重裝數(shù)值I2C總線串行時(shí)鐘速率選擇速率單位:kHz控制寄存器(S1CON)CR2CR1CR0單片機(jī)時(shí)鐘頻率分80狀態(tài)寄存器(S1STA)狀態(tài)寄存器S1STA用于顯示當(dāng)前I2C總線的狀態(tài),該寄存器是只讀的。寄存器的低3位始終為0,高5位為總線狀態(tài)編碼??偩€共有26種可能的狀態(tài)。每種狀態(tài)都有一種固定的狀態(tài)編碼??偩€每進(jìn)入一個(gè)狀態(tài)都會(huì)產(chǎn)生串行中斷請(qǐng)求,并將SI置位,SI置位一個(gè)機(jī)器周期后,當(dāng)前S1STA中代碼有效。在SI由軟件復(fù)位的一個(gè)機(jī)器周期之后,此代碼仍然存在。狀態(tài)寄存器(S1STA)狀態(tài)寄存器S1STA用于顯示當(dāng)前I81P89C66X系列單片機(jī)

I2C總線接口的軟件設(shè)計(jì)(1)主模式程序設(shè)計(jì)。主模式程序設(shè)計(jì)包括以下幾項(xiàng):申請(qǐng)占用總線;發(fā)送一個(gè)數(shù)據(jù)字節(jié);向無子地址器件發(fā)送單字節(jié)數(shù)據(jù);向無子地址讀字節(jié)數(shù)據(jù);向有子地址器件發(fā)送和接收多字節(jié)數(shù)據(jù)。(2)從模式程序設(shè)計(jì)。從模式程序設(shè)計(jì)包括:設(shè)置總線;發(fā)送字節(jié)數(shù)據(jù);接收字節(jié)數(shù)據(jù)。3.P89C66X系列單片機(jī)I2C總線接口的軟件設(shè)計(jì)P89C66X系列單片機(jī)

I2C總線接口的軟件設(shè)計(jì)(1)主82I2C總線模擬硬件接口軟件設(shè)計(jì)使用硬件接口進(jìn)行I2C總線設(shè)計(jì),要使用具有I2C總線硬件接口的單片機(jī)。對(duì)通常的單片機(jī),要支持I2C總線,可以選擇外接I2C總線芯片,但這要增加系統(tǒng)的整體成本,另一種解決方案是使用軟件模擬,使用程序控制實(shí)現(xiàn)I2C總線的時(shí)序。首先可定義P1口任意兩個(gè)引腳作為單片機(jī)I2C總線的SCL和SDA,然后再編程實(shí)現(xiàn)I2C功能。下面介紹一個(gè)主方式下的虛擬I2C總線軟件包。匯編軟件包說明軟件包程序清單I2C總線模擬硬件接口軟件設(shè)計(jì)使用硬件接口進(jìn)行I2C總線設(shè)83匯編軟件包說明虛擬I2C總線操作平臺(tái)軟件包是用在單主I2C總線上,硬件接口是SCL、SDA,使用單片機(jī)的I/O口來模擬SCL/SDA總線。根據(jù)I2C總線器件的特點(diǎn),設(shè)計(jì)無子地址和有子地址子程序。(1)軟件包文件名。軟件包文件名是VI2C_ASM.ASM,是I2C總線應(yīng)用程序的底層子程序,使用前要定義好SCL和SDA。在標(biāo)準(zhǔn)80C51模式下,時(shí)鐘頻率不高于12MHz,若高于12MHz,則在程序中要相應(yīng)增加NOP指令數(shù)。使用本軟件包時(shí),只需在程序的末尾加上$INCLUDE(VI2C_ASM.ASM)即可。(2)軟件包的接口界面。IRDBYTE無子地址讀單字節(jié)數(shù)據(jù)(現(xiàn)行地址讀)IWRBYTE無子地址寫單字節(jié)數(shù)據(jù)(現(xiàn)行地址寫)IRDNBYTE有子地址讀N字節(jié)數(shù)據(jù)IWRNBYTE有子地址寫N字節(jié)數(shù)據(jù)說明:現(xiàn)行地址讀/寫是專指無子地址的器件,不需給定子地址的讀/寫操作。匯編軟件包說明虛擬I2C總線操作平臺(tái)軟件包是用在單主I2C總84匯編軟件包說明(3)軟件包占用的內(nèi)部資源。R0、R1、R2、R3、ACC、CY。(4)使用前需定義的變量、常量。變量:SLA(器件從地址)、SUBA(器件子地址)、NUMBYTE(讀/寫的字節(jié)數(shù))、ACK(位變量,從器件的應(yīng)答標(biāo)志,ACK為0表示從器件無應(yīng)答)。常量:SDA與SCL總線接口位、MTD(發(fā)送數(shù)據(jù)緩沖區(qū)首址)、MRD(接收數(shù)據(jù)緩沖區(qū)首址)。匯編軟件包說明(3)軟件包占用的內(nèi)部資源。R0、R1、R2、85軟件包程序清單(1)啟動(dòng)I2C總線子程序(2)結(jié)束總線子程序(3)發(fā)送應(yīng)答信號(hào)子程序(4)發(fā)送非應(yīng)答信號(hào)(5)檢查應(yīng)答位子程序(6)發(fā)送字節(jié)子程序(7)讀取字節(jié)子程序(8)無子地址器件寫字節(jié)數(shù)據(jù)(9)無子地址器件讀字節(jié)數(shù)據(jù)(10)向器件指定子地址寫N個(gè)數(shù)據(jù)(11)向器件指定子地址讀取N個(gè)數(shù)據(jù)軟件包程序清單(1)啟動(dòng)I2C總線子程序86啟動(dòng)I2C總線子程序START:SETBSDANOPSETBSCL ;起始條件建立時(shí)間大于4.7sNOPNOPNOPNOPNOPCLRSDANOP ;起始條件鎖定時(shí)大于4sNOPNOPNOPNOPCLRSCL ;鉗住總線,準(zhǔn)備發(fā)送數(shù)據(jù)NOPRET啟動(dòng)I2C總線子程序START:SETBSDA87結(jié)束總線子程序STOP:CLRSDANOPSETBSCL ;發(fā)送結(jié)束條件的時(shí)鐘信號(hào)NOP ;結(jié)束總線時(shí)間大于4sNOPNOPNOPNOPSETBSDA ;結(jié)束總線NOP ;保證一個(gè)終止信號(hào)和起始信號(hào)的空閑時(shí)間大于4.7sNOPNOPNOPRET結(jié)束總線子程序STOP:CLRSDA88發(fā)送應(yīng)答信號(hào)子程序MACK:CLR SDA ;將SDA置0NOPNOPSETB SCLNOP ;保持?jǐn)?shù)據(jù)時(shí)間,即SCL為高時(shí)間大于4.7sNOPNOPNOPNOPCLR SCLNOPNOPRET發(fā)送應(yīng)答信號(hào)子程序MACK:CLR SDA89發(fā)送非應(yīng)答信號(hào)MNACK:SETB SDA ;將SDA置1NOPNOPSETB SCLNOP NOP ;保持?jǐn)?shù)據(jù)時(shí)間,即SCL為高時(shí)間大于4.7sNOPNOPNOPCLRSCLNOPNOPRET發(fā)送非應(yīng)答信號(hào)MNACK:SETB SDA90檢查應(yīng)答位子程序;返回值,ACK=1時(shí)表示有應(yīng)答CACK:SETBSDANOPNOPSETBSCLCLRACKNOPNOPMOVC,SDAJCCENDSETBACK ;判斷應(yīng)答位CEND:NOPCLRSCLNOPRET檢查應(yīng)答位子程序;返回值,ACK=1時(shí)表示有應(yīng)答91發(fā)送字節(jié)子程序;字節(jié)數(shù)據(jù)放入ACC;每發(fā)送一字節(jié)要調(diào)用一次CACK子程序,取應(yīng)答位WRBYTE:MOVR0,#08HWLP:RLCA ;取數(shù)據(jù)位JCWR1SJMPWR0 ;判斷數(shù)據(jù)位WLP1:DJNZR0,WLPNOPRETWR1:SETBSDA ;發(fā)送1NOPSETBSCLNOPNOPNOPNOPNOP

NOPNOPNOPCLRSCLSJMPWLP1WR0:CLRSDA;發(fā)送0NOPSETBSCLNOPNOPNOPNOPNOPCLRSCLSJMPWLP1發(fā)送字節(jié)子程序;字節(jié)數(shù)據(jù)放入ACC92讀取字節(jié)子程序;讀出的值在ACC內(nèi);每取一字節(jié)要發(fā)送一個(gè)應(yīng)答/非應(yīng)答信號(hào)RDBYTE:MOVR0,#08HRLP:SETBSDANOPSETBSCL ;時(shí)鐘線為高,接收數(shù)據(jù)位NOPNOPMOVC,SDA ;讀取數(shù)據(jù)位MOVA,R2CLRSCL ;將SCL拉低,時(shí)間大于4.7sRLCA ;進(jìn)行數(shù)據(jù)位的處理MOVR2,ANOPNOPNOPDJNZR0,RLP ;未夠8位,再來一次RET讀取字節(jié)子程序;讀出的值在ACC內(nèi)93無子地址器件寫字節(jié)數(shù)據(jù);入口參數(shù):數(shù)據(jù)為ACC、器件從地址SLA;占用:A、R0、CYIWRBYTE:PUSHACCIWBLOOP:LCALLSTART ;起動(dòng)總線MOVA,SLALCALLWRBYTE ;發(fā)送器件從地址LCALLCACKJNBACK,RETWRB ;無應(yīng)答則跳轉(zhuǎn)POPACC ;寫數(shù)據(jù)LCALLWRBYTELCALLCACKLCALLSTOPRETRETWRB:POPACCLCALLSTOPRET無子地址器件寫字節(jié)數(shù)據(jù);入口參數(shù):數(shù)據(jù)為ACC、器件從地94無子地址器件讀字節(jié)數(shù)據(jù);入口參數(shù):器件從地址SLA;出口參數(shù):數(shù)據(jù)為ACC;占用A、R0、R2、CYIRDBYTE: LCALLSTART MOVA,SLA ;發(fā)送器件從地址 INCA LCALLWRBYTE

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論