標(biāo)題: 第12章 I2C總線與EEPROM 12.1 [打印本頁]
作者: 卓然塵世間 時間: 2026-4-27 15:34
標(biāo)題: 第12章 I2C總線與EEPROM 12.1
前邊學(xué)習(xí)了一種通信協(xié)議叫做UART異步串行通信,本章要學(xué)習(xí)第二種常用的通信協(xié)議I2C(重要且常用)。I2C總線是由PHILIPS公司開發(fā)的兩線式串行總線,多用于連接微處理器及其外圍芯片。I2C總線的主要特點是接口方式簡單,兩條線可以掛多個參與通信的器件,即多機模式,而且任何一個器件都可以作為主機,當(dāng)然同一時刻只能有一個主機。
從原理上來講,UART屬于異步通信,比如電腦發(fā)送給單片機,電腦只負責(zé)把數(shù)據(jù)通過TXD發(fā)送出來即可,接收數(shù)據(jù)是單片機自己的事情。而I2C屬于同步通信,SCL時鐘線負責(zé)收發(fā)雙方的時鐘節(jié)拍,SDA數(shù)據(jù)線負責(zé)傳輸數(shù)據(jù)。I2C的發(fā)送方和接收方都以SCL這個時鐘節(jié)拍為基準(zhǔn)進行數(shù)據(jù)的發(fā)送和接收。
從應(yīng)用上來講,UART通信多用于板間通信,比如單片機和電腦,這個設(shè)備和另外一個設(shè)備之間的通信。而I2C多用于板內(nèi)通信,比如單片機和本章要學(xué)的EEPROM之間的通信。
12.1 I2C時序初步認識在硬件上,I2C總線是由時鐘總線SCL和數(shù)據(jù)總線SDA兩條線構(gòu)成,連接到總線上的所有器件的SCL都連到一起,所有SDA都連到一起。I2C總線是開漏引腳并聯(lián)的結(jié)構(gòu),因此外部要添加上拉電阻。開漏電路外部加上拉電阻,就組成了線“與”的關(guān)系。總線上線“與”的關(guān)系就是說,所有接入的器件保持高電平,這條線才是高電平,而任何一個器件輸出一個低電平,那這條線就會保持低電平,因此可以做到任何一個器件都可以拉低電平,也就是任何一個器件都可以作為主機,如圖12-1所示,添加了R63和R64兩個上拉電阻。
12-1.png (5.96 KB, 下載次數(shù): 0)
下載附件
2026-4-27 15:33 上傳
圖12-1 I2C總線的上拉電阻
雖然說任何一個設(shè)備都可以作為主機,但絕大多數(shù)情況下都是用單片機來做主機,而總線上掛的多個器件,每一個都像電話機一樣有自己唯一的地址,在信息傳輸?shù)倪^程中,通過這唯一的地址就可以正常識別到屬于自己的信息。
學(xué)習(xí)UART串行通信的時候,知道了通信流程分為起始位、數(shù)據(jù)位、停止位這三部分,同理在I2C中也有起始信號、數(shù)據(jù)傳輸和停止信號,如圖12-2所示。
12-2.png (8.06 KB, 下載次數(shù): 0)
下載附件
2026-4-27 15:33 上傳
圖12-2 I2C時序流程圖
從圖上可以看出來,I2C和UART時序流程有相似性,也有一定的區(qū)別。UART每個字節(jié),都有一位起始位、8位數(shù)據(jù)位、1位停止位。而I2C分為起始信號、數(shù)據(jù)傳輸部分、停止信號。其中數(shù)據(jù)傳輸部分,可以一次傳輸很多個字節(jié),字節(jié)數(shù)是不受限制的,而每個字節(jié)的數(shù)據(jù)最后額外跟了一位,這一位叫做應(yīng)答位,通常用ACK表示,類似于UART的停止位。
下面通過和UART通信做比較的方式把I2C通信時序進行剖析。首先要理解,UART通信雖然用了TXD和RXD兩根線,但是實際一次通信中,1條線就可以完成,2條線是把發(fā)送和接收分開而已。而I2C每次通信,不管是發(fā)送還是接收,必須2條線都參與工作才能完成,為了更方便的看出來每一位的傳輸流程,把圖12-2改進成圖12-3。
12-3.png (8.2 KB, 下載次數(shù): 0)
下載附件
2026-4-27 15:32 上傳
圖12-3 I2C通信流程解析
(1)起始信號:UART通信是從一直持續(xù)的高電平出現(xiàn)一個低電平標(biāo)志起始位;而I2C通信的起始信號的定義是SCL為高電平期間,SDA由高電平向低電平變化產(chǎn)生一個下降沿,表示起始信號,如圖12-3中的Start部分所示。
(2)數(shù)據(jù)傳輸:首先,UART是低位在前,高位在后;而I2C通信是高位在前,低位在后。其次,UART通信數(shù)據(jù)位是固定長度,波特率分之一,一位一位固定時間發(fā)送完畢就可以了。而I2C沒有固定波特率,但是有時序的要求,要求當(dāng)SCL在低電平的時候,SDA允許變化,也就是說,發(fā)送方必須先保持SCL是低電平,才可以改變數(shù)據(jù)線SDA,輸出要發(fā)送的當(dāng)前數(shù)據(jù)的一位;而當(dāng)SCL在高電平的時候,SDA絕對不可以變化,因為這個時候,接收方要來讀取當(dāng)前SDA的電平信號是0還是1,要保證SDA的穩(wěn)定,如圖12-3中的每一位數(shù)據(jù)的變化,都是在SCL的低電平位置。8位數(shù)據(jù)位后邊跟著的是一位應(yīng)答位,應(yīng)答位后邊還要具體介紹。
(3)停止信號:UART通信的停止位是一位固定的高電平信號;而I2C通信停止信號的定義是SCL為高電平期間,SDA由低電平向高電平變化產(chǎn)生一個上升沿,表示結(jié)束信號,如圖12-3中的Stop部分所示。
作者: joyb 時間: 2026-4-28 08:09
復(fù)制粘貼
| 歡迎光臨 (http://www.denmoz.com/bbs/) |
Powered by Discuz! X3.1 |