單片機I2C總線(xiàn)介紹
由于I2C只有一根數據線(xiàn),因此其發(fā)送信息和接收信息不能同時(shí)進(jìn)行。信息的發(fā)送和接收只能分時(shí)進(jìn)行。I2C串行總線(xiàn)工作時(shí)傳輸速率最高可達400K bit/s。
I2C總線(xiàn)上的所有器件的SDA線(xiàn)并接在一起,所有器件的SCL線(xiàn)并接在一起,且SDA線(xiàn)和SCL線(xiàn)必須通過(guò)上拉電阻連接到正電源。
I2C總線(xiàn)的數據傳輸協(xié)議要比SPI總線(xiàn)復雜一些,因為I2C總線(xiàn)器件沒(méi)有片選控制線(xiàn),所以I2C總線(xiàn)數據傳輸的開(kāi)始必須由主器件產(chǎn)生通信的開(kāi)始條件(SCL高電平時(shí),SDA產(chǎn)生負跳變);通信結束時(shí),由主器件產(chǎn)生通信的結束條件(SCL高電平時(shí),SDA產(chǎn)生正跳變)。
SDA線(xiàn)上的數據在SCL高電平期間必須保持穩定,否則會(huì )被誤認為開(kāi)始條件或結束條件,只有在SCL低電平期間才能改變SDA線(xiàn)上的數據。I2C總線(xiàn)的數據傳輸波形圖如下圖所示。

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

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

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

向AT24C系列AT24C01~AT24C16中寫(xiě)n個(gè)字節的數據格式(n<=頁(yè)長(cháng),且n個(gè)字節不能跨頁(yè)):

向AT24C系列AT24C32~AT24C512中寫(xiě)n個(gè)字節的數據格式(n<=頁(yè)長(cháng),且n個(gè)字節不能跨頁(yè)):

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