UART vs SPI vs I2C

RX

RX

TX

TX

VCC

GND

GND

VCC

ESP8266

SENZOR

RX

RX

TX

TX

VCC

GND

GND

VCC

ESP8266

SENZOR

Dátove vodiče RX a TX sa vždy zapájajú do kríža

RX

RX

TX

TX

VCC

GND

GND

VCC

ESP8266

SENZOR

RX

TX

GND

VCC

DISPLEJ

Zapojenie dvoch UART zariadení

RX1

RX

TX

TX1

VCC

GND

GND

VCC

ESP8266

SENZOR

RX

TX

GND

VCC

DISPLEJ

Zapojenie dvoch UART zariadení vyžaduje 2 samostatné porty

UART1

UART2

RX2

TX2

Čo ak nemáme dostatok

UART pinov?

SPI

Serial Peripheral Interface

RX

RX

TX

TX

VCC

GND

GND

VCC

ESP8266

SENZOR

MOSI

MISO

MOSI

MISO

MISO - Master Input Slave Output

MOSI - Master Output Slave Input

MISO

MISO

MOSI

MOSI

VCC

GND

GND

VCC

ESP8266

SENZOR

MASTER

SLAVE 1

SENZOR

SLAVE 2

MISO

MOSI

GND

VCC

SCLCK

SS

SS1

SCLCK

SCLCK

SS

SS2

SSn

SPI

...

SPI

MOSI - Dáta posielané master zariadenim (ESP8266)

MISO - Dáta posielané slave zariadenim (senzor)

SCLCK - Source clock - hodinový signál, slúži na synchronizáciu zariadeni

CS/SS - Slave Select, ide o negovaný signál pomocou ktorého master určuje s ktorým slavom bude komunikovať

Čo ak nemáme dostatok

UART pinov?

SPI

I2C

Inter Integrated Circuit

SCK

SCK

SDA

SDA

VCC

GND

GND

VCC

ESP8266

SENZOR

I2C

SCK - Serial Clock

SDA - Serial Data

MASTER

SLAVE

pull-up

Pull-up rezistor zabezpečuje log 1 na linke. Master/slave generujú log 0

SCK

SCK

SDA

SDA

VCC

GND

GND

VCC

ESP8266

SENZOR

MASTER

SLAVE 1

SENZOR

SLAVE 2

SCK

SDA

GND

VCC

I2C

max 128

slave zariadení

max 128

slave zariadení

Unikátna adresa

UART SPI I2C
Počet vodičov 3 3+n 3
Počet slave zariadení 1 n 128
Rýchlosť 14 kbit/s
1 mbit/s
8 mbit/s 
24 mbit/s
100 kbit/s
400 kbit/s
1 mbit/s
3,2 mbit/s
Vzdialenosť 100m 5m 2m
Použitie uC <> uC
uC <> PC
HMI,
LoRa, GSM, GPS...
SD karty,
displeje,
akcelerometre a iné rýchlo meniace sa senzory
EEPROM,
A/D, D/A prevodníky,
multiplexery,
pomalé senzory

UART

I2C

PWM

SPI

Teplomer

RFID čítačka

Servo

Displej

WiFi

MQTT

SPI.begin();
writeRegister(address, data);
readRegister(address, number_of_bytes);

SPI.begin();
pinMode(chipSelectPin, OUTPUT);

//Configure SCP1000 for low noise configuration:
writeRegister(0x02, 0x2D);
writeRegister(0x01, 0x03);
writeRegister(0x03, 0x02);

// give the sensor time to set up:
delay(100);

//Select High Resolution Mode
writeRegister(0x03, 0x0A);

int tempData = readRegister(0x21, 2);
// convert the temperature to celsius and display it:
float realTemp = (float)tempData / 20.0;

//Read the pressure data highest 3 bits:
byte  pressure_data_high = readRegister(0x1F, 1);
pressure_data_high &= 0b00000111;

//Read the pressure data lower 16 bits:
unsigned int pressure_data_low = readRegister(0x20, 2);

//combine the two parts into one 19-bit number:
long pressure = ((pressure_data_high << 16) | pressure_data_low) / 4;

SPI.begin();
writeRegister(address, data);
readRegister(address, number_of_bytes);

Libraries

#include <SPI.h> 
#include <BME280.h>

#define BME_CS 3;

BME280 bme(BME_CS);

bme.begin();

double pressure = bme.readPressure();






Serial.println(pressure);

Čo by ste si mali zapamätať

  • UART = sériova linka, používa sa hlavne na prepojenie PC a embedded zariadenia
  • SPI, I2C= umožnujú komunikáciu viacerých slave zariadení (senzorov) po jednej zbernici
  • Porovnať UART, SPI, I2C
  • Pre mnoho modulov/senzorov existujú knižnice uľahčujúce komunikáciu

Nasledujúce protokoly majú veľa spoločného a predsa sa v mnohom odlišujú.

UART, USB, RS232, RS485, Modbus, CAN-BUS

  1. Porovnajte ich podľa ľubovoľného kritéria/kritérií
  2. Napíšte, kde sa používajú
  3. Skúste nájsť na www.aliexpress.com nejaký modul/senzor ku každému hore uvedenému protokolu + SPI a I2C
  4. Skúste napísať na čo sa dá nájdený modul/senzor použiť

Dobrovoľná domáca úloha

FORMA: ľubovoľná (txt, word, excel...)

HODNOTENIE: známka na stupnici 1 až 2 v prípade 2 máte možnosť odmietnuť zapísať si známku.

TERMÍN: do Nedele 6.2.2022 do 23:59

UART vs I2C vs SPI

By tomaslorinc

UART vs I2C vs SPI

  • 593