I2C, SPI i UART: què són i quan fer servir cada bus
Dins de gairebé qualsevol producte electrònic, els xips necessiten parlar entre ells: el microcontrolador llegeix un sensor, controla una pantalla o desa dades en una memòria. Per a aquesta conversa s'utilitzen busos de comunicació sèrie, i els tres més habituals són UART, SPI i I2C. Escollir l'adequat afecta el nombre de pins, la velocitat, el consum i la complexitat del firmware.
UART: el bus sèrie més senzill
UART (Universal Asynchronous Receiver-Transmitter) comunica dos dispositius punt a punt amb només dues línies: TX (transmissió) i RX (recepció). És asíncron: no hi ha línia de rellotge, així que tots dos extrems han d'acordar prèviament la velocitat (el baud rate, p. ex. 115200 bps).
- Avantatges: molt simple, només 2 fils, ideal per a connexions un a un.
- Límits: només connecta dos dispositius, velocitat moderada i sensible a errors si els rellotges no coincideixen.
- Quan fer-lo servir: consola de depuració, GPS, mòduls Bluetooth/WiFi, comunicació amb un PC.
SPI: el més ràpid
SPI (Serial Peripheral Interface) és un bus síncron mestre-esclau d'alta velocitat amb quatre línies: MOSI, MISO, SCK (rellotge) i CS (selecció de xip). És full-duplex: envia i rep alhora. Cada esclau necessita la seva pròpia línia CS, així que més dispositius signifiquen més pins.
- Avantatges: molt ràpid (desenes de MHz), full-duplex, sense adreces.
- Límits: molts pins (una CS per dispositiu), pensat per a distàncies curtes dins de la placa.
- Quan fer-lo servir: pantalles, memòries flash, ADC ràpids, targetes SD, sensors d'alta taxa de dades.
I2C: molts dispositius, només dos fils
I2C (Inter-Integrated Circuit) és un bus síncron adreçable que connecta molts dispositius amb només dues línies compartides: SDA (dades) i SCL (rellotge). Cada dispositiu té una adreça única, i les dues línies necessiten resistències de pull-up.
- Avantatges: només 2 fils per a molts dispositius, adreçament integrat, estalvia pins.
- Límits: més lent que SPI, half-duplex, requereix pull-ups i bon disseny si el bus és llarg.
- Quan fer-lo servir: sensors (temperatura, IMU, pressió), EEPROM, expansors d'E/S, RTC.
Taula comparativa: I2C vs SPI vs UART
| Característica | UART | SPI | I2C |
|---|---|---|---|
| Fils | 2 (TX, RX) | 4 (MOSI, MISO, SCK, CS) | 2 (SDA, SCL) |
| Rellotge | No (asíncron) | Sí (síncron) | Sí (síncron) |
| Velocitat típica | Baixa-mitjana | Molt alta (desenes de MHz) | Mitjana (100k–3,4M) |
| Nre. de dispositius | 2 (punt a punt) | Diversos (1 CS per esclau) | Molts (per adreça) |
| Dúplex | Full-duplex | Full-duplex | Half-duplex |
| Millor per a | Enllaços 1 a 1, depuració | Velocitat i cabal de dades | Molts sensors amb pocs pins |
Com escollir i errors comuns
- Si necessites velocitat (pantalla, memòria), tria SPI. Si necessites connectar molts sensors estalviant pins, tria I2C. Per a un enllaç simple un a un o depuració, UART.
- En I2C, no oblidis les resistències de pull-up a SDA i SCL: és el fallada més típica.
- Compte amb els nivells de tensió (3,3 V vs 5 V): un desajust pot malmetre el xip o impedir la comunicació.
- SPI i I2C són per a distàncies curtes dins de la placa; per a trams llargs o entre equips, valora RS-485 o CAN.
Conclusió
UART, SPI i I2C resolen problemes diferents: simplicitat, velocitat o molts dispositius amb pocs pins. Escollir bé des del principi evita redissenys de placa i mals de cap en el firmware. A Regular Solids integrem i depurem cada dia busos I2C, SPI, UART, CAN i RS-485 entre sensors, perifèrics i sistemes encastats. Si tens un producte amb diversos xips que s'han d'entendre, parlem-ne.