新聞中心

單片機(jī)I2C總線介紹

作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò) 收藏
I2C是一種串行總線的外設(shè)接口,它采用同步方式串行接收或發(fā)送信息,兩個(gè)設(shè)備在同一個(gè)時(shí)鐘下工作。I2C總線只用兩根線:串行數(shù)據(jù)SDA(Serial Data)、串行時(shí)鐘SCL(Serial Clock)。
由于I2C只有一根數(shù)據(jù)線,因此其發(fā)送信息和接收信息不能同時(shí)進(jìn)行。信息的發(fā)送和接收只能分時(shí)進(jìn)行。I2C串行總線工作時(shí)傳輸速率最高可達(dá)400K bit/s。
I2C總線上的所有器件的SDA線并接在一起,所有器件的SCL線并接在一起,且SDA線和SCL線必須通過(guò)上拉電阻連接到正電源。
I2C總線的數(shù)據(jù)傳輸協(xié)議要比SPI總線復(fù)雜一些,因?yàn)镮2C總線器件沒(méi)有片選控制線,所以I2C總線數(shù)據(jù)傳輸?shù)拈_始必須由主器件產(chǎn)生通信的開始條件(SCL高電平時(shí),SDA產(chǎn)生負(fù)跳變);通信結(jié)束時(shí),由主器件產(chǎn)生通信的結(jié)束條件(SCL高電平時(shí),SDA產(chǎn)生正跳變)。
SDA線上的數(shù)據(jù)在SCL高電平期間必須保持穩(wěn)定,否則會(huì)被誤認(rèn)為開始條件或結(jié)束條件,只有在SCL低電平期間才能改變SDA線上的數(shù)據(jù)。I2C總線的數(shù)據(jù)傳輸波形圖如下圖所示。

I2C應(yīng)用實(shí)例
AT24C系列為美國(guó)ATMEL公司推出的串行COMS型E2PROM,具有功耗小,寬電壓范圍等優(yōu)點(diǎn)。下圖為AT24C系列E2PROM的引腳圖。圖中A0、A1、A2為器件地址引腳,Vss為地,Vcc為正電源,WP為寫保護(hù),SCL為串行時(shí)鐘線,SDA為串行數(shù)據(jù)線。AT24C系列E2PROM采用I2C總線,I2C總線上可掛接多個(gè)接口器件,在I2C總線上的每個(gè)器件應(yīng)有唯一的器件地址,按I2C總線規(guī)則,器件地址為7位二進(jìn)制數(shù),它與一位數(shù)據(jù)方向位構(gòu)成一個(gè)器件尋址字節(jié)。器件尋址字節(jié)的最低位(D0)為方向位(讀/寫),最高4位(D7~D4)為器件型號(hào)地址(不同的I2C總線接口器件的型號(hào)地址由廠家給定,AT24C系列E2PROM的型號(hào)地址都為1010);其余3位(D3~D1)與器件引腳地址A2A1A0相對(duì)應(yīng)。器件地址格式:
1010 A2A1A0。

對(duì)于E2PROM的片內(nèi)地址,AT24C01和AT24C02由于芯片容量可用一個(gè)字節(jié)表示,故讀寫某個(gè)單元前,先向E2PROM寫入一個(gè)字節(jié)的器件地址,再寫入一個(gè)字節(jié)的片內(nèi)地址。而AT24C04、AT24C08、AT24C16分別需要9位、10位和11位片內(nèi)地址,所以AT24C04把器件地址中的A0作為片內(nèi)地址的最高位,AT24C08把器件地址中的A1A0作為片內(nèi)地址的最高兩位,AT24C16把器件地址中的A2A1A0作為片內(nèi)地址的最高三位。凡在系統(tǒng)中把器件的引腳地址用作片內(nèi)地址后,該引腳在電路中不得使用,做懸空處理。AT24C32、AT24C64、AT24C128、AT24C256和AT24C512的片內(nèi)地址采用兩個(gè)字節(jié)。
AT24C系列E2PROM的讀寫操作原理
下列讀寫操作中SDA線上數(shù)據(jù)傳送狀態(tài)標(biāo)記注釋如下:
Start為啟動(dòng)信號(hào)(SCL為高電平,SDA產(chǎn)生負(fù)跳變),由主機(jī)發(fā)送。
Stop為結(jié)束信號(hào)(SCL為高電平,SDA產(chǎn)生正跳變),由主機(jī)發(fā)送。
AddressByte、AddreeeByte H、AddreeeByte L為地址字節(jié),指定片內(nèi)某單元地址,由主機(jī)發(fā)送。
data為數(shù)據(jù)字節(jié),由數(shù)據(jù)發(fā)送方發(fā)送。
0 為肯定應(yīng)答信號(hào),由數(shù)據(jù)接收方發(fā)送。
1 為否定應(yīng)答信號(hào),由數(shù)據(jù)接收方發(fā)送。
主機(jī)控制數(shù)據(jù)線SDA時(shí),在SCL高電平期間必須保持SDA線上的數(shù)據(jù)穩(wěn)定,否則會(huì)被誤認(rèn)為對(duì)從機(jī)的起始條件或結(jié)束條件。主機(jī)只能在SCL低電平期間改變SDA線上的數(shù)據(jù)。主機(jī)寫操作期間,用SCL的上升沿寫入數(shù)據(jù);主機(jī)讀操作期間,用SCL的下降沿讀出數(shù)據(jù)。

從AT24C系列AT24C01~AT24C16中讀n個(gè)字節(jié)的數(shù)據(jù)格式:

從AT24C系列AT24C32~AT24C512中讀n個(gè)字節(jié)的數(shù)據(jù)格式:

向AT24C系列AT24C01~AT24C16中寫n個(gè)字節(jié)的數(shù)據(jù)格式(n<=頁(yè)長(zhǎng),且n個(gè)字節(jié)不能跨頁(yè)):

向AT24C系列AT24C32~AT24C512中寫n個(gè)字節(jié)的數(shù)據(jù)格式(n<=頁(yè)長(zhǎng),且n個(gè)字節(jié)不能跨頁(yè)):


應(yīng)答信號(hào)
I2C總線數(shù)據(jù)傳送時(shí),每成功地傳送一個(gè)字節(jié)數(shù)據(jù)后,接收器都必須產(chǎn)生一個(gè)應(yīng)答信號(hào)。應(yīng)答的器件在第9個(gè)時(shí)鐘周期時(shí)將SDA線拉低,表示其已經(jīng)收到一個(gè)8位數(shù)據(jù)。
I2C器件在接收到起始信號(hào)和從器件地址之后響應(yīng)一個(gè)應(yīng)答信號(hào),如果器件已選擇了寫操作,則在每接收一個(gè)8位字節(jié)之后響應(yīng)一個(gè)應(yīng)答信號(hào)。
I2C器件工作在讀模式時(shí),在發(fā)送一個(gè)8位數(shù)據(jù)后釋放SDA線(SDA置為高電平)并監(jiān)視一個(gè)應(yīng)答信號(hào),一旦接收到主器件的應(yīng)答信號(hào),I2C器件則繼續(xù)發(fā)送數(shù)據(jù),如果主器件沒(méi)有發(fā)送應(yīng)答信號(hào)(發(fā)送非應(yīng)答信號(hào),即SDA為高電平),器件停止傳送數(shù)據(jù)且等待一個(gè)停止信號(hào)。


關(guān)鍵詞: I2C總線單片

評(píng)論


技術(shù)專區(qū)

關(guān)閉