欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

IIC協(xié)議超詳細(xì)解釋

jf_7CID84f3 ? 來源:傳感器與檢測(cè)技術(shù) ? 作者:傳感器與檢測(cè)技術(shù) ? 2022-10-26 15:48 ? 次閱讀

以下內(nèi)容,將解釋以下幾個(gè)問題
1.IIC協(xié)議是什么?
2.IIC協(xié)議用來干什么?
3.IIC協(xié)議的通信過程?

1.IIC協(xié)議是什么?

IIC,即I2C,全稱 Inter-Integrated Circuit,字面上的意思是集成電路之間,它其實(shí)是I2C Bus簡(jiǎn)稱,所以中文應(yīng)該叫 集成電路總線 ,它是一種串行通信總線,使用多主從架構(gòu),由飛利浦公司在1980年代為了讓主板、嵌入式系統(tǒng)手機(jī)用以連接低速周邊設(shè)備而發(fā)展。(百度百科)

2.IIC協(xié)議用來干什么?

簡(jiǎn)單地說,IIC就是一種通信協(xié)議,是為了能讓主板,或嵌入式系統(tǒng)等與其他外設(shè)模塊進(jìn)行通信而進(jìn)行開發(fā)的。玩過stm32開發(fā)板的同學(xué)都知道,對(duì)于一塊stm32核心開發(fā)板而言,要想使用其他的外設(shè)模塊,就肯定要經(jīng)過接線,寫代碼,燒錄運(yùn)行的這個(gè)過程。

其實(shí)這個(gè)過程,就是一個(gè)stm32與外設(shè)模塊通信的過程。接線,就是搭建通信的線路。寫代碼,就是制定通信的傳輸協(xié)議。燒錄運(yùn)行,就是正式的通信過程。只不過有的模塊通信過程很簡(jiǎn)單,大家感覺不出來。

外設(shè)和芯片間的通信可以形象地比喻成兩個(gè)人講話:

你說的別人得能聽懂:雙方約定信號(hào)的協(xié)議

你的語速別人得能接受:雙方滿足時(shí)序要求

但是隨著科技的發(fā)展,模塊越來越多,總不可能,每個(gè)模塊都要制定一種通信協(xié)議,這樣不現(xiàn)實(shí)。所以,總要有一些代表性的協(xié)議能夠適應(yīng)大部分的模塊的通信。IIC這是這樣一種協(xié)議,一個(gè)IIC總線上,可以掛載多個(gè)外接設(shè)備。

常用的串行通信協(xié)議有:

UART串口通信

②IIC協(xié)議

③SPI協(xié)議

USB協(xié)議(很難)

常用的并行通信協(xié)議有:

①8080

②6800

3 .IIC協(xié)議的通信過程( 此處重點(diǎn) )

接線:要搭建IIC的通信線路,出除去電源之外,還需要兩條線,分別是SDA和SCLK

SDA:數(shù)據(jù)信號(hào)線,用于傳輸數(shù)據(jù)

SCLK:時(shí)鐘信號(hào)線,用于產(chǎn)生時(shí)鐘頻率,控制時(shí)序,實(shí)現(xiàn)協(xié)議過程

由此可以看出,由于是單總線進(jìn)行數(shù)據(jù)傳輸,所以IIC協(xié)議是半雙工的。

搭建好線路之后,就要進(jìn)行具體的通信了。

要通信,總得先發(fā)個(gè)開始信號(hào)吧。就像你要和別人說話,總要先喊他一聲一樣。如下圖所示,協(xié)議規(guī)定,當(dāng)SCLK時(shí)鐘信號(hào)一直處于高電平狀態(tài)時(shí),SDA線由高電平跳變到低電平這個(gè)動(dòng)作,表示起始信號(hào)。注意此時(shí)就算SDA數(shù)據(jù)線的電平跳變完,SCLK線依然是高電平哦。當(dāng)連接在IIC總線上的外設(shè)模塊檢測(cè)到這個(gè)信號(hào)時(shí),就知道數(shù)據(jù)要開始傳輸了。對(duì)于結(jié)束信號(hào)同理,協(xié)議規(guī)定,當(dāng)SCLK時(shí)鐘信號(hào)一直處于高電平狀態(tài)時(shí),SDA線由低電平跳變到高電平這個(gè)動(dòng)作,表示結(jié)束信號(hào)。

b330b250-359f-11ed-ba43-dac502259ad0.png

在明白如何開始之后,就要開始進(jìn)行數(shù)據(jù)的傳輸了。

協(xié)議規(guī)定,在數(shù)據(jù)的傳輸過程中,SCLK為高電平時(shí),外設(shè)模塊開始采集SDA數(shù)據(jù)線上的數(shù)據(jù),此時(shí)要求SDA數(shù)據(jù)線上的電平狀態(tài)必須穩(wěn)定(不然鬼知道這一位數(shù)據(jù)是0還是1),當(dāng)SCLK為低電平時(shí)才允許SDA線上的數(shù)據(jù)跳變成另外一種狀態(tài)。

以下以傳輸1個(gè)bit的數(shù)據(jù)為例,如下圖所示:

現(xiàn)在,我想傳輸1bit數(shù)據(jù),該位數(shù)據(jù)為1,從上文知道,我們?cè)诎l(fā)完開始信號(hào)之后,此時(shí)SDA數(shù)據(jù)線的電平狀態(tài)為低電平,SCLK信號(hào)依然是高電平。難道這個(gè)時(shí)候外設(shè)就要開始讀取數(shù)據(jù)了嗎?

這顯然不是的,從發(fā)完開始信號(hào)到真正的數(shù)據(jù)傳輸之間,會(huì)有一段緩沖時(shí)間,讓我們?nèi)?zhǔn)備數(shù)據(jù),在準(zhǔn)備數(shù)據(jù)階段,先將SCLK信號(hào)拉低一段時(shí)間,在這期間將SDA數(shù)據(jù)線拉高一段時(shí)間(即數(shù)據(jù)1),然后再將SCLK信號(hào)拉高,此時(shí)這個(gè)時(shí)鐘信號(hào)的高電平被外設(shè)檢測(cè)到的話,外設(shè)就知道要讀取數(shù)據(jù)了,從而SDA上的數(shù)據(jù)就會(huì)被外設(shè)讀到了。依次類推,傳輸下一位數(shù)據(jù)。

b375ff2c-359f-11ed-ba43-dac502259ad0.png

一般,傳輸完1個(gè)字節(jié)(即8bit,高位先入)的數(shù)據(jù),才算做一次完整的數(shù)據(jù)傳輸,因?yàn)閷?duì)存儲(chǔ)單元而言,最小的單位便是字節(jié)。那如何確定,每次都完好地傳輸了一個(gè)字節(jié)呢?

這種情況就需要外設(shè)來做出回應(yīng)了,就像打電話一樣,如果對(duì)方不在,或不想聽,說再多也沒用啊。那么外設(shè)如何做出回應(yīng)呢?

協(xié)議規(guī)定,主機(jī)每傳完一個(gè)字節(jié)的數(shù)據(jù)即外設(shè)每收到一個(gè)字節(jié)的數(shù)據(jù),外設(shè)就要在第9個(gè)時(shí)鐘脈沖到來的時(shí)候,將SDA數(shù)據(jù)線拉低進(jìn)行應(yīng)答(ACK),且必須是穩(wěn)定的低電平,表示已經(jīng)收到了一個(gè)字節(jié)的數(shù)據(jù),拉高表示不進(jìn)行應(yīng)答(NACK;注意這里是外設(shè)將SDA數(shù)據(jù)線拉低,不是主機(jī)了哦。如下圖所示:

b39abaec-359f-11ed-ba43-dac502259ad0.png

所以在主機(jī)傳完一個(gè)字節(jié)的數(shù)據(jù)之后,就應(yīng)該釋放總線(協(xié)議規(guī)定,當(dāng)SDA和SCLK同時(shí)為高時(shí),表示空閑狀態(tài))然后把SDA數(shù)據(jù)線連接的IO口從輸出模式轉(zhuǎn)換成輸入模式,這樣才能拿到SDA數(shù)據(jù)線上的應(yīng)答信號(hào)。這樣,一個(gè)字節(jié)的數(shù)據(jù)就從主機(jī)到外設(shè)傳輸完畢了。

既然IIC是雙向通信的,那主機(jī)肯定也是需要從外設(shè)讀取數(shù)據(jù)的,那這個(gè)讀取的過程又是怎么實(shí)現(xiàn)的呢?畢竟外設(shè)對(duì)于我們而言是不能直接操作的,我們能操作的只有stm32。我們知道,一個(gè)IIC總線上,可以掛載多個(gè)設(shè)備,那么stm32如何確定是哪個(gè)外設(shè)正在跟我進(jìn)行通信呢。對(duì)于此,那些生產(chǎn)外設(shè)模塊的廠商們就約定,要是這個(gè)設(shè)備使用IIC協(xié)議進(jìn)行通信,那么就要給這個(gè)設(shè)備指定一個(gè)器件地址,以供芯片訪問。這個(gè)器件地址會(huì)在你購(gòu)買其模塊的時(shí)候在使用手冊(cè)上注明。所以,要跟哪個(gè)模塊通信,就一定要通過查閱其使用手冊(cè),找到它的器件地址。

所以,在上文所述的最開始的一個(gè)字節(jié)的數(shù)據(jù)傳輸過程中,這一個(gè)數(shù)據(jù)往往是器件地址。這樣,對(duì)應(yīng)的外設(shè)才知道,是要跟我進(jìn)行通信。讀取數(shù)據(jù),也是同理,要想從外設(shè)中讀取到數(shù)據(jù),主機(jī)要明確三點(diǎn):從哪個(gè)外設(shè)中的哪個(gè)地方讀取數(shù)據(jù),讀取到的數(shù)據(jù)要存到哪里。

所以主機(jī),在開始讀數(shù)據(jù)之前,主機(jī)必須要先給外設(shè)發(fā)器件地址,數(shù)據(jù)所在的地址,外設(shè)才會(huì)知道你要從該地址讀取數(shù)據(jù),從而把數(shù)據(jù)通過SDA線傳出來。至于具體的每個(gè)字節(jié)的傳輸過程,和上面所講的從主機(jī)到外設(shè)的過程差不多,只不過反了一個(gè)反向而已,并且主機(jī)的等待應(yīng)答變成了主動(dòng)應(yīng)答。

/*  設(shè)置SDA總線為輸出模式  參數(shù)值:NULL  返回值:NULL*/
void IIC_setSDAMode_Out(){  GPIO_InitTypeDef GPIO_IIC;    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);    GPIO_IIC.GPIO_Mode  = GPIO_Mode_OUT;        //輸出  GPIO_IIC.GPIO_OType = GPIO_OType_PP;        //推挽  GPIO_IIC.GPIO_Pin   = GPIO_Pin_15;                //引腳  GPIO_IIC.GPIO_PuPd  = GPIO_PuPd_UP;           //上拉  GPIO_IIC.GPIO_Speed = GPIO_Speed_25MHz;        //輸出  GPIO_Init(GPIOE, &GPIO_IIC);}

/*  設(shè)置SDA總線為輸入模式  參數(shù)值:NULL  返回值:NULL*/
void IIC_setSDAMode_In(){
  GPIO_InitTypeDef GPIO_IIC;  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);    GPIO_IIC.GPIO_Mode  = GPIO_Mode_IN;           //輸出  GPIO_IIC.GPIO_Pin   = GPIO_Pin_15;                 //引腳  GPIO_IIC.GPIO_PuPd  = GPIO_PuPd_UP;            //上拉  GPIO_Init(GPIOE, &GPIO_IIC);
}
/*  IIC開始信號(hào)  參數(shù)值:NULL  返回值:NULL*/
void IIC_Start(){    IIC_setSDAMode_Out();        IIC_SDA_OUT(1);                             //總線釋放狀態(tài)    IIC_SCL_OUT(1);    delay_us(5);      IIC_SDA_OUT(0);                             //SDA跳變?yōu)榈碗娖?   delay_us(5);      IIC_SCL_OUT(0);            delay_us(5);


}
/*  IIC停止信號(hào)  參數(shù)值:NULL  返回值:NULL*/
void IIC_Stop(){    IIC_setSDAMode_Out();        IIC_SDA_OUT(0);              IIC_SCL_OUT(0);    delay_us(5);      IIC_SCL_OUT(1);                              //SDA跳變?yōu)楦唠娖?   delay_us(5);      IIC_SDA_OUT(1);            delay_us(5);
}
/*  主機(jī)寫入數(shù)據(jù)到外設(shè)中  參數(shù)值:         data  要寫入的一個(gè)字節(jié)  返回值:NULL*/
void IIC_writeByte(u8 data){    IIC_setSDAMode_Out();    IIC_SCL_OUT(0);                                 //只有時(shí)鐘線拉低,SDA上的數(shù)據(jù)才允許寫入  delay_us(5);    //將數(shù)據(jù)一位一位的發(fā)出去  for(int i =0;i<8;i++)  {      if(data&(0x1<<(7-i)))               //高位先入      {          IIC_SDA_OUT(1);      }      else      {          IIC_SDA_OUT(0);      }             IIC_SCL_OUT(1);                 //讓外設(shè)讀取數(shù)據(jù)       delay_us(5);           IIC_SCL_OUT(0);                 //重新拉低,準(zhǔn)備寫入下一位數(shù)據(jù)       delay_us(5);  }}


/*  主機(jī)從外設(shè)中讀取一個(gè)字節(jié)的數(shù)據(jù)  參數(shù)值:NULL  返回值:NULL*/
u8 IIC_readByte(){
    u8 data = 0;  IIC_setSDAMode_In();
  IIC_SCL_OUT(0);                  //先拉低,為讀取數(shù)據(jù)做準(zhǔn)備  delay_us(5);
  for(int i=0;i<8;i++)  {        IIC_SCL_OUT(1);         // SCL為高期間才可以讀取數(shù)據(jù)      delay_us(5);        if(IIC_SDA_IN)    {        data|=(0x01<<(7-i));          }else{      data &= ~(0x1<<(7-i));    }      IIC_SCL_OUT(0);    delay_us(5);  }  return data;

}


/*  主機(jī)等待應(yīng)答  參數(shù)值:NULL  返回值:ack     0  應(yīng)答   1 不應(yīng)答*/

u8 IIC_waitAck(){    u8 ack =0;  IIC_setSDAMode_In();
  IIC_SCL_OUT(0);             //準(zhǔn)備時(shí)序  delay_us(5);    IIC_SCL_OUT(1);  delay_us(5);  
  if(IIC_SDA_IN)  {        ack =1;  }  else  {        ack =0;    }      IIC_SCL_OUT(0);              //拉低,表示應(yīng)答完成  delay_us(5);      return  ack;

}
/*  主機(jī)主動(dòng)應(yīng)答  參數(shù)值:        ack  0 應(yīng)答 1 不應(yīng)答  返回值:NULL*/

void IIC_Ack(u8 ack){  IIC_setSDAMode_Out();  IIC_SCL_OUT(0);  delay_us(5);    if(ack)  {    IIC_SDA_OUT(1);  }  else  {      IIC_SCL_OUT(0);  }      IIC_SCL_OUT(1);  delay_us(5);    IIC_SCL_OUT(0);  delay_us(5);    }

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 通信協(xié)議
    +關(guān)注

    關(guān)注

    28

    文章

    916

    瀏覽量

    40457
  • 總線
    +關(guān)注

    關(guān)注

    10

    文章

    2904

    瀏覽量

    88442
  • IIC
    IIC
    +關(guān)注

    關(guān)注

    11

    文章

    302

    瀏覽量

    38537

原文標(biāo)題:IIC協(xié)議超詳細(xì)解釋(適合小白入門)

文章出處:【微信號(hào):傳感器與檢測(cè)技術(shù),微信公眾號(hào):傳感器與檢測(cè)技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    FPGA實(shí)現(xiàn)IIC協(xié)議的設(shè)計(jì)

    今天給大家?guī)淼氖?b class='flag-5'>IIC通信,IIC協(xié)議應(yīng)用非常廣泛,例如與MPU6050進(jìn)行通信,配置OV5640攝像頭、驅(qū)動(dòng)OLED屏幕等等,都需要使用到IIC
    的頭像 發(fā)表于 03-04 10:49 ?1366次閱讀
    FPGA實(shí)現(xiàn)<b class='flag-5'>IIC</b><b class='flag-5'>協(xié)議</b>的設(shè)計(jì)

    什么是IIC和SPI總線協(xié)議?

    通信協(xié)議非常適合近距離低速芯片間通信。Philips(for IIC)和Motorola(for SPI) 出于不同背景和市場(chǎng)需求制定了這兩種標(biāo)準(zhǔn)通信協(xié)議。
    發(fā)表于 10-21 07:25

    STM32的IIC協(xié)議簡(jiǎn)介

    文章目錄(一)IIC協(xié)議簡(jiǎn)介(二)物理層和協(xié)議層簡(jiǎn)介(三)IIC物理層:3.1、物理層的特點(diǎn)(四)IIC
    發(fā)表于 01-05 06:13

    如何使用代碼實(shí)現(xiàn)的IIC協(xié)議

    1. 綜述  由上篇博客可知道IIC協(xié)議如何用代碼實(shí)現(xiàn),本篇博客就不涉及協(xié)議內(nèi)容,只講解如何使用?! ”敬蔚膶?shí)驗(yàn)傳感為:DS3231(時(shí)鐘模塊),對(duì)于時(shí)鐘模塊的具體信息我也就不多介紹,大家可以自行度
    發(fā)表于 02-21 06:36

    iic總線的詳細(xì)說明

    iic總線的詳細(xì)說明,協(xié)議說明,教程,學(xué)習(xí)
    發(fā)表于 11-16 19:05 ?0次下載

    IIC總線協(xié)議

    IIC總線協(xié)議,感興趣的小伙伴們可以看看。
    發(fā)表于 07-26 16:29 ?59次下載

    IIC總線協(xié)議中文版

    IIC協(xié)議的介紹,中文版,易懂,可以在里面了解到IIC是何物,如何使用以及定義
    發(fā)表于 08-09 15:08 ?0次下載

    IIC和SPI總線協(xié)議的區(qū)別

    通信協(xié)議非常適合近距離低速芯片間通信。Philips(for IIC)和Motorola(for SPI) 出于不同背景和市場(chǎng)需求制定了這兩種標(biāo)準(zhǔn)通信協(xié)議
    的頭像 發(fā)表于 04-24 12:41 ?6465次閱讀
    <b class='flag-5'>IIC</b>和SPI總線<b class='flag-5'>協(xié)議</b>的區(qū)別

    51單片機(jī)中IIC協(xié)議詳細(xì)資料說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是51單片機(jī)中IIC協(xié)議詳細(xì)資料說明。
    發(fā)表于 06-26 17:43 ?7次下載
    51單片機(jī)中<b class='flag-5'>IIC</b><b class='flag-5'>協(xié)議</b>的<b class='flag-5'>詳細(xì)</b>資料說明

    常用通信協(xié)議——IIC協(xié)議實(shí)戰(zhàn)項(xiàng)目(一)(STM32+MPU6050+AT24C02)

    IIC協(xié)議對(duì)MPU6050、AT24C02進(jìn)行數(shù)據(jù)的循環(huán)讀取。我們將分三章對(duì)本項(xiàng)目進(jìn)行詳細(xì)闡述。本章主要是實(shí)現(xiàn)功能1:1、使用STM32單片機(jī)用IIC
    發(fā)表于 12-06 15:51 ?9次下載
    常用通信<b class='flag-5'>協(xié)議</b>——<b class='flag-5'>IIC</b><b class='flag-5'>協(xié)議</b>實(shí)戰(zhàn)項(xiàng)目(一)(STM32+MPU6050+AT24C02)

    常用通信協(xié)議——IIC協(xié)議實(shí)戰(zhàn)項(xiàng)目(二)(STM32+MPU6050+AT24C02)

    IIC協(xié)議對(duì)MPU6050、AT24C02進(jìn)行數(shù)據(jù)的循環(huán)讀取。我們將分三章對(duì)本項(xiàng)目進(jìn)行詳細(xì)闡述。本章主要是實(shí)現(xiàn)功能:1、使用STM32單片機(jī)用IIC
    發(fā)表于 12-06 16:06 ?10次下載
    常用通信<b class='flag-5'>協(xié)議</b>——<b class='flag-5'>IIC</b><b class='flag-5'>協(xié)議</b>實(shí)戰(zhàn)項(xiàng)目(二)(STM32+MPU6050+AT24C02)

    IIC協(xié)議詳細(xì)解釋(適合小白入門)

    以下內(nèi)容,將解釋以下幾個(gè)問題1.IIC協(xié)議是什么?2.IIC協(xié)議用來干什么?3.IIC
    發(fā)表于 12-07 14:21 ?5次下載
    <b class='flag-5'>IIC</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>超</b><b class='flag-5'>詳細(xì)</b><b class='flag-5'>解釋</b>(適合小白入門)

    振弦采集模塊的通訊協(xié)議IIC

    振弦采集模塊的通訊協(xié)議IICIIC 通訊協(xié)議本身即是基于設(shè)備地址和寄存器的物理層通訊協(xié)議, VMXXX 使用
    的頭像 發(fā)表于 11-17 10:02 ?884次閱讀
    振弦采集模塊的通訊<b class='flag-5'>協(xié)議</b>( <b class='flag-5'>IIC</b>)

    什么是IIC協(xié)議

    IIC協(xié)議最早1982年由飛利浦公司設(shè)計(jì)開發(fā),是一種兩線制(SDA + SCL)的串行通行方式,提供了主從機(jī)之間通行的一種方案,在今天也是被廣泛的應(yīng)用在很多的產(chǎn)品設(shè)備上。
    的頭像 發(fā)表于 02-10 10:53 ?4766次閱讀
    什么是<b class='flag-5'>IIC</b><b class='flag-5'>協(xié)議</b>

    IIC通訊協(xié)議的電路設(shè)計(jì)

    前面我們概述過一些常見的通訊協(xié)議,本文著重講講關(guān)于IIC協(xié)議。
    的頭像 發(fā)表于 04-19 11:00 ?2166次閱讀
    <b class='flag-5'>IIC</b>通訊<b class='flag-5'>協(xié)議</b>的電路設(shè)計(jì)