L'UART : Contrôleur matériel pour communications port série
L'UART (Universal Asynchronous Receiver/Transmitter) est le circuit matériel dédié — soit un CI discret (ex: 16550, 16C550, SC16IS7xx) soit un bloc IP inside microcontrôleur/SoC — qui implémente le protocole série asynchrone (bit de start, 5–9 bits data, parité, bits stop) et gère la signalisation électrique (RS-232, RS-485, TTL, LVTTL).
Fonctions principales
- Parallele-vers-Série (TX) : Prend octet depuis CPU/bus data → charge dans registre décalage TX → sort bits à baud rate avec trame start/stop/parité.
- Série-vers-Parallele (RX) : Détecte bit start → échantillonne ligne à 16x baud (suréchantillonnage) → décale bits dans registre RX → vérifie parité/stop → assert interruption / positionne flag → CPU lit octet.
- Générateur Baud Rate : Diviseur verrou (DLL/DLM) divise horloge système (1,8432 MHz, 14,7456 MHz, 48 MHz, etc.) vers baud cible (300–921600+).
- Tampons FIFO (16550A+) : FIFO 16 octets TX/RX réduisent surcharge interruptions CPU. Niveaux déclenchement programmables (1, 4, 8, 14).
- Contrôle flux : Matériel (RTS/CTS, DTR/DSR) ou Logiciel (XON/XOFF) via registre contrôle modem.
- Statut modem / Contrôle ligne : Entrées DCD, RI, DSR, CTS ; Sorties DTR, RTS, OUT1, OUT2, Loopback.
UART vs « Port Série »
- UART : Le moteur matériel (silicium).
- Port Série : L'interface système (COM1, ttyS0, /dev/ttyUSB0) présentée par OS/driver, comprenant UART + transceiver (MAX232, MAX485, CP210x, FT232) + connecteur (DB9, RJ45, USB, header).
Implémentations courantes
- PC (Legacy) : Puce Super I/O (ITE, Nuvoton, SMSC) → UART compatible 16550 → DB9 (RS-232).
- Adaptateur USB-Série : FTDI FT232R, Silicon Labs CP2102, Prolific PL2303, CH340 — contrôleur USB device + UART intégré + transceiver.
- Microcontrôleur (STM32, ESP32, AVR, PIC, RP2040) : Plusieurs UART périphériques on-chip (USART, LPUART). TTL direct (3,3V/5V).
- FPGA/ASIC : Soft IP core (Xilinx UARTlite, Intel Avalon UART) ou macro durci.
Registres clés (Standard 16550)
| Offset (DLAB=0) | Registre | Fonction |
|---|---|---|
| 0x00 | RBR / THR | Receive Buffer / Transmit Holding |
| 0x01 | IER | Interrupt Enable (RX, TX, Line Status, Modem Status) |
| 0x02 | IIR / FCR | Interrupt ID (Read) / FIFO Control (Write) |
| 0x03 | LCR | Line Control (Word Length, Stop Bits, Parity, DLAB, Break) |
| 0x04 | MCR | Modem Control (DTR, RTS, OUT1, OUT2, Loop) |
| 0x05 | LSR | Line Status (DR, OE, PE, FE, BI, THRE, TEMT, FIFOERR) |
| 0x06 | MSR | Modem Status (DCD, RI, DSR, CTS, Delta bits) |
| 0x07 | SCR | Scratchpad |
| 0x00/0x01 (DLAB=1) | DLL / DLM | Divisor Latch Low/High (Baud Rate) |
En résumé : L'UART est le cheval de bataille silicium ; le port série est l'abstraction OS. Pas d'UART = pas de comms série (bit-banging GPIO excepté).
