• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 為什么I2C總線會難住這么多人?

    為什么I2C總線會難住這么多人?

    作者: 時(shí)間:2025-05-06 來源:硬件筆記本 收藏

    中很常見,但最近在一個(gè)群(可能是初學(xué)者群)交流的信息,讓我比較吃驚,很多人連基本的知識都不清楚。今天就來給大家講講的時(shí)序。

    本文引用地址:http://www.czjhyjcfj.com/article/202505/470076.htm


    很多電子工程師都應(yīng)該從 EEPROM 通信了解到的I2C總線,其實(shí),I2C總線遠(yuǎn)不止于 EEPROM 存儲器,它也有類似485、SPI等應(yīng)用場景。


    EEPROM存儲器系統(tǒng)架構(gòu)圖


    位傳輸

    I2C總線是由飛利浦(Philips)公司開發(fā)的一種雙向二線制同步串行總線,實(shí)現(xiàn)有效的IC間的控制,它只需要兩根線(SDA和SCL)即可在連接于總線上的器件之間傳送信息。


    I2C總線在傳輸數(shù)據(jù)都是按照bit來傳送。SCL為時(shí)鐘線,SDA為數(shù)據(jù)線;在SCL時(shí)鐘線為高電平時(shí),SDA數(shù)據(jù)線上的電平不允許被修改,SCL時(shí)鐘線為低電平時(shí),SDA數(shù)據(jù)線上的電平可為高/低。


    I2C總線的位傳輸


    起始條件:SCL為高電平時(shí),SDA由高電平向低電平切換;表示開始傳送數(shù)據(jù)。


    停止條件:SCL為高電平時(shí),SDA由低電平向高電平跳變;表示結(jié)束傳送數(shù)據(jù)。


    空閑條件:I2C總線的SDA和SCL兩條信號線同時(shí)處于高電平時(shí);表示空閑狀態(tài)。


    起始和停止條件

    數(shù)據(jù)傳輸


    字節(jié)傳輸

    發(fā)送數(shù)據(jù)時(shí),由主機(jī)先發(fā)送一個(gè)起始信號,再將SDA信號切換為輸出模式,然后將8位數(shù)據(jù)依次由高到低發(fā)送出去;


    發(fā)送完成后,主機(jī)將SDA信號切換為輸入模式,等待叢機(jī)回應(yīng)ACK或NAK;再發(fā)下一筆數(shù)據(jù)


    I2C總線數(shù)據(jù)傳輸


    叢機(jī)地址

    在I2C總線系統(tǒng)中,每個(gè)設(shè)備都有它的固定地址,一般由芯片的A0,A1和A2決定。叢機(jī)地址字節(jié)由七位地址位(D7-D1位)和一位方向位(為D0位)組成。


    器件地址的D7-D4一般都是被廠家固定了為1111,余下的D3,D2和D1連接到芯片的A2,A1和A0決定;D0為0x00表示寫,D0為0x01表示讀。大家看例程都是些0xA0和0xA1就是這個(gè)原因。


    EEPROM的器件地址


    讀寫過程

    1.寫數(shù)據(jù)過程

    1.主機(jī)發(fā)送I2C總線停止信號,防止總線忙寫數(shù)據(jù)失敗

    2.主機(jī)發(fā)送I2C總線復(fù)位信號,確保寫數(shù)據(jù)之前總線處于空閑狀態(tài)

    3.主機(jī)發(fā)送I2C總線開始信號,啟動(dòng)一次數(shù)據(jù)的寫入

    4.主機(jī)發(fā)送I2C叢機(jī)地址和寫模式(W/R=0)信號,并且等待一個(gè)叢機(jī)的應(yīng)答信號

    5.主機(jī)接收到ACK的應(yīng)答信號后,開始多個(gè)字節(jié)的寫入,每寫完一個(gè)字節(jié)需要等待一個(gè)叢機(jī)的應(yīng)答信號

    6.主機(jī)接收到ACK的應(yīng)答信號后,發(fā)送2IC總線停止信號,確保總線處于空閑狀態(tài)


    2.讀數(shù)據(jù)過程

    1.主機(jī)發(fā)送I2C總線停止信號,防止總線忙寫數(shù)據(jù)失敗

    2.主機(jī)發(fā)送I2C總線復(fù)位信號,確保讀數(shù)據(jù)之前總線處于空閑狀態(tài)

    3.主機(jī)發(fā)送I2C總線開始信號,啟動(dòng)一次數(shù)據(jù)讀取

    4.主機(jī)發(fā)送I2C叢機(jī)地址和讀模式(W/R=1)信號,并且等待一個(gè)叢機(jī)的應(yīng)答信號

    5.主機(jī)接收到ACK的應(yīng)答信號后,開始多個(gè)字節(jié)的讀取,每讀完一個(gè)字節(jié)需要給叢機(jī)發(fā)送一個(gè)ACK應(yīng)答信號

    6.主機(jī)接收到ACK的應(yīng)答信號后,發(fā)送I2C總線停止信號,確保總線處于空閑狀態(tài)


    主機(jī)讀/寫數(shù)據(jù)過程


    結(jié)語

    I2C總線在嵌入式應(yīng)用中非常廣泛,基本上所有的電力電子設(shè)備都會用到這個(gè)總線;


    筆者根據(jù)自身多年的工作經(jīng)驗(yàn),記錄下了我對它的理解,如果有寫的不對,希望大家能多多指出,今天的I2C總線就先寫到這里,希望對大家有幫助。




    評論


    相關(guān)推薦

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

    關(guān)閉
    主站蜘蛛池模板: 太仓市| 石景山区| 榕江县| 德保县| 罗甸县| 香港 | 施甸县| 正定县| 清水县| 三都| 体育| 丽水市| 阿图什市| 随州市| 宣汉县| 黄大仙区| 拜泉县| 板桥市| 萨嘎县| 澄江县| 西丰县| 泗水县| 泾川县| 云浮市| 夏河县| 溧阳市| 棋牌| 贺兰县| 澄迈县| 崇明县| 印江| 邹城市| 台中县| 龙井市| 定结县| 崇信县| 芜湖县| 浦县| 玉林市| 通江县| 姚安县|