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

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

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

Arduino中進(jìn)行I2C通信發(fā)送數(shù)據(jù)案例分析

電子設(shè)計(jì) ? 來(lái)源:一板網(wǎng) ? 作者:風(fēng)箏 ? 2021-01-01 10:27 ? 次閱讀

在之前的文章中,我們介紹了Arduino之間的SPI通信。今天我們將學(xué)習(xí)另一種串行通信協(xié)議:I2C(內(nèi)部集成電路)。比較I2C和SPI,I2C只有兩條線,而SPI使用四條,I2C可以有多個(gè)主機(jī)和從機(jī),而SPI只能有一個(gè)主機(jī)和多個(gè)從機(jī)。因此,如果項(xiàng)目中有多個(gè)微控制器需要作為主機(jī),那么就采用I2C。 I2C通信通常用于與陀螺儀、加速度計(jì)、氣壓傳感器、LED顯示器等進(jìn)行通信。

在本篇文章中,我們將使用I2C總線在兩個(gè)arduino開(kāi)發(fā)板之間進(jìn)行通信,并且使用電位計(jì)將值(0到127)相互發(fā)送。這些值將顯示在連接到每個(gè)Arduino的1602液晶顯示屏上。文章中,一個(gè)Arduino開(kāi)發(fā)板作為主機(jī),另一個(gè)開(kāi)發(fā)板作為從機(jī)?,F(xiàn)在讓我們從關(guān)于I2C通信的介紹開(kāi)始吧。

什么是I2C通信協(xié)議?

術(shù)語(yǔ)IIC代表“Inter Integrated Circuits”。它通常表示為I2C或IIC,甚至在某些地方表示為2線接口協(xié)議(TWI),但它們代表的含義是一樣的。 I2C是同步通信協(xié)議,也就是說(shuō)共享信息的設(shè)備必須共享公共時(shí)鐘信號(hào)。它只有兩根線來(lái)共享信息,其中一根用于時(shí)鐘信號(hào),另一根用于發(fā)送和接收數(shù)據(jù)。

I2C通信如何工作?

I2C通信最初由Phillips引入。如前所述,它有兩根導(dǎo)線,這兩根導(dǎo)線將連接在兩個(gè)設(shè)備上。這里一個(gè)設(shè)備稱(chēng)為主機(jī),另一個(gè)設(shè)備稱(chēng)為從機(jī)。通信應(yīng)該并且將始終發(fā)生在一個(gè)主機(jī)和一個(gè)從機(jī)之間。 I2C通信的優(yōu)點(diǎn)是可以將多個(gè)從機(jī)連接到一個(gè)主機(jī)。

o4YBAF_bFX-ANZ1IAACK-JXPhYc302.png

完整的通信通過(guò)這兩條導(dǎo)線進(jìn)行,即串行時(shí)鐘(SCL)和串行數(shù)據(jù)(SDA)。

● 串行時(shí)鐘(SCL):與主設(shè)備共享主設(shè)備生成的時(shí)鐘信號(hào)

● 串行數(shù)據(jù)(SDA):在主機(jī)和從機(jī)之間發(fā)送數(shù)據(jù)。

在任何給定時(shí)間,只有主機(jī)才能啟動(dòng)通信。由于總線中有多個(gè)從站,因此主站必須使用不同的地址來(lái)引用每個(gè)從站。當(dāng)被尋址時(shí),只有具有該特定地址的從機(jī)將應(yīng)答該信息,而其他地址繼續(xù)退出。這樣我們就可以使用相同的總線與多個(gè)設(shè)備進(jìn)行通信。

I2C的電壓電平未預(yù)定義。 I2C通信靈活,意味著由5v電源供電的器件,可以使用5v用于I2C,3.3v器件可以使用3v進(jìn)行I2C通信。但是,如果兩個(gè)運(yùn)行在不同電壓下的設(shè)備需要使用I2C進(jìn)行通信呢? 5V I2C總線不能與3.3V器件連接。在這種情況下,電壓移位器用于匹配兩個(gè)I2C總線之間的電壓電平。

有一些條件可以構(gòu)成傳輸。傳輸?shù)某跏蓟瘡腟DA的下降沿開(kāi)始,在下圖中定義為“START”條件,其中主機(jī)將SCL設(shè)為高電平,同時(shí)將SDA設(shè)置為低電平。如下圖所示,

pIYBAF_bFYyAJb6zAAAWiXiEpZY108.png

SDA的下降沿是START條件的硬件觸發(fā)。在此之后,同一總線上的所有設(shè)備都進(jìn)入監(jiān)聽(tīng)模式。

同樣的,SDA的上升沿停止傳輸,在上圖中顯示為“STOP”條件,其中主機(jī)將SCL置為高電平并且還釋放SDA以變?yōu)楦唠娖健R虼?,SDA的上升沿會(huì)阻止傳輸。

pIYBAF_bFZaAOoSVAAALYSRDWog203.png

R / W位表示后續(xù)字節(jié)的傳輸方向,如果為高電平表示從機(jī)將發(fā)送,如果為低則表示主機(jī)將發(fā)送。

每個(gè)位在每個(gè)時(shí)鐘周期發(fā)送,因此傳輸一個(gè)字節(jié)需要8個(gè)時(shí)鐘周期。在發(fā)送或接收每個(gè)字節(jié)之后,保持第九個(gè)時(shí)鐘周期用于ACK / NACK(確認(rèn)/未確認(rèn))。該ACK位由從機(jī)或主機(jī)根據(jù)情況生成。對(duì)于ACK位,SDA在第9個(gè)時(shí)鐘周期由主機(jī)或從機(jī)設(shè)置為低電平。所以它被認(rèn)為是低,否則NACK。

pIYBAF_bFbGAGwdnAABpfusEOfM752.png

在哪里使用I2C通信?

I2C通信僅用于短距離通信。它在某種程度上肯定是可靠的,因?yàn)樗哂型降臅r(shí)鐘脈沖以使其智能化。該協(xié)議主要用于與必須向主設(shè)備發(fā)送信息的傳感器或其他設(shè)備進(jìn)行通信。當(dāng)微控制器必須使用最少的導(dǎo)線與許多其他從模塊通信時(shí)非常方便。如果您正在尋找遠(yuǎn)程通信,您應(yīng)該嘗試RS232,如果您正在尋找更可靠的通信,您應(yīng)該嘗試SPI協(xié)議。

Arduino中的I2C

下圖顯示了Arduino UNO中的I2C引腳。

I2C總線Arduino中的引腳

SDAA4

SCLA5

在開(kāi)始使用兩個(gè)Arduino編程I2C之前,我們需要了解Arduino IDE中使用的Wire庫(kù)。

庫(kù)《Wire.h》包含在程序中,用于使用以下I2C通信函數(shù)。

1. Wire.begin(address):

用途:該庫(kù)用于與I2C設(shè)備進(jìn)行通信。初始化Wire庫(kù),并作為從機(jī)或主機(jī)加入I2C總線。

address:7位從機(jī)地址是可選的,如果未指定地址,類(lèi)似[Wire.begin()],將作為主機(jī)加入總線。

2. Wire.read():

用途:該函數(shù)用于讀取從主機(jī)或從機(jī)接收的字節(jié),該字節(jié)是在調(diào)用requestFrom()后從一個(gè)從機(jī)發(fā)送到主設(shè)備的字節(jié),或從主設(shè)備發(fā)送到從機(jī)的字節(jié)。

3. Wire.write():

用途:該函數(shù)用于將數(shù)據(jù)寫(xiě)入從機(jī)或主機(jī)。

從機(jī)到主機(jī):當(dāng)主站中使用Wire.RequestFrom()時(shí),從機(jī)將數(shù)據(jù)寫(xiě)入主機(jī)。

主機(jī)到從機(jī):從主機(jī)到從機(jī)的傳輸,Wire.write()用在調(diào)用Wire.beginTransmission()和Wire.endTransmission()之間。

Wire.write()可以寫(xiě)成:

? Wire.write(value)

value:要作為單個(gè)字節(jié)發(fā)送的值。

? Wire.write(string):

string:要作為一系列字節(jié)發(fā)送的字符串。

? Wire.write(data,length):

data:要作為字節(jié)發(fā)送的數(shù)據(jù)數(shù)組

length:要傳輸?shù)淖止?jié)數(shù)。

4. Wire.beginTransmission(address):

用途:該函數(shù)用于開(kāi)始使用給定的從地址傳輸?shù)絀2C設(shè)備。隨后,使用write()函數(shù)構(gòu)建用于傳輸?shù)淖止?jié)隊(duì)列,然后通過(guò)調(diào)用endTransmission()函數(shù)傳輸它們。

address:發(fā)送設(shè)備的7位地址。

5. Wire.endTransmission();

用途:此函數(shù)用于結(jié)束由beginTransmission()發(fā)起的從機(jī)的傳輸,并傳輸由Wire.write()排隊(duì)的字節(jié)。

6. Wire.onRequest();

用途:當(dāng)主設(shè)備使用Wire.requestFrom()請(qǐng)求來(lái)自從設(shè)備的數(shù)據(jù)時(shí),將調(diào)用此函數(shù)。這里我們可以包含Wire.write()函數(shù)來(lái)向主機(jī)發(fā)送數(shù)據(jù)。

7. Wire.onReceive();

用途:當(dāng)從設(shè)備從主設(shè)備接收數(shù)據(jù)時(shí),將調(diào)用此函數(shù)。這里我們可以包含Wire.read();用于讀取從主站發(fā)送的數(shù)據(jù)的函數(shù)。

8. Wire.requestFrom(addres,quantity);

用途:該函數(shù)在主設(shè)備中用于從從設(shè)備請(qǐng)求字節(jié)。函數(shù)Wire.read()用于讀取從設(shè)備發(fā)送的數(shù)據(jù)。

address:要從中請(qǐng)求字節(jié)的設(shè)備的7位地址

quantity:要請(qǐng)求的字節(jié)數(shù)

需要的組件

● Arduino Uno開(kāi)發(fā)板

● 1602 LCD顯示模塊

● 10K電位器

● 面包板

● 連接導(dǎo)線

電路原理

pIYBAF_bFdCADV7NAAI_4gKk-ps581.png

工作過(guò)程

這里為了演示Arduino中的I2C通信,我們使用兩個(gè)Arduino UNO和兩個(gè)1602 LCD顯示器相互連接,并在兩個(gè)arduino開(kāi)發(fā)板上使用兩個(gè)電位器來(lái)確定從主設(shè)備到從設(shè)備和從設(shè)備到主設(shè)備的發(fā)送值(0到127)通過(guò)改變電位器。

我們使用電位器將arduino引腳A0的輸入模擬值從(0到5V)轉(zhuǎn)換為模擬到數(shù)字值(0到1023)。然后,這些ADC值進(jìn)一步轉(zhuǎn)換為(0到127),因?yàn)槲覀冎荒芡ㄟ^(guò)I2C通信發(fā)送7位數(shù)據(jù)。 I2C通信通過(guò)arduino的A4和A5引腳上的兩條線進(jìn)行。

通過(guò)改變主機(jī)的電位器,從機(jī)Arduino開(kāi)發(fā)板的LCD的值將發(fā)生變化,反之亦然。

Arduino中的I2C編程

本篇文章有兩個(gè)程序,一個(gè)用于主機(jī)Arduino,另一個(gè)用于從機(jī)Arduino。

主機(jī)Arduino編程介紹

1.首先,我們需要包含用于使用I2C通信功能的Wire庫(kù)和用于使用LCD功能的LCD庫(kù)。還需要為1602 LCD定義LCD引腳。

#include《Wire.h》

#include《LiquidCrystal.h》

LiquidCrystal lcd(2, 7, 8, 9, 10, 11);

2.在void setup()函數(shù)中,

我們以波特率9600啟動(dòng)串行通信。

Serial.begin(9600);

接下來(lái)在引腳(A4,A5)上啟動(dòng)I2C通信

Wire.begin(); //Begins I2C communication at pin (A4,A5)

接下來(lái)我們?cè)?602模式下初始化LCD顯示模塊并顯示歡迎信息,然后在五秒后清除。

lcd.begin(16,2); //Initilize LCD display

lcd.setCursor(0,0); //Sets Cursor at first line of Display

lcd.print(“Circuit Digest”); //Prints CIRCUIT DIGEST in LCD

lcd.setCursor(0,1); //Sets Cursor at second line of Display

lcd.print(“I2C 2 ARDUINO”); //Prints I2C ARDUINO in LCD

delay(5000); //Delay for 5 seconds

lcd.clear(); //Clears LCD display

3.在void loop()函數(shù)中

首先,我們需要從Slave獲取數(shù)據(jù),因此我們使用requestFrom()和從地址8,我們請(qǐng)求一個(gè)字節(jié)

Wire.requestFrom(8,1);

使用Wire.read()讀取接收的值

byte MasterReceive = Wire.read();

接下來(lái),我們需要讀取連接到引腳A0的主機(jī)arduino電位器的模擬值

int potvalue = analogRead(A0);

我們將該值轉(zhuǎn)換為0到127的字節(jié)。

byte MasterSend = map(potvalue,0,1023,0,127);

接下來(lái)我們需要發(fā)送轉(zhuǎn)換后的值,使用8地址開(kāi)始從機(jī)sarduino的傳輸

Wire.beginTransmission(8);

Wire.write(MasterSend);

Wire.endTransmission();

接下來(lái),我們顯示來(lái)自從機(jī)arduino的接收值,延遲為500微秒,我們不斷接收并顯示這些值。

lcd.setCursor(0,0); //Sets Currsor at line one of LCD

lcd.print(“》》 Master 《《”); //Prints 》》 Master 《《 at LCD

lcd.setCursor(0,1); //Sets Cursor at line two of LCD

lcd.print(“SlaveVal:”); //Prints SlaveVal: in LCD

lcd.print(MasterReceive); //Prints MasterReceive in LCD received from Slave

Serial.println(“Master Received From Slave”); //Prints in Serial Monitor

Serial.println(MasterReceive);

delay(500);

lcd.clear();

從機(jī)Arduino編程介紹

1.與主機(jī)設(shè)備相同,首先我們需要包含用于使用I2C通信功能的Wire庫(kù)和用于使用LCD功能的LCD庫(kù)。還為1602 LCD定義LCD引腳。

#include《Wire.h》

#include《LiquidCrystal.h》

LiquidCrystal lcd(2, 7, 8, 9, 10, 11);

2. 在void setup()函數(shù)中,

我們以波特率9600啟動(dòng)串行通信。

Serial.begin(9600);

接下來(lái)在引腳(A4,A5)上啟動(dòng)I2C通信,從地址設(shè)定為8。這里指定從地址非常重要。

Wire.begin(8);

接下來(lái),當(dāng)從機(jī)從主機(jī)接收值并且主機(jī)請(qǐng)求從機(jī)的值時(shí),我們需要調(diào)用該函數(shù)

Wire.onReceive(receiveEvent);

Wire.onRequest(requestEvent);

接下來(lái)我們?cè)?6X2模式下初始化LCD顯示模塊并顯示歡迎信息,然后在五秒后清除。

lcd.begin(16,2); //Initilize LCD display

lcd.setCursor(0,0); //Sets Cursor at first line of Display

lcd.print(“Circuit Digest”); //Prints CIRCUIT DIGEST in LCD

lcd.setCursor(0,1); //Sets Cursor at second line of Display

lcd.print(“I2C 2 ARDUINO”); //Prints I2C ARDUINO in LCD

delay(5000); //Delay for 5 seconds

lcd.clear(); //Clears LCD display

3.接下來(lái),我們有兩個(gè)函數(shù),一個(gè)用于請(qǐng)求事件,另一個(gè)用于接收事件

對(duì)于請(qǐng)求事件

當(dāng)主機(jī)從從機(jī)請(qǐng)求值時(shí),將執(zhí)行該函數(shù)。此函數(shù)從從機(jī)電位器獲取輸入值并以7位轉(zhuǎn)換,然后將該值發(fā)送給主機(jī)。

void requestEvent()

{

int potvalue = analogRead(A0);

byte SlaveSend = map(potvalue,0,1023,0,127);

Wire.write(SlaveSend);

}

對(duì)于接收事件

當(dāng)主機(jī)通過(guò)從機(jī)地址(8)向從機(jī)發(fā)送數(shù)據(jù)時(shí),將執(zhí)行該函數(shù)。此函數(shù)從主機(jī)讀取接收的值并存儲(chǔ)在byte類(lèi)型的變量中。

void receiveEvent (int howMany)

{

SlaveReceived = Wire.read();

}

4. 在void loop()函數(shù)中:

我們?cè)贚CD顯示模塊中連續(xù)顯示主設(shè)備的接收值。

void loop(void)

{

lcd.setCursor(0,0); //Sets Currsor at line one of LCD

lcd.print(“》》 Slave 《《”); //Prints 》》 Slave 《《 at LCD

lcd.setCursor(0,1); //Sets Cursor at line two of LCD

lcd.print(“MasterVal:”); //Prints MasterVal: in LCD

lcd.print(SlaveReceived); //Prints SlaveReceived value in LCD received from Master

Serial.println(“Slave Received From Master:”); //Prints in Serial Monitor

Serial.println(SlaveReceived);

delay(500);

lcd.clear();

}

通過(guò)旋轉(zhuǎn)一側(cè)的電位器,您可以在另一側(cè)看到LCD上的變化值:

以上就是在Arduino中進(jìn)行I2C通信的方式,這里我們不僅使用兩個(gè)Arduino開(kāi)發(fā)板來(lái)演示通過(guò)I2C通信發(fā)送數(shù)據(jù),而且還演示了接收數(shù)據(jù)。所以現(xiàn)在你可以將任何I2C傳感器連接到Arduino。
編輯:hfy

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

    關(guān)注

    34

    文章

    4436

    瀏覽量

    167929
  • 電位器
    +關(guān)注

    關(guān)注

    14

    文章

    1012

    瀏覽量

    66896
  • I2C
    I2C
    +關(guān)注

    關(guān)注

    28

    文章

    1493

    瀏覽量

    124091
  • Arduino
    +關(guān)注

    關(guān)注

    188

    文章

    6473

    瀏覽量

    187423
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    I2C總線上拉電阻阻值如何確定?

    導(dǎo)讀I2C總線在產(chǎn)品設(shè)計(jì)中被廣泛應(yīng)用,盡管其結(jié)構(gòu)簡(jiǎn)單,但經(jīng)常發(fā)生上拉電阻設(shè)計(jì)不合理的問(wèn)題。本文將對(duì)I2C上拉電阻的選擇進(jìn)行簡(jiǎn)要分析。一根信號(hào)線上,通過(guò)電阻連接一個(gè)固定的高電平VCC,信
    的頭像 發(fā)表于 12-27 11:34 ?926次閱讀
    <b class='flag-5'>I2C</b>總線上拉電阻阻值如何確定?

    飛凌嵌入式ElfBoard ELF 1板卡-i2c與從設(shè)備通訊編程示例之i2c設(shè)備通信編程

    的函數(shù),用于方便地通過(guò)i2c總線進(jìn)行數(shù)據(jù)的讀寫(xiě)操作。 (一)首先,定義函數(shù)func_set_opt,用于設(shè)置i2c通信的超時(shí)時(shí)間和重試次數(shù)。它通過(guò)ioctl函數(shù)調(diào)用
    發(fā)表于 11-01 11:28

    RISC V的I2C操作

    。tsuData中,1代表10ns;Timeout中,1表示10nstLow和tHigh的1代表10ns10.1.3 軟件部分(Risc V)l? I2C通信主要包括以下幾個(gè)部分:1、主設(shè)備發(fā)送起始位(Start
    的頭像 發(fā)表于 11-01 11:06 ?241次閱讀

    TLV320AIC3263 i2c無(wú)法進(jìn)行通信,通過(guò)i2c的讀寫(xiě)函數(shù),讀寫(xiě)寄存器失敗怎么解決?

    麻煩幫忙分析下以下問(wèn)題的原因 1、i2c無(wú)法進(jìn)行通信,通過(guò)i2c的讀寫(xiě)函數(shù)(系統(tǒng)提供),讀寫(xiě)寄存器失?。? 寫(xiě)寄存器,返回-5: 讀寄存
    發(fā)表于 10-28 07:32

    I2C數(shù)據(jù)線切換延遲

    電子發(fā)燒友網(wǎng)站提供《I2C數(shù)據(jù)線切換延遲.pdf》資料免費(fèi)下載
    發(fā)表于 09-20 09:11 ?0次下載
    <b class='flag-5'>I2C</b><b class='flag-5'>數(shù)據(jù)</b>線切換延遲

    I2C基本指南

    電子發(fā)燒友網(wǎng)站提供《I2C基本指南.pdf》資料免費(fèi)下載
    發(fā)表于 09-10 09:40 ?0次下載
    <b class='flag-5'>I2C</b>基本指南

    使用MSPM0通過(guò)I2C對(duì)BQ769x2進(jìn)行控制

    電子發(fā)燒友網(wǎng)站提供《使用MSPM0通過(guò)I2C對(duì)BQ769x2進(jìn)行控制.pdf》資料免費(fèi)下載
    發(fā)表于 09-05 09:32 ?0次下載
    使用MSPM0通過(guò)<b class='flag-5'>I2C</b>對(duì)BQ769x<b class='flag-5'>2</b><b class='flag-5'>進(jìn)行</b>控制

    簡(jiǎn)單認(rèn)識(shí)I2C通信協(xié)議

    I2C(Inter-Integrated Circuit)通信協(xié)議是由飛利浦公司(現(xiàn)為恩智浦半導(dǎo)體)開(kāi)發(fā)的一種簡(jiǎn)單、雙向二線制同步串行總線協(xié)議。自1982年發(fā)布以來(lái),I2C協(xié)議因其高效、靈活和易于實(shí)現(xiàn)的特點(diǎn),在電子設(shè)備間的
    的頭像 發(fā)表于 07-25 18:06 ?1585次閱讀

    ESP-12 ESP8266如何通過(guò)I2C將SSID和RSSI信息發(fā)送到RPi / Arduino?

    我正在尋找我的 ESP-12 ESP8266,以便通過(guò) I2C 將 SSID 和 RSSI 信息發(fā)送到 RPi / Arduino。關(guān)于如何進(jìn)行的任何建議? 我查看了文檔,不禁注意到
    發(fā)表于 07-22 07:36

    在環(huán)回模式下進(jìn)行I2C通信,無(wú)法看到任何時(shí)鐘或數(shù)據(jù),為什么?

    我正在環(huán)回模式下進(jìn)行 I2C 通信,并使用示例代碼 I2C_slave_xmc4500 作為參考。 我在生成時(shí)鐘信號(hào)時(shí)遇到了問(wèn)題。 僅使用 I2C
    發(fā)表于 05-17 15:17

    I2C通訊為什么要用開(kāi)漏輸出和上拉電阻?

    一、I2C總線簡(jiǎn)介I2C(Inter-IntegratedCircuit)總線是一種雙向串行通信總線,由兩根線組成:SDA(數(shù)據(jù)線)和SCL(時(shí)鐘線)。這兩根線都是雙向的,并且是開(kāi)漏輸
    的頭像 發(fā)表于 05-16 08:10 ?6950次閱讀
    <b class='flag-5'>I2C</b>通訊為什么要用開(kāi)漏輸出和上拉電阻?

    SPI和I2C通信協(xié)議:應(yīng)用與區(qū)別

    本文深入解析了SPI和I2C這兩種通信協(xié)議的特點(diǎn)、工作原理和應(yīng)用場(chǎng)景。SPI適用于高速數(shù)據(jù)傳輸,常用于存儲(chǔ)器芯片和顯示器驅(qū)動(dòng)等領(lǐng)域;I2C適用于低速控制和傳感器
    的頭像 發(fā)表于 04-22 16:45 ?1906次閱讀

    逼真動(dòng)畫(huà)展示I2C、SPI、UART的通信過(guò)程

    到目前為止,I2C、SPI和UART等仍然是電子嵌入式設(shè)備中最常用的通信協(xié)議,本文,我們將剖析這三種協(xié)議,讓大家清楚、直觀的了解它們的功能、優(yōu)點(diǎn)和局限性,并輔以GIF動(dòng)圖展示。I2C協(xié)議I2C
    的頭像 發(fā)表于 04-12 08:27 ?1024次閱讀
    逼真動(dòng)畫(huà)展示<b class='flag-5'>I2C</b>、SPI、UART的<b class='flag-5'>通信</b>過(guò)程

    什么是I2C協(xié)議 I2C總線的控制邏輯

    在實(shí)際使用過(guò)程中,I2C比較容易出現(xiàn)的一個(gè)問(wèn)題就是死鎖 ,死鎖在I2C中主要表現(xiàn)為:I2C死鎖時(shí)表現(xiàn)為SCL為高,SDA一直為低。
    發(fā)表于 03-12 09:17 ?1129次閱讀
    什么是<b class='flag-5'>I2C</b>協(xié)議 <b class='flag-5'>I2C</b>總線的控制邏輯

    藍(lán)牙串口通訊總線——I2C/SPI/UART

    Sensor、Touch、藍(lán)牙模塊、WIFI模塊等也都兼容這三種通信協(xié)議的1種以上。那么這三條通信總線有什么區(qū)別呢?工業(yè)物聯(lián)網(wǎng)無(wú)線通信專(zhuān)業(yè)廠商為您一一細(xì)說(shuō)—— I2C:半雙工、同步、串
    的頭像 發(fā)表于 01-22 09:41 ?1735次閱讀
    藍(lán)牙串口通訊總線——<b class='flag-5'>I2C</b>/SPI/UART