




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、I2C總線與EEPROMI2C簡介 I2C總線是Philips公司開發的一種雙向兩線串行總線,多用于連接微處理器及其外圍芯片。主要特點是接口方式簡單,兩條線可以掛多個參與通信的器件,即多機模式,任何一個器件都可以作為主機,但同一時刻只能有一個主機。 UART屬于異步通信,I2C屬于同步通信。 傳輸速率:標準模式下為100kbit/s;快速模式下為 400kbit/s;高速模式下為3.4Mbit/s。I2C簡介 I2C總線采用二線制傳輸,一根是數據線SDA(Serial Data Line),另一根是時鐘線SCL(serial clock line),連接到總線上的所有I2C器件的SCL連在一起
2、,所有SDA連在一起,每一個器件具有一個唯一的地址。 I2C簡介 I2C 總線是開漏引腳并聯的結構,因此外部要接上拉電阻。對于開漏電路外部加上拉電阻,就組成了線“與”的關系。總線上線“與”的關系就是說,所有接入的器件保持高電平,這條線才是高電平,而任何一個器件輸出一個低電平,那這條線就會保持低電平,因此可以做到任何一個器件都可以拉低電平,也就是任何一個器件都可以作為主機。 I2C簡介 I2C總線是一個多主機總線,總線上可以有一個或多個主機(或稱主控制器件),總線運行由主機控制。 主機是指啟動數據的傳送(發起始信號)、發出時鐘信 號、發出終止信號的器件。通常,主機由單片機或其它 微處理器擔任。
3、被主機訪問的器件叫從機(或稱從器件),它可以是其 它單片機,或者其他外圍芯片,如:A/D、D/A、LED 或LCD驅動、串行存儲器芯片。 I2C簡介 I2C總線支持多主(multi-mastering)和主從(master-slave)兩 種工作方式。 多主方式下,I2C總線上可以有多個主機。I2C總線需通 過硬件和軟件仲裁來確定主機對總線的控制權。 主從工作方式時,系統中只有一個主機,總線上的其它 器件均為從機(具有I2C總線接口),只有主機能對從機 進行讀寫訪問,因此,不存在總線的競爭等問題。在主 從方式下,I2C總線的時序可以模擬 ,I2C總線的使用不 受主機是否具有I2C總線接口的制約
4、。80C51 單片機本身 不具有I2C總線接口,可以用其I/O口線模擬I2C總線 。I2C簡介主機從機主從工作方式:I2C簡介 I2C總線上的所有器件連接在一個公共的總線上,主器 件在進行數據傳輸前要選擇需要通信的從器件,即進行 總線尋址。 I2C總線上所有器件都需要有惟一的地址,由器件地址 和引腳地址兩部分組成,共7位。器件地址出廠時就已 經固定,不可更改。引腳地址由I2C器件的地址引腳 (A2,A1,A0)決定。地址位與一個方向位共同構成I2C總線器件尋址字節,尋址字節的格式如下:A6A5A4A3A2A1A0D7D6D5D4D3D2D1D0WR/I2C簡介具有I2C硬件接口的常用器件類別型
5、號A6A3E2PROMPCF85821010AT24C021010AT24C041010AT24C081010AT24C161010I/O口PCF85740100PCF8574A0111LED/LCD驅動控制器SAA10640111PCF85760111PCF8578/790111I2C簡介器件地址:0b1010000 0 x50 AT24C02是Atmel公司生產的具有I2C總線接口功能的串行E2PROM器件。容量大小為2kbits,即256個字節。 SDA、SCL: I2C總線接口。A2A0:地址引腳。WP:寫保護。當接低電平時,可進行正常讀/寫操作;接高電平時,只能讀取數據。 I2C通信
6、時序 I2C總線規定了嚴格的數據通信格式,所有具有I2C總線接口的器件都必須遵守。 I2C總線上主機與從機之間一次傳送的數據稱為一幀,由起始信號、數據傳輸部分和停止信號組成。數據傳送的基本單元為一位數據。對比UART的數據幀格式。起始信號:I2C 通信的起始信號的定義是 SCL 為高電平期間, SDA 由高電平向低電平變化產生一個下降沿。空閑狀態:I2C總線的SDA和SCL兩條信號線同時處于高電平時,規定為總線的空閑狀態。此時各個器件的輸出級場效應管均處在截止狀態,即釋放總線,由兩條信號線各自的上拉電阻把電平拉高。停止信號:而 I2C 通信停止信號的定義是 SCL 為高電平期間, SDA 由低
7、電平向高電平變化產生一個上升沿。數據傳輸:時鐘線SCL的一個時鐘周期只能傳輸一位數據,即在SCL串行時鐘的配合下,在SDA上逐位地串行傳送每一位數據。在SCL時鐘線為高電平期間內,數據線SDA上的數據必須穩定。當SCL時鐘線變為低電平時,數據線SDA的狀態才能改變。 I2C協議規定,在每個字節傳送完畢后,必須有一個應答位。應答位的時鐘脈沖由主機產生。在應答時鐘有效期間,發送設備把數據線SDA置為高電平;接收設備必須把數據線SDA置為低電平,并且在此期間保持低電平狀態,以便產生有效的應答信號。I2C尋址模式主機發送起始信號,通知總線上的所有從機數據傳輸開始了,接下來主機發送從機地址,與這一地址匹
8、配的從機將繼續這一傳輸過程,而其它從機將會忽略接下來的傳輸并等待下一次傳輸的開始。主機尋址到從機后,發送它所要讀取或寫入從機的內部寄存器地址;之后,發送或接收數據。數據接收或發送完畢后,發送停止位。AT24C02仿真電路:器件地址為0 x50參考程序:#include #include #define I2CDelay() _nop_();_nop_();_nop_();_nop_();sbit I2C_SCL = P37;sbit I2C_SDA = P36;sbit LED1=P10;sbit LED2=P15;bit I2CAddressing(unsigned char addr);v
9、oid main()bit ack1,ack2; ack1 = I2CAddressing(0 x50); /查詢地址為 0 x50 的器件if (ack1=1)LED1=0;elseLED1=1; ack2 = I2CAddressing(0 x62); /查詢地址為 0 x62 的器件if (ack2=1)LED2=0;elseLED2=1;while (1);/* 產生總線起始信號 */void I2CStart()I2C_SDA = 1; /首先確保 SDA、 SCL 都是高電平I2C_SCL = 1;I2CDelay();I2C_SDA = 0; /先拉低 SDAI2CDelay()
10、;I2C_SCL = 0; /再拉低 SCL/* 產生總線停止信號 */void I2CStop()I2C_SCL = 0; /首先確保 SDA、 SCL 都是低電平I2C_SDA = 0;I2CDelay();I2C_SCL = 1; /先拉高 SCLI2CDelay();I2C_SDA = 1; /再拉高 SDAI2CDelay();/* I2C 總線寫操作, dat-待寫入字節,返回值-從機應答位的值 */bit I2CWrite(unsigned char dat)bit ack; /用于暫存應答位的值unsigned char mask; /用于探測字節內某一位值的掩碼變量for (
11、mask=0 x80; mask!=0; mask=1) /從高位到低位依次進行if (mask&dat) = 0) /該位的值輸出到 SDA 上I2C_SDA = 0;elseI2C_SDA = 1;I2CDelay(); I2C_SCL = 1; /拉高 SCLI2CDelay();I2C_SCL = 0; /再拉低 SCL,完成一個位周期I2C_SDA = 1; /8 位數據發送完后,主機釋放 SDA, 以檢測從機應答I2CDelay();I2C_SCL = 1; /拉高 SCLack = I2C_SDA; /讀取此時的 SDA 值,即為從機的應答值I2CDelay();I2C_
12、SCL = 0; /再拉低 SCL 完成應答位,并保持住總線return ack; /返回從機應答值/* I2C 尋址函數,即檢查地址為 addr 的器件是否存在,返回值-從器件應答值 */bit I2CAddressing(unsigned char addr)bit ack;I2CStart(); /產生起始位,即啟動一次總線操作ack = I2CWrite(addr4.0s4.7s4.0s4.7s4.0s4.0sSCL/P1.0SDA/P1.1SCL/P1.0SDA/P1.1SDA/P1.1SCL/P1.0SCL/P1.0SDA/P1.1(a)啟動(b)終止(c)發送0/發送應答位(d)
13、發送1/發送非應答位EEPROM單字節讀寫時序p 向EEPROM寫入一個字節數據的流程單片機發出起始信號,啟動I2C總線;發送首字節,高7位為E2PROM的器件地址;最低位為0,表示單片機將通過I2C總線向E2PROM寫入數據,接收E2PROM的應答信號;發送待寫入字節數據的存儲地址,接收E2PROM的應答信號;發送待寫入字節數據,接收E2PROM的應答信號;單片機發出停止信號,結束總線。p從EEPROM 讀取一個字節數據流程 單片機發出起始信號,啟動I2C總線;接著發送首字節,高7位為E2PROM的器件地址,最低位為0,并接收E2PROM的應答信號;發送要讀取數據的存儲單元地址,接收E2PR
14、OM的應答信號;重新發送E2PROM的器件地址,但最低位為1;單片機讀取E2PROM發回的一個字節的數據,并發出一個非應答信號;單片發出停止信號,結束總線。讀寫一個字節數據的要點:p單片機是主機,EEPROM是從機;p無論是讀是寫, 起始信號、停止信號、SCL 信號始終都是由主機控制;p寫的時候應答信號由從機給出,表示從機是否正確接收了數據;讀的時候應答信號則由主機給出,表示是否繼續讀下去。應答原則:誰接收誰應答。簡述單片機通過I2C總線向E2PROM寫入一個字節數據的操作時序簡述單片機通過I2C總線從E2PROM讀取一個字節數據的操作時序;EEPROM單字節數據讀寫仿真電路EEPROM單字節
15、數據讀寫參考程序I2C.c:#include #include #define I2CDelay() _nop_();_nop_();_nop_();_nop_();sbit I2C_SCL = P37;sbit I2C_SDA = P36;/* 產生總線起始信號 */void I2CStart()I2C_SDA = 1; /首先確保 SDA、 SCL 都是高電平I2C_SCL = 1;I2CDelay();I2C_SDA = 0; /先拉低 SDAI2CDelay();I2C_SCL = 0; /再拉低 SCL/* 產生總線停止信號 */void I2CStop()I2C_SCL = 0;
16、/首先確保 SDA、 SCL 都是低電平I2C_SDA = 0;I2CDelay();I2C_SCL = 1; /先拉高 SCLI2CDelay();I2C_SDA = 1; /再拉高 SDAI2CDelay();/* I2C 總線寫操作, dat-待寫入字節,返回值-從機應答位的值 */bit I2CWrite(unsigned char dat)bit ack; /用于暫存應答位的值unsigned char mask; /用于探測字節內某一位值的掩碼變量for (mask=0 x80; mask!=0; mask=1) /從高位到低位依次進行if (mask&dat) = 0)
17、/該位的值輸出到 SDA 上I2C_SDA = 0;elseI2C_SDA = 1;I2CDelay();I2C_SCL = 1; /拉高 SCLI2CDelay(); I2C_SCL = 0; /再拉低 SCL,完成一個位周期I2C_SDA = 1; /8 位數據發送完后,主機釋放 SDA,以檢測從機應答I2CDelay();I2C_SCL = 1; /拉高 SCLack = I2C_SDA; /讀取此時的 SDA 值,即為從機的應答值I2CDelay();I2C_SCL = 0; /再拉低 SCL 完成應答位,并保持住總線return (ack); /應答值取反以符合通常的邏輯:/0=不存
18、在或忙或寫入失敗, 1=存在且空閑或寫入成功/* I2C 總線讀操作,并發送非應答信號,返回值-讀到的字節 */unsigned char I2CReadNAK()unsigned char mask;unsigned char dat;I2C_SDA = 1; /首先確保主機釋放 SDAfor (mask=0 x80; mask!=0; mask=1) /從高位到低位依次進行I2CDelay();I2C_SCL = 1; /拉高 SCLif(I2C_SDA = 0) /讀取 SDA 的值dat &= mask; /為 0 時, dat 中對應位清零elsedat |= mask; /
19、為 1 時, dat 中對應位置 1 I2CDelay();I2C_SCL = 0; /再拉低 SCL,以使從機發送出下一位I2C_SDA = 1; /8 位數據發送完后,拉高 SDA,發送非應答信號I2CDelay();I2C_SCL = 1; /拉高 SCLI2CDelay();I2C_SCL = 0; /再拉低 SCL 完成非應答位,并保持住總線return dat;I2CDelay();I2C_SCL = 0; /再拉低 SCL,以使從機發送出下一位I2C_SDA = 1; /8 位數據發送完后,拉高 SDA,發送非應答信號I2CDelay();I2C_SCL = 1; /拉高 SCL
20、I2CDelay();I2C_SCL = 0; /再拉低 SCL 完成非應答位,并保持住總線return dat;/* I2C 總線讀操作,并發送應答信號,返回值-讀到的字節 */unsigned char I2CReadACK()unsigned char mask;unsigned char dat;I2C_SDA = 1; /首先確保主機釋放 SDAfor (mask=0 x80; mask!=0; mask=1) /從高位到低位依次進行I2CDelay();I2C_SCL = 1; /拉高 SCLif(I2C_SDA = 0) /讀取 SDA 的值dat &= mask; /為
21、 0 時, dat 中對應位清零elsedat |= mask; /為 1 時, dat 中對應位置 1 I2CDelay();I2C_SCL = 0; /再拉低 SCL,以使從機發送出下一位 I2C_SDA = 0; /8 位數據發送完后,拉低 SDA,發送應答信號I2CDelay();I2C_SCL = 1; /拉高 SCLI2CDelay();I2C_SCL = 0; /再拉低 SCL 完成應答位,并保持住總線return dat;Test.c:#include sbit bai=P20;sbit shi=P21;sbit ge=P22;extern void I2CStart();ex
22、tern void I2CStop();extern unsigned char I2CReadNAK();extern bit I2CWrite(unsigned char dat);unsigned char E2ReadByte(unsigned char addr);void E2WriteByte(unsigned char addr, unsigned char dat);void display(void);void delay(unsigned int time);unsigned char code dis_code=0 xC0, 0 xF9, 0 xA4, 0 xB0, 0
23、 x99, 0 x92, 0 x82, 0 xF8,0 x80, 0 x90;unsigned char str3;void main()unsigned char dat;dat = E2ReadByte(0 x02); /讀取指定地址上的一個字節str2=dat/100;str1=dat/10%10;str0=dat%10;dat+; /將其數值+1E2WriteByte(0 x02, dat); /再寫回到對應的地址上while (1)display();/* 讀取 EEPROM 中的一個字節, addr-字節地址 */unsigned char E2ReadByte(unsigned
24、char addr)unsigned char dat;I2CStart();I2CWrite(0 x501); /尋址器件,后續為寫操作I2CWrite(addr); /寫入存儲地址I2CStart(); /發送重復啟動信號I2CWrite(0 x501)|0 x01); /尋址器件,后續為讀操作dat = I2CReadNAK(); /讀取一個字節數據I2CStop();return dat;/* 向 EEPROM 中寫入一個字節, addr-字節地址 */void E2WriteByte(unsigned char addr, unsigned char dat)I2CStart();I
25、2CWrite(0 x501); /尋址器件,后續為寫操作I2CWrite(addr); /寫入存儲地址I2CWrite(dat); /寫入一個字節數據I2CStop();void delay(unsigned int time)unsigned char t;while(time-)for (t=0;t120;t+);void display(void)static unsigned char num=0;P0=0 xff;switch(num)Case 0:bai=1;shi=0;ge=0;P0=dis_codestr2; num+;delay(10);break;case 1:bai=0;shi=1;ge=0;P0=dis_codestr1; num+;delay(10);break;case 2:bai=0;shi=0;ge=1;P0=dis_codestr0; num=0;delay(10);break;第一次運行結果第二次運行結果第三次運行結果EEPROM多字節讀寫時序從 EEPROM 讀取多字節數據很簡單, EEPROM 根據我們所送的時序,直接就把數據送出來即可。向EEPROM 發送數據后,先保存在了 EEPROM的緩存, EEPROM 必須要把緩存中的數據搬移到“非易失”的區域,才能達到掉電不丟失的效果。而往非易失區域寫需要一定的時間,每種器件不完全一樣, A
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年養老機構醫養結合運營模式創新與可持續發展報告001
- 紡織服裝行業智能化生產對企業管理創新研究報告
- 天然植物精油護膚品牌在2025年銷售渠道拓展研究報告
- 2025年元宇宙社交平臺虛擬現實教育游戲化市場前景:用戶體驗與教育效果報告
- 2025年醫院電子病歷系統在醫院信息化中的數據加密優化報告
- 2025年工業互聯網平臺網絡隔離技術:工業互聯網安全防護市場前景分析報告001
- 2025年醫藥行業CRO模式下的臨床試驗倫理審查與合規報告
- 新一代大學英語(第二版)綜合教程1-U4-教師用書 Unit 4 Life at your fingertips
- 2025年醫藥流通企業供應鏈優化與成本控制智能供應鏈管理供應鏈管理采購管理優化報告
- 保險競賽題庫及答案詳解
- 河南近10年中考真題道德與法治2014-2023年含答案
- 山姆配送服務流程
- 湖南省長郡中學、雅禮中學等四校2024屆高一數學第二學期期末調研試題含解析
- 關節僵硬護理查房
- 國開2023秋《現-代-管-理-專-題》北京-第四次作業參考答案
- 長城招聘的心理測評答案
- 云災備與數據恢復策略
- 中小學食堂工作從業人員安全培訓會議記錄(40學時全)
- 國開《工程經濟與管理》形考任務1-12試題及答案
- 幼兒園玩教具明細表
- 普速《鐵路技術管理規程》普速鐵路部分
評論
0/150
提交評論