新聞中心

I2C總線注意要點(diǎn)

作者: 時(shí)間:2016-12-15 來(lái)源:網(wǎng)絡(luò) 收藏
1、只要求兩條總線線路:一條串行數(shù)據(jù)線SDA,一條串行時(shí)鐘線SCL。


本文引用地址:http://m.butianyuan.cn/article/201612/330279.htm

2、每個(gè)連接到總線的器件都可以通過(guò)唯一的地址和一直存在的簡(jiǎn)單的主機(jī)/從機(jī)關(guān)系軟件設(shè)定地址,主機(jī)可以作為主機(jī)發(fā)送器或主機(jī)接收器。

3、在傳輸數(shù)據(jù)的時(shí)候,SDA線必須在時(shí)鐘的高電平周期保持穩(wěn)定,SDA的高或低電平狀態(tài)只有在SCL線的時(shí)鐘信號(hào)是低電平時(shí)才能改變。


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

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


6、數(shù)據(jù)傳輸必須帶響應(yīng),相關(guān)的響應(yīng)時(shí)鐘脈沖由主機(jī)產(chǎn)生。在響應(yīng)的時(shí)鐘脈沖期間發(fā)送器釋放SDA線(高)。響應(yīng)的時(shí)鐘脈沖期間,接收器必須將SDA線拉低,使它在這個(gè)時(shí)鐘脈沖的高電平期間保持穩(wěn)定的低電平。


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

voidI2C_delay(void)

{

u8i=200;

while(i)

{

i--;

}

}

voidI2C_Start(void)

{

SDA_H;

I2C_delay();

SCL_H;//SCL線是高電平時(shí),SDA線從高電平向低電平切換,總線開(kāi)始

I2C_delay();

SDA_L;

I2C_delay();

SCL_L;

I2C_delay();

}

voidI2C_Stop(void)

{

SDA_L;

I2C_delay();

SCL_H;//SCL線是高電平時(shí),SDA線由低電平向高電平切換,總線結(jié)束。

I2C_delay();

SDA_H;

I2C_delay();

}

//等待ACK應(yīng)答

voidWaitACK1(void)

{

u8errtime=225;

SDA_IN();//設(shè)置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();

}

//寫入單字節(jié)數(shù)據(jù)

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();

}



關(guān)鍵詞: I2C總線注意要

評(píng)論


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

關(guān)閉