IIC工作時序總結(jié)_第1頁
IIC工作時序總結(jié)_第2頁
IIC工作時序總結(jié)_第3頁
IIC工作時序總結(jié)_第4頁
IIC工作時序總結(jié)_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1. 概述:I 2C 是 Inter-IntegratedCircuit 的縮寫,發(fā)音為 eye-squaredcee or eye-two-cee , 它是一種兩線接口。I 2C 只是用兩條雙向的線,一條 Serial Data Line (SDA),另一條 Serial Clock (SCL) 。SCL:上升沿將數(shù)據(jù)輸入到每個 EEPRO器M 件中;下降沿驅(qū)動 EEPROM 器件輸出數(shù)據(jù)。 ( 邊沿觸發(fā) )SDA:雙向數(shù)據(jù)線,為 OD門,與其它任意數(shù)量的 OD與 OC門成 線與 關(guān)系。2. 輸出級每一個 I2C 總線器件內(nèi)部的 SDA、 SCL引腳電路結(jié)構(gòu)都是一樣的,引腳的輸出驅(qū)動與輸入緩

2、沖連在一起。其中輸出為漏極開路的場效應(yīng)管,輸入緩沖為一只高輸入阻抗的同相器,這種電路具有兩 個特點:1) 由于 SDA、SCL為漏極開路結(jié)構(gòu) (OD),因此它們必須接有上拉電 阻,阻值的大小常為 1k8, 4k7 and 10k ,但 1k8 時性能最好; 當總線空閑時,兩根線均為高電平。連到總線上的任一器件輸出 的低電平,都將使總線的信號變低,即各器件的 SDA及 SCL都是 線與關(guān)系。2)引腳在輸出信號的同時還將引腳上的電平進行檢測,檢測是否 與剛才輸出一致,為 時鐘同步 和總線仲裁 提供了硬件基礎(chǔ)。3. 主設(shè)備與從設(shè)備系統(tǒng)中的所有外圍器件都具有一個 7 位的從器件專用地址碼 , 其中高

3、4 位為器件類型,由生產(chǎn)廠家制定,低 3 位為器件引腳定 義地址,由使用者定義。主控器件通過地址碼建立多機通信的機 制,因此 I2C 總線省去了外圍器件的片選線,這樣無論總線上掛 接多少個器件,其系統(tǒng)仍然為簡約的二線結(jié)構(gòu)。終端掛載在總線 上,有主端和從端之分,主端必須是帶有 CPU的邏輯模塊,在同 一總線上同一時刻使能有一個主端,可以有多個從端,從端的數(shù) 量受地址空間和總線的最大電容 400pF 的限制。o 主端主要用來驅(qū)動 SCL line ;o 從設(shè)備對主設(shè)備產(chǎn)生響應(yīng);二者都可以傳輸數(shù)據(jù),但是從設(shè)備不能發(fā)起傳輸, 且傳輸是受到主設(shè)備控制的4. 速率:普通模式: 100kHz;快速模式: 4

4、00kHz;高速模式: 3.4MHz;沒有任何必要使用高速 SCL,將 SCL保持在 100k 或以下,然后忘了 它吧。一、協(xié)議1. 空閑狀態(tài)I2C 總線總線的 SDA和 SCL兩條信號線同時處于高電平時, 規(guī)定為總線的空閑狀態(tài)。此時各個器件的輸出級場效應(yīng)管均處在截止狀態(tài),即釋放總線,由兩條信號線各自的上拉電阻把電平拉高。2. 起始位與停止位的定義:起始信號:當 SCL為高期間, SDA由高到低的跳變;啟動信號是一 種電平跳變時序信號,而不是一個電平信號。停止信號:當 SCL為高期間, SDA由低到高的跳變;停止信號也是 一種電平跳變時序信號,而不是一個電平信號。3. ACK發(fā)送器每發(fā)送一個字

5、節(jié), 就在時鐘脈沖 9 期間釋放數(shù)據(jù)線,由接收 器反饋一個應(yīng)答信號。 應(yīng)答信號為低電平時,規(guī)定為有效應(yīng)答位( ACK 簡稱應(yīng)答位),表示接收器已經(jīng)成功地接收了該字節(jié);應(yīng)答信號為高電 平時,規(guī)定為非應(yīng)答位( NAC)K ,一般表示接收器接收該字節(jié)沒有成 功。 對于反饋有效應(yīng)答位 ACK的要求是, 接收器在第 9個時鐘脈沖之前的低電平期間將 SDA線拉低,并且確保在該時鐘的高電平期間為 穩(wěn)定的低電平 。 如果接收器是主控器,則在它收到最后一個字節(jié)后, 發(fā)送一個 NACK信號,以通知被控發(fā)送器結(jié)束數(shù)據(jù)發(fā)送, 并釋放 SDA線, 以便主控接收器發(fā)送一個停止信號 P。如下圖邏輯分析儀的采樣結(jié)果: 釋放總

6、線后,如果沒有應(yīng)答信號, sda 應(yīng)該一直持續(xù)為高電平,但是如圖中藍色虛線部分所示,它被拉 低為低電平,證明收到了應(yīng)答信號。這里面給我們的兩個信息是: 1) 接收器在 SCL的上升沿到來之前的低 電平期間拉低 SDA;2) 應(yīng)答信號一直保持到 SCL的下降沿結(jié)束;正如前文紅色標識所指出的那樣。4. 數(shù)據(jù)的有效性:I2C 總線進行數(shù)據(jù)傳送時,時鐘信號為高電平期間,數(shù)據(jù)線上的數(shù)據(jù) 必須保持穩(wěn)定, 只有在時鐘線上的信號為低電平期間, 數(shù)據(jù)線上的高 電平或低電平狀態(tài)才允許變化。我的理解:雖然只要求在高電平期間保持穩(wěn)定, 但是要有一個提前量, 也就是數(shù)據(jù)在 SCL的上升沿到來之前就需準備好,因為在前面

7、I2C 總線之 ( 一)- 概述一文中已經(jīng)指出,數(shù)據(jù)是在 SCL的上升沿打入到 器件(EEPROM中) 的。5. 數(shù)據(jù)的傳送:在 I2C 總線上傳送的每一位數(shù)據(jù)都有一個時鐘脈沖相對應(yīng) (或同步 控制),即在 SCL串行時鐘的配合下,在 SDA上逐位地串行傳送每一位 數(shù)據(jù)。數(shù)據(jù)位的傳輸是邊沿觸發(fā)。二、工作過程總線上的所有通信都是由主控器引發(fā)的。 在一次通信中, 主控器與 被控器總是在扮演著兩種不同的角色。1. 主設(shè)備向從設(shè)備發(fā)送數(shù)據(jù)主設(shè)備發(fā)送起始位, 這會通知總線上的所有設(shè)備傳輸開始了, 接下 來主機發(fā)送設(shè)備地址,與這一地址匹配的 slave 將繼續(xù)這一傳輸過程, 而其它 slave 將會忽略接

8、下來的傳輸并等待下一次傳輸?shù)拈_始。 主設(shè)備 尋址到從設(shè)備后,發(fā)送它所要讀取或?qū)懭氲膹脑O(shè)備的內(nèi)部寄存器地址; 之后,發(fā)送數(shù)據(jù)。數(shù)據(jù)發(fā)送完畢后,發(fā)送停止位:寫入過程如下:發(fā)送起始位發(fā)送從設(shè)備的地址和讀 / 寫選擇位;釋放總線,等到 EEPROM拉低總 線進行應(yīng)答; 如果 EEPRO接M 收成功, 則進行應(yīng)答; 若沒有握手成功 或者發(fā)送的數(shù)據(jù)錯誤時 EEPROM不產(chǎn)生應(yīng)答,此時要求重發(fā)或者終止。 發(fā)送想要寫入的內(nèi)部寄存器地址; EEPROM對其發(fā)出應(yīng)答; 發(fā)送數(shù)據(jù) 發(fā)送停止位 .EEPROM收到停止信號后,進入到一個內(nèi)部的寫入周期,大概需要 10ms,此間任何操作都不會被 EEPROM響應(yīng); ( 因

9、此以這種方式的兩 次寫入之間要插入一個延時,否則會導(dǎo)致失敗,博主曾在這里小坑了一下)詳細:需要說明的是: 主控器通過發(fā)送地址碼與對應(yīng)的被控器建立了通 信關(guān)系, 而掛接在總線上的其它被控器雖然同時也收到了地址碼, 但因 為與其自身的地址不相符合,因此提前退出與主控器的通信;2. 主控器讀取數(shù)據(jù)的過程:讀的過程比較復(fù)雜, 在從 slave 讀出數(shù)據(jù)前, 你必須先要告訴它哪個內(nèi)部寄存器是你想要讀取的, 因此必須先對其進行寫入 (dummyw rite)發(fā)送起始位; 發(fā)送 slave 地址 +write bit set 發(fā)送內(nèi)部寄存器地址;重新發(fā)送起始位,即 restart ;重新發(fā)送 slave 地

10、址 +read bit set ;讀取數(shù)據(jù)主機接收器在接收到最后一個字節(jié)后,也不會發(fā)出ACK信號。于是,從機發(fā)送器釋放 SDA線,以允許主機發(fā)出 P 信號結(jié)束傳輸。 發(fā)送停止位詳細:為了加深對 I2C 總線的理解,用 C 語言模擬 IIC 總線,邊看源代碼邊讀波形: 如下圖所示的寫操作的時序圖:讀時序的理解同理。對于時序不理解的朋友請參考“I2C 總線之 ( 二)- 時序完整的程序如下:#include#define uchar unsigned char #define uint unsigned int #define write_ADD 0xa0 #define read_ADD 0xa

11、1 uchar a;sbit SDA=P2 0;sbit SCL=P2 1;void SomeNop(); / 短延時void init(); / 初始化void check_ACK(void ) ;void I2CStart( void );void I2cStop( void );void write_byte(uchar dat);/ 寫字節(jié)void delay( uint z);uchar read_byte(); / 讀字節(jié)void write(uchar addr,uchar dat); / 指定地址寫 uchar read(uchar addr);/ 指定地址讀bit flag;

12、 / 應(yīng)答標志位void main()init();write_add( 5, 0xaa); / 向地址 5 寫入 0xaa delay( 10);/ 延時, 否則被坑呀!P1=read_add( 5); / 讀取地址 5 的值 while (1);/*void delay() / 簡單延時函數(shù) ; /*void start() / 開始信號 SCL 在高電平期間, SDA一個下降沿則表示啟動 信號sda= 1; / 釋放 SDA總線delay();scl= 1;delay();sda= 0;delay();/*void stop() / 停止 SCL 在高電平期間, SDA一個上升沿則表示停

13、止信號 sda= 0; delay(); scl= 1; delay();sda= 1;delay(); /*void respons()/ 應(yīng)答 SCL 在高電平期間, SDA被從設(shè)備拉為低電平表示應(yīng)答uchar i;scl= 1; delay();/ 至多等待 250 個 CPU時鐘周期 while (sda= 1)&(i 250)i+;scl= 0;delay(); /*void init() / 總線初始化 將總線都拉高一釋放總線 發(fā)送啟動信號前,要 先初始化總線。即總有檢測到總線空閑才開始發(fā)送啟動信號sda= 1; delay();scl= 1;delay(); /*void wri

14、te_byte(uchar date) / 寫一個字節(jié)uchar i,temp; temp=date;for (i= 0;i 8;i+)temp=temp 1;scl= 0;/ 拉低 SCL,因為只有在時鐘信號為低電平期間按數(shù)據(jù)線上 的高低電平狀態(tài)才允許變化;并在此時和上一個循環(huán)的 scl=1 一起形成一個 上升沿delay(); sda=CY; delay();scl= 1;/ 拉高 SCL,此時 SDA上的數(shù)據(jù)穩(wěn)定delay();scl= 0; / 拉低 SCL,為下次數(shù)據(jù)傳輸做好準備delay();sda= 1; / 釋放 SDA總線,接下來由從設(shè)備控制,比如從設(shè)備接收完數(shù)據(jù) 后,在 S

15、CL為高時,拉低 SDA作為應(yīng)答信號delay(); /*uchar read_byte() / 讀一個字節(jié)uchar i,k;scl= 0; delay(); sda= 1; delay();for (i= 0;i 8;i+)scl= 1;/ 上升沿時, IIC 設(shè)備將數(shù)據(jù)放在 sda 線上,并在高電平期 間數(shù)據(jù)已經(jīng)穩(wěn)定,可以接收啦delay();k=(k 1)|sda;scl= 0;/ 拉低 SCL,使發(fā)送端可以把數(shù)據(jù)放在 SDA上 delay();return k;/*void write_add(uchar address,uchar date) / 任意地址寫一個字節(jié) start(); / 啟動 write_byte( 0xa0); / 發(fā)送從設(shè)備地址 respons(); / 等待從設(shè)備的響應(yīng) write_byte(address); / 發(fā)出芯片內(nèi)地址 respons(); / 等待從設(shè)備的響應(yīng) write_byte(date); / 發(fā)送數(shù)據(jù) respons(); / 等待從設(shè)備的響應(yīng) stop(); / 停止/*uchar read_add(uchar address) / 讀取一個字節(jié)uchar date;

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論