日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

iic通讯协议

發(fā)布時(shí)間:2023/12/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iic通讯协议 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

IIC總線(xiàn)
一般串行數(shù)據(jù)通訊都有時(shí)鐘和數(shù)據(jù)之分,有異步和同步之別.
有單線(xiàn),雙線(xiàn)和三線(xiàn)等.

I2C肯定是2線(xiàn)的(不算地線(xiàn)).

I2C協(xié)議確實(shí)很科學(xué),比3/4線(xiàn)的SPI要好,當(dāng)然線(xiàn)多通訊速率相對(duì)就快了.

I2C的原則是:

在SCL=1(高電平)時(shí),SDA千萬(wàn)別忽悠!!!

否則,SDA下跳則"判罰"為"起始信號(hào)S",SDA上跳則"判罰"為"停止信號(hào)P".

在SCL=0(低電平)時(shí),SDA隨便忽悠!!!(可別忽悠過(guò)火到SCL跳高)

每個(gè)字節(jié)后應(yīng)該由對(duì)方回送一個(gè)應(yīng)答信號(hào)ACK做為對(duì)方在線(xiàn)的標(biāo)志.

非應(yīng)答信號(hào)一般在所有字節(jié)的最后一個(gè)字節(jié)后.一般要由雙方協(xié)議簽定.

SCL必須由主機(jī)發(fā)送,否則天下大亂.

首字節(jié)是"片選信號(hào)",即7位從機(jī)地址加1位方向(讀寫(xiě))控制.

從機(jī)收到(聽(tīng)到)自己的地址才能發(fā)送應(yīng)答信號(hào)(必須應(yīng)答!!!)表示自己在線(xiàn).

其他地址的從機(jī)不允許忽悠!!!(當(dāng)然群呼可以忽悠但只能聽(tīng)不許說(shuō)話(huà))

讀寫(xiě)是站在主機(jī)的立場(chǎng)上定義的.

"讀"是主機(jī)接收從機(jī)數(shù)據(jù),"寫(xiě)"是主機(jī)發(fā)送數(shù)據(jù)給從機(jī).

重復(fù)位主要用于主機(jī)從發(fā)送模式到接收模式的轉(zhuǎn)換"信號(hào)",由于只有2線(xiàn),

所以收發(fā)轉(zhuǎn)換肯定要比SPI復(fù)雜,因?yàn)镾PI可用不同的邊沿來(lái)收發(fā)數(shù)據(jù),而I2C不行.

在硬件I2C模塊,特別是MCU/ARM/DSP等每個(gè)階段都會(huì)得到一個(gè)準(zhǔn)確的狀態(tài)碼,

根據(jù)這個(gè)狀態(tài)碼可以很容易知道現(xiàn)在在什么狀態(tài)和什么出錯(cuò)信息.

7位I2C總線(xiàn)可以?huà)旖?27個(gè)不同地址的I2C設(shè)備,0號(hào)"設(shè)備"作為群呼地址.

10位I2C總線(xiàn)可以?huà)旖痈嗟?0位I2C設(shè)備.

總之,只要掌握I2C的忽悠記,一般很容易掌控...??第一個(gè)字節(jié)(為slave address)由7位地址和一位R/W讀寫(xiě)位組成的,這字節(jié)是個(gè)器件地址。
首先,你要知道:常用IIC接口通用器件的器件地址是由種類(lèi)型號(hào),及尋址碼組成的,共7位。
如格式如下:?
??D7 D6 D5 D4 D3 D2 D1 D0
1-器件類(lèi)型由:D7-D4?共4位決定的。這是由半導(dǎo)公司生產(chǎn)時(shí)就已固定此類(lèi)型的了,也就是說(shuō)這4位已是固定的。

2-用戶(hù)自定義地址碼:D3-D1共3位。這是由用戶(hù)自己設(shè)置的,通常的作法如EEPROM這些器件是由外部IC的3個(gè)引腳所組合電平?jīng)Q定的(用常用的名字如A0,A1,A2)。這也就是尋址碼。
所以為什么同一IIC總線(xiàn)上同一型號(hào)的IC只能最多共掛8片同種類(lèi)芯片的原因了。

3-最低一位就是R/W位。這位不用我多說(shuō)了。
???在現(xiàn)代電子系統(tǒng)中,有為數(shù)眾多的IC需要進(jìn)行相互之間以及與外界的通信。為了提供硬件的效率和簡(jiǎn)化電路的設(shè)計(jì),PHILIPS開(kāi)發(fā)了一種用于內(nèi)部IC控制的簡(jiǎn)單的雙向兩線(xiàn)串行總線(xiàn)I2C。I2C總線(xiàn)支持任何一種IC制造工藝,并且PHILIPS和其他廠(chǎng)商提供了種類(lèi)非常豐富的I2C兼容芯片。作為一個(gè)專(zhuān)利的控制總線(xiàn),I2C已經(jīng)成為世界性的工業(yè)標(biāo)準(zhǔn)。

?I2C總線(xiàn)進(jìn)行數(shù)據(jù)傳送時(shí),時(shí)鐘信號(hào)為高電平期間,數(shù)據(jù)線(xiàn)上的數(shù)據(jù)必須保持穩(wěn)定,只有在時(shí)鐘線(xiàn)上的信號(hào)為低電平期間,數(shù)據(jù)線(xiàn)上的高電平或低電平狀態(tài)才允許變化。

?

???????????????

起始和終止信號(hào)?:SCL線(xiàn)為高電平期間,SDA線(xiàn)由高電平向低電平的變化表示起始信號(hào);SCL線(xiàn)為高電平期間,SDA線(xiàn)由低電平向高電平的變化表示終止信號(hào)。

數(shù)據(jù)傳送格式

(1)字節(jié)傳送與應(yīng)答

每一個(gè)字節(jié)必須保證是8位長(zhǎng)度。數(shù)據(jù)傳送時(shí),先傳送最高位(MSB),每一個(gè)被傳送的字節(jié)后面都必須跟隨一位應(yīng)答位(即一幀共有9位)。如果一段時(shí)間內(nèi)沒(méi)有收到從機(jī)的應(yīng)答信號(hào),則自動(dòng)認(rèn)為從機(jī)已正確接收到數(shù)據(jù)。

?????AT24C02的芯片地址如下圖,1010為固定,A0,A1,A2正好與芯片的1,2,3引角對(duì)應(yīng),為當(dāng)前電路中的地址選擇線(xiàn),三根線(xiàn)可選擇8個(gè)芯片同時(shí)連接在電路中,當(dāng)要與哪個(gè)芯片通信時(shí)傳送相應(yīng)的地址即可與該芯片建立連接,TX-1B實(shí)驗(yàn)板上三根地址線(xiàn)都為0。最后一位R/W為告訴從機(jī)下一字節(jié)數(shù)據(jù)是要讀還是寫(xiě),0為寫(xiě)入,1為讀出。

?

?

?

?

?

任一地址讀取數(shù)據(jù)格式

void init()??????????????//初始化

{

???????SCL=1;

???????delay();

???????SDA=1;

???????delay();

}

void start()?????????//啟動(dòng)信號(hào)

{

???????SDA=1;

???????delay();

???????SCL=1;

???????delay();

???????SDA=0;

???????delay();

}

void stop()????????????//停止信號(hào)

{

???????SDA=0;

???????delay();

???????SCL=1;

???????delay();

???????SDA=1;

???????delay();

}

?

void respons()?????????????//回應(yīng)信號(hào)

{

???????uchar i=0;SCL=1;delay();

while((SDA==1)&&(i<255))

i++;

???????SCL=0;

delay();

}

void writebyte(uchar date)//???????寫(xiě)一個(gè)字節(jié)

{

???????uchar i,temp;

???????temp=date;

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

???????{

??????????????temp=temp<<1;

??????????????SCL=0;

??????????????delay();

??????????????SDA=CY;

??????????????delay();

??????????????SCL=1;

??????????????delay();??

???????}

???????SCL=0;

???????delay();

???????SDA=1;

???????delay();

}

?

任一地址寫(xiě)入數(shù)據(jù)格式

uchar readbyte()

//讀一個(gè)字節(jié)

{

???????uchar i,j,k;

???????SCL=0;

???????delay();

???????SDA=1;

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

???????{

??????????????SCL=1;

??????????????delay();

??????????????if(SDA==1)

????????????????j=1;

??????????????else

????????????????j=0;

??????????????k=(k<<1)|j;

??????????????SCL=0;

??????????????delay();

???????}

???????delay();

???????return k;

}

Void write_add(uchar address,

uchar info)

//指定地址寫(xiě)一個(gè)字節(jié)數(shù)據(jù)

{

???????start();

???????writebyte(0xa0);

???????respons();

???????writebyte(address);

???????respons();

???????writebyte(info);

???????respons();

???????stop();

}

uchar read_add(uchar address)

//指定地址讀一個(gè)字節(jié)數(shù)據(jù)

{

???????uchar dd;

???????start();

???????writebyte(0xa0);

???????respons();

???????writebyte(address);

???????respons();

???????start();

???????writebyte(0xa1);

???????respons();

???????dd=readbyte();

???????stop();

???????return dd;

}

?

?

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的iic通讯协议的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。