日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

iic通讯协议

發布時間:2023/12/20 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iic通讯协议 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

IIC總線
一般串行數據通訊都有時鐘和數據之分,有異步和同步之別.
有單線,雙線和三線等.

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

I2C協議確實很科學,比3/4線的SPI要好,當然線多通訊速率相對就快了.

I2C的原則是:

在SCL=1(高電平)時,SDA千萬別忽悠!!!

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

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

每個字節后應該由對方回送一個應答信號ACK做為對方在線的標志.

非應答信號一般在所有字節的最后一個字節后.一般要由雙方協議簽定.

SCL必須由主機發送,否則天下大亂.

首字節是"片選信號",即7位從機地址加1位方向(讀寫)控制.

從機收到(聽到)自己的地址才能發送應答信號(必須應答!!!)表示自己在線.

其他地址的從機不允許忽悠!!!(當然群呼可以忽悠但只能聽不許說話)

讀寫是站在主機的立場上定義的.

"讀"是主機接收從機數據,"寫"是主機發送數據給從機.

重復位主要用于主機從發送模式到接收模式的轉換"信號",由于只有2線,

所以收發轉換肯定要比SPI復雜,因為SPI可用不同的邊沿來收發數據,而I2C不行.

在硬件I2C模塊,特別是MCU/ARM/DSP等每個階段都會得到一個準確的狀態碼,

根據這個狀態碼可以很容易知道現在在什么狀態和什么出錯信息.

7位I2C總線可以掛接127個不同地址的I2C設備,0號"設備"作為群呼地址.

10位I2C總線可以掛接更多的10位I2C設備.

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

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

3-最低一位就是R/W位。這位不用我多說了。
???在現代電子系統中,有為數眾多的IC需要進行相互之間以及與外界的通信。為了提供硬件的效率和簡化電路的設計,PHILIPS開發了一種用于內部IC控制的簡單的雙向兩線串行總線I2C。I2C總線支持任何一種IC制造工藝,并且PHILIPS和其他廠商提供了種類非常豐富的I2C兼容芯片。作為一個專利的控制總線,I2C已經成為世界性的工業標準。

?I2C總線進行數據傳送時,時鐘信號為高電平期間,數據線上的數據必須保持穩定,只有在時鐘線上的信號為低電平期間,數據線上的高電平或低電平狀態才允許變化。

?

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

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

數據傳送格式

(1)字節傳送與應答

每一個字節必須保證是8位長度。數據傳送時,先傳送最高位(MSB),每一個被傳送的字節后面都必須跟隨一位應答位(即一幀共有9位)。如果一段時間內沒有收到從機的應答信號,則自動認為從機已正確接收到數據。

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

?

?

?

?

?

任一地址讀取數據格式

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

{

???????SCL=1;

???????delay();

???????SDA=1;

???????delay();

}

void start()?????????//啟動信號

{

???????SDA=1;

???????delay();

???????SCL=1;

???????delay();

???????SDA=0;

???????delay();

}

void stop()????????????//停止信號

{

???????SDA=0;

???????delay();

???????SCL=1;

???????delay();

???????SDA=1;

???????delay();

}

?

void respons()?????????????//回應信號

{

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

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

i++;

???????SCL=0;

delay();

}

void writebyte(uchar date)//???????寫一個字節

{

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

}

?

任一地址寫入數據格式

uchar readbyte()

//讀一個字節

{

???????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)

//指定地址寫一個字節數據

{

???????start();

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

???????respons();

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

???????respons();

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

???????respons();

???????stop();

}

uchar read_add(uchar address)

//指定地址讀一個字節數據

{

???????uchar dd;

???????start();

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

???????respons();

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

???????respons();

???????start();

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

???????respons();

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

???????stop();

???????return dd;

}

?

?

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的iic通讯协议的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。