新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > I2C總線注意要點

        I2C總線注意要點

        作者: 時間:2016-12-15 來源:網絡 收藏
        1、只要求兩條總線線路:一條串行數據線SDA,一條串行時鐘線SCL。


        本文引用地址:http://www.104case.com/article/201612/330279.htm

        2、每個連接到總線的器件都可以通過唯一的地址和一直存在的簡單的主機/從機關系軟件設定地址,主機可以作為主機發送器或主機接收器。

        3、在傳輸數據的時候,SDA線必須在時鐘的高電平周期保持穩定,SDA的高或低電平狀態只有在SCL線的時鐘信號是低電平時才能改變。


        4、SCL線是高電平時,SDA線從高電平向低電平切換,這個情況表示起始條件。

        5、SCL線是高電平時,SDA線由低電平向高電平切換,這個情況表示停止條件。


        6、數據傳輸必須帶響應,相關的響應時鐘脈沖由主機產生。在響應的時鐘脈沖期間發送器釋放SDA線(高)。響應的時鐘脈沖期間,接收器必須將SDA線拉低,使它在這個時鐘脈沖的高電平期間保持穩定的低電平。


        7、第一個字節的頭7位組成了從機地址,最低位(LSB)是第8位,它決定了傳輸的方向。第一個字節的最低位是“0”,表示主機會寫信息到被選中的從機;“1”表示主機會向從機讀信息,當發送了一個地址后,系統中的每個器件都在起始條件后將頭7位與它自己的地址比較,如果一樣,器件會判定它被主機尋址,至于是從機接收器還是從機發送器,都由R/W位決定的。

        voidI2C_delay(void)

        {

        u8i=200;

        while(i)

        {

        i--;

        }

        }

        voidI2C_Start(void)

        {

        SDA_H;

        I2C_delay();

        SCL_H;//SCL線是高電平時,SDA線從高電平向低電平切換,總線開始

        I2C_delay();

        SDA_L;

        I2C_delay();

        SCL_L;

        I2C_delay();

        }

        voidI2C_Stop(void)

        {

        SDA_L;

        I2C_delay();

        SCL_H;//SCL線是高電平時,SDA線由低電平向高電平切換,總線結束。

        I2C_delay();

        SDA_H;

        I2C_delay();

        }

        //等待ACK應答

        voidWaitACK1(void)

        {

        u8errtime=225;

        SDA_IN();//設置SDA端口為輸入模式

        I2C_delay();

        SCL_H;

        I2C_delay();

        while(SDA_read)//SCL拉高后,等待SDA被拉低(ACK)

        {

        errtime--;

        if(errtime==0)

        {

        I2C_Stop();

        SDA_OUT();

        break;

        }

        }

        SCL_L;

        SDA_OUT();

        I2C_delay();

        }

        //寫入單字節數據

        voidWritebyte(unsignedcharData)

        {

        unsignedchari;

        for(i=0;i<8;i++)

        {

        if((Data<

        {

        SDA_H;

        }

        else

        {

        SDA_L;

        }

        I2C_delay();

        SCL_H;

        I2C_delay();

        SCL_L;

        }

        SDA_L;

        I2C_delay();

        WaitACK1();

        I2C_delay();

        }



        關鍵詞: I2C總線注意要

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 新野县| 天水市| 公主岭市| 平塘县| 荔波县| 兴国县| 贵定县| 惠东县| 丘北县| 青龙| 科技| 铁力市| 洛阳市| 东平县| 岳池县| 湄潭县| 扶沟县| 江西省| 濮阳县| 松阳县| 巴彦淖尔市| 华坪县| 巫山县| 汤原县| 新竹县| 弥渡县| 光山县| 西青区| 屏山县| 化德县| 公安县| 前郭尔| 康平县| 射洪县| 山东| 阿拉善右旗| 昭平县| 城固县| 渭南市| 威宁| 榆林市|