Glossario dei sistemi embedded
86 parole che incontri quando inizi con i microcontrollori, ognuna spiegata in due o tre frasi semplici, con la lezione che ne parla.
A
- ACK e NACK
Dopo ogni byte I2C chi riceve porta SDA a livello basso per confermarlo (ACK). Se dopo un indirizzo la linea resta alta (NACK), nessun dispositivo ha risposto a quell’indirizzo: indirizzo sbagliato, collegamento sbagliato o alimentazione assente.
- ADC (convertitore analogico-digitale)
Una periferica che fotografa una tensione e trasforma ogni istantanea in un numero. Un ADC a 12 bit dà da 0 a 4095, quindi a 3,3 V ogni gradino vale circa 0,8 mV.
- Aggiornamento OTA (over the air)
Installare un nuovo firmware via Wi-Fi, Bluetooth o un’altra radio. I progetti sicuri tengono due spazi per il firmware, così un aggiornamento fallito non può mai lasciare il dispositivo incapace di avviarsi.
- Analizzatore logico
Uno strumento che registra molti segnali digitali insieme e decodifica bus come I2C, SPI e UART in byte, così vedi cosa è stato davvero trasmesso.
- Arduino
Una piattaforma aperta di schede (come la Uno, con il chip ATmega328P), una semplice libreria C++ e un editor. Le sue funzioni, come digitalWrite() e analogRead(), oggi girano su molti chip, compresi ESP32 e RP2040.
B
- Basso consumo e deep sleep
Le modalità di sospensione spengono quasi tutto il chip e lo risvegliano con un timer o un interrupt su un pin. L’MCU dorme quasi sempre: in deep sleep un ESP32 consuma microampere invece di decine di milliampere, ed è così che una batteria dura mesi o anni.
- Baud rate
La velocità di un collegamento UART in simboli al secondo, per esempio 9600 o 115200. I due lati devono usare la stessa; se non coincidono, nel monitor seriale compaiono caratteri senza senso.
- Bootloader
Un piccolo programma che parte per primo dopo il reset. Può caricare un nuovo firmware (via USB, seriale o radio) e poi avvia il programma principale. Chip come ESP32, RP2040 e STM32 ne hanno uno integrato nella ROM.
- Breadboard
Una basetta di plastica con contatti a molla per montare circuiti senza saldare. I cinque fori di ogni fila corta sono collegati tra loro; le lunghe linee sui lati di solito portano alimentazione e massa.
- Brownout
Un calo della tensione di alimentazione troppo basso perché il chip funzioni in modo affidabile, spesso quando il Wi-Fi o un motore assorbono un picco di corrente. Il rilevatore di brownout riavvia il chip; di solito si risolve con un alimentatore più robusto o un condensatore vicino alla scheda.
- Bus CAN
Un bus a due fili molto robusto nato nelle auto e oggi diffuso nell’industria. Ogni messaggio ha un identificatore che ne stabilisce anche la priorità; ogni nodo ha bisogno di un chip transceiver come il TJA1050 o l’SN65HVD230.
C
- Cavetto jumper (Dupont)
Un filo corto con un pin o una presa a ogni estremità, per collegare una scheda a una breadboard o a un modulo. Un jumper allentato o rotto causa molti problemi di “sensore non trovato”.
- Chip select (CS)
Il filo dell’SPI che dice a un dispositivo “sto parlando con te”. Di solito è attivo basso: i dispositivi con CS a HIGH ignorano il bus.
- Clock della periferica
Le periferiche partono spente per risparmiare energia. Prima di usare una porta o un bus devi accenderne il clock in un registro (RCC su un STM32); dimenticarlo è l’errore più comune dei principianti.
- Coda (queue)
Un oggetto dell’RTOS che passa dati in modo sicuro da un task (o da un interrupt) a un altro, in ordine. Più sicuro di una variabile globale condivisa.
- Cross-compilatore
Un compilatore che gira sul tuo computer ma produce codice per un processore diverso, come un ARM Cortex-M o il core Xtensa di un ESP32.
D
- DAC (convertitore digitale-analogico)
L’opposto di un ADC: trasforma un numero in una tensione su un pin. L’ESP32 originale ha due DAC a 8 bit; molti microcontrollori non ne hanno e usano al loro posto il PWM con un filtro.
- Datasheet
Il documento del produttore di un chip o di un modulo: tensione di alimentazione, pin, interfaccia, registri, tempi e limiti. La prima pagina dà l’essenziale; saper leggere i datasheet è una competenza base dell’embedded.
Lezione: Basi di hardware per chi viene dal software · Lezione: ADC: leggere il mondo analogico
- Debounce (antirimbalzo)
I pulsanti veri rimbalzano: per qualche millisecondo il contatto oscilla tra 0 e 1. Il debounce filtra questo effetto, nel software (aspettando che il livello sia stabile) o con un piccolo condensatore, così una pressione conta una volta sola.
- Debugger
Una sonda hardware più un software che mettono in pausa il chip per guardare variabili e registri, riga per riga. Molte schede ne hanno uno integrato, come l’ST-LINK sulle schede NUCLEO.
- DMA (accesso diretto alla memoria)
Un blocco hardware che sposta dati (campioni dell’ADC, byte della UART, pixel dello schermo) tra periferiche e memoria in background mentre la CPU fa altro, e poi genera un interrupt quando ha finito.
- Duty cycle
La parte di ogni periodo PWM in cui il pin resta acceso. Il 25% su un pin a 3,3 V dà in media circa 0,8 V.
E
- Endianness (ordine dei byte)
L’ordine dei byte in un numero più grande di un byte. I chip ARM Cortex-M, ESP32 e AVR sono little-endian (prima il byte meno significativo), mentre molti sensori inviano prima quello più significativo, quindi spesso si combinano i byte come (alto << 8) | basso.
- ESP32
Una famiglia di microcontrollori Espressif con Wi-Fi e Bluetooth integrati, molto usata per i progetti connessi. I suoi pin sopportano al massimo 3,3 V.
- esptool
Lo strumento a riga di comando di Espressif che parla con il bootloader in ROM dell’ESP32 via seriale: identifica il chip e legge, scrive e cancella la flash. BoardPilot lo usa per fare il backup e programmare le schede ESP32.
F
- Firmware
Il programma che gira su un microcontrollore. È salvato nella memoria flash e parte ogni volta che il dispositivo si accende.
- Flashing (programmazione)
Scrivere un programma compilato nella memoria flash del microcontrollore, con un programmatore o un debugger (per esempio un ST-LINK) oppure tramite il bootloader del chip via USB o seriale.
- Frequenza di campionamento
Quante volte al secondo un ADC fa una lettura. Se campioni troppo lentamente, i cambiamenti veloci si perdono o sembrano un segnale più lento (aliasing).
G
- GPIO
General-purpose input/output: un pin controllato dal tuo codice. Come uscita mette 3,3 V (5 V su schede come Arduino Uno) o 0 V sul filo; come ingresso legge se la tensione che arriva da fuori è alta o bassa.
H
- HAL (hardware abstraction layer)
Una libreria che nasconde i registri dietro chiamate di funzione come HAL_ADC_GetValue(). Più facile da leggere e da portare su un altro chip; l’accesso diretto ai registri è più piccolo e veloce.
Lezione: ADC: leggere il mondo analogico · Lezione: La strada verso senior
- Hard fault
L’eccezione che un ARM Cortex-M genera quando qualcosa va storto in modo grave, come un puntatore sbagliato o uno stack overflow. Trovarne la causa dai registri salvati è una competenza chiave da senior.
I
- I2C
Un bus a due fili (SDA per i dati, SCL per il clock) in cui molti dispositivi condividono gli stessi fili e ognuno ha un indirizzo. Si usa per sensori e piccoli display. Entrambe le linee vogliono resistenze di pull-up.
Lezione: UART, I2C e SPI · Componenti I2C e i loro indirizzi
- Indirizzo I2C
Un numero a 7 bit, scritto come 0x76, a cui risponde ogni dispositivo sul bus I2C. Molti moduli hanno un pin o un ponticello da saldare per scegliere tra due indirizzi, così due sensori uguali possono stare sullo stesso bus.
- Ingresso flottante
Un ingresso non collegato a niente. Raccoglie disturbi e legge valori casuali. Una resistenza di pull-up o pull-down gli dà un livello definito.
Lezione: Basi di hardware per chi viene dal software · Lezione: GPIO: pin in ingresso e in uscita
- Interrupt
Un segnale dall’hardware (un pin che cambia, un timer, un byte ricevuto) che mette in pausa il tuo codice, esegue una breve funzione di gestione e poi riprende esattamente da dove si era fermato. Per chi viene dal software: una callback su evento, attivata dall’hardware.
- Inversione di priorità
Un task a bassa priorità tiene un mutex che serve a un task ad alta priorità, e nel frattempo continua a girare un task a priorità media. L’ereditarietà della priorità lo risolve alzando la priorità del task basso finché tiene il blocco.
- ISR (routine di servizio dell’interrupt)
La funzione che viene eseguita quando scatta un interrupt. Deve essere breve: azzera il flag dell’interrupt, imposta una variabile ed esce. Le variabili che condivide con il codice principale devono essere volatile.
J
- JTAG e SWD
Interfacce di debug che il debugger usa per programmare il chip, fermarlo e leggerne la memoria. SWD è la versione a due fili di ARM (SWDIO e SWCLK), usata sui chip STM32, RP2040 e nRF52.
L
- Legge di Ohm
V = I × R: la tensione è uguale alla corrente per la resistenza. Conosci due valori su tre e ricavi il terzo, per esempio la resistenza che serve a un LED.
- Level shifter (traslatore di livello)
Un piccolo circuito o modulo che traduce i segnali tra logica a 5 V e a 3,3 V. Quelli bidirezionali, spesso fatti con transistor BSS138, funzionano con l’I2C.
Lezione: Basi di hardware per chi viene dal software · Modulo level shifter BSS138
- Linker script
Un file che dice al linker dove si trovano la flash e la RAM e dove va ogni parte del programma. Si modifica quando si esce dalle impostazioni predefinite, per esempio per fare spazio a un bootloader.
- Livello logico (HIGH e LOW)
La tensione che vale 1 (HIGH) o 0 (LOW). Su una scheda a 3,3 V una tensione vicina a 3,3 V si legge HIGH e una vicina a 0 V si legge LOW; le schede a 5 V come Arduino Uno usano 5 V. Le tensioni intermedie non danno una lettura garantita.
M
- Macchina a stati
Un modo di progettare la logica di un dispositivo: il dispositivo è sempre in un solo stato (inattivo, riscaldamento, errore) e gli eventi lo spostano in un altro. In C di solito è un enum con uno switch.
- Mappa di memoria
L’elenco di quali indirizzi contengono la flash, la RAM e i registri di ogni periferica. Su un STM32F4, per esempio, la flash parte da 0x0800 0000, la RAM da 0x2000 0000 e le periferiche da 0x4000 0000.
- Maschere di bit
Cambiare o controllare un solo bit senza toccare gli altri: REG |= (1 << n) lo porta a 1, REG &= ~(1 << n) lo porta a 0, REG ^= (1 << n) lo inverte e REG & (1 << n) lo controlla.
- MCU e MPU (microprocessore)
Un microprocessore (MPU) è quasi solo una CPU: la memoria e molte periferiche sono chip separati e di solito esegue un sistema operativo completo come Linux, come un Raspberry Pi 4. Un microcontrollore ha tutto su un chip, ha kilobyte di memoria e si avvia in microsecondi.
- Memoria flash
Memoria che conserva i dati anche senza alimentazione. In un microcontrollore contiene il programma e a volte le impostazioni salvate. Scrivere un programma al suo interno si chiama flashing.
Lezione: Che cos’è un microcontrollore? · Lezione: Il quadro completo
- Microcontrollore (MCU)
Un solo chip che contiene un piccolo computer intero: una CPU, memoria flash per il programma, RAM per le variabili e periferiche come GPIO, timer, ADC, UART, I2C e SPI.
- Multimetro
Uno strumento portatile che misura tensione, corrente, resistenza e continuità. È il primo attrezzo per verificare che un’alimentazione sia davvero 3,3 V o che due punti siano davvero collegati.
- Mutex
Un blocco che protegge una risorsa condivisa, come la UART, così due task non la usano nello stesso momento. I mutex con ereditarietà della priorità evitano l’inversione di priorità.
O
- Open-drain (open-collector)
Un’uscita che può solo portare una linea a massa o lasciarla libera. Una resistenza di pull-up la riporta a HIGH. L’I2C funziona così, per questo più dispositivi possono condividere un filo senza conflitti.
- Oscilloscopio
Uno strumento che disegna una tensione nel tempo. Mostra quello che un analizzatore logico non vede: fronti lenti, rumore, oscillazioni e cali dell’alimentazione.
P
- Partitore di tensione
Due resistenze in serie che dividono una tensione nel rapporto dei loro valori: Vout = Vin × R2 / (R1 + R2). Con R1 = 1 kΩ e R2 = 2 kΩ, 5 V diventano circa 3,3 V, sicuri per un pin a 3,3 V.
- Periferica
Un blocco hardware dentro il microcontrollore che fa un lavoro da solo: GPIO, timer, ADC, UART, I2C, SPI, DMA. Lo controlli scrivendo nei suoi registri.
Lezione: Che cos’è un microcontrollore? · Lezione: UART, I2C e SPI
- Piedinatura (pinout)
La mappa di cosa fa ogni pin di una scheda o di un chip: alimentazione, massa, numeri GPIO, pin dei bus e pin speciali da evitare.
Lezione: GPIO: pin in ingresso e in uscita · Piedinature di 13 schede
- Pin di strapping
Un pin che il chip legge al reset per decidere come avviarsi. Sull’ESP32 sono i GPIO 0, 2, 5, 12 e 15; il GPIO 12 a HIGH al reset seleziona la tensione sbagliata per la flash e la scheda può non avviarsi.
- Polling
Controllare un registro o un pin di continuo in un ciclo per vedere se è successo qualcosa. È semplice, ma tiene occupata la CPU; l’alternativa sono gli interrupt.
- Prescaler e auto-reload (PSC, ARR)
Il prescaler rallenta il clock che alimenta un timer; il valore di auto-reload è il punto in cui il contatore riparte da 0. Eventi al secondo = clock / (PSC + 1) / (ARR + 1): 16 MHz / 16000 / 1000 = 1.
- PWM (modulazione a larghezza di impulso)
Accendere e spegnere un pin molto velocemente scegliendo per quanto tempo resta acceso. Un LED o un motore sentono la media, così il PWM regola la luminosità dei LED e la velocità dei motori. A commutare è un timer, non la CPU.
R
- RAM (SRAM)
Memoria di lavoro veloce per le variabili e lo stack. Perde il contenuto quando manca l’alimentazione. I microcontrollori ne hanno kilobyte, non gigabyte.
Lezione: Che cos’è un microcontrollore? · Lezione: Il quadro completo
- Raspberry Pi Pico
Una piccola scheda a microcontrollore di Raspberry Pi con il chip RP2040 (la Pico 2 ha l’RP2350). A differenza delle altre schede Raspberry Pi non esegue Linux. Si programma in C/C++ con il Pico SDK, in MicroPython o con Arduino.
- Registro
Un indirizzo di memoria che controlla l’hardware o ne riporta lo stato. Ogni bit accende una funzione o mostra un flag, come “questo pin è un’uscita” o “il dato è pronto”.
Lezione: Il C per l’embedded · Lezione: Che cos’è un microcontrollore?
- Resistenza di limitazione
La resistenza in serie a un LED. Prende la tensione che il LED non fa cadere, così la corrente resta sicura: R = (alimentazione − tensione del LED) / corrente. Per un LED rosso a 3,3 V e 5 mA: (3,3 − 2,0) V / 0,005 A = 260 Ω, quindi si compra una da 270 Ω.
- Resistenza di pull-down
Una resistenza tra un pin e la massa, così il pin legge LOW quando niente lo pilota. L’opposto di una pull-up.
- Resistenza di pull-up
Una resistenza tra un pin e la tensione di alimentazione, così il pin legge HIGH quando niente lo pilota. Un pulsante o un dispositivo open-drain lo porta poi a LOW. Quasi tutti i chip hanno pull-up interne deboli (INPUT_PULLUP); l’I2C ne vuole di esterne.
Lezione: Basi di hardware per chi viene dal software · Lezione: GPIO: pin in ingresso e in uscita
- Risoluzione dell’ADC
In quanti gradini l’ADC divide il suo intervallo: 10 bit danno 1024 gradini, 12 bit ne danno 4096. Più bit significa gradini più fini, non per forza una lettura più precisa: contano anche il rumore e la tensione di riferimento.
- RTOS (sistema operativo real-time)
Un piccolo sistema operativo per microcontrollori, come FreeRTOS o Zephyr, che esegue più task in base alla priorità. Real-time non significa veloce ma prevedibile: il task importante viene sempre eseguito entro un tempo noto.
S
- Scheduler
La parte di un RTOS che esegue il task più importante tra quelli pronti, anche se deve metterne in pausa un altro. È guidato da un interrupt del timer (il tick).
- Schema elettrico
Un disegno di come sono collegati i componenti, non di dove si trovano. I fili che si incontrano con un punto sono collegati; le linee che si incrociano senza punto no. Le etichette con lo stesso nome (3V3, GND, SDA) sono collegate anche senza una linea.
- SDA e SCL
Le due linee dell’I2C: SDA porta i dati, SCL il clock del controller. Invertirle è uno degli errori di collegamento più comuni: a quel punto sul bus non risponde nessuno.
- SDK
Software development kit: librerie, header, esempi e strumenti del produttore per un chip, come ESP-IDF per l’ESP32 o il Pico SDK per l’RP2040.
- Semaforo
Un segnale dell’RTOS con un contatore: un task o un interrupt lo rilascia, un altro task lo aspetta. Si usa per dire “il dato è pronto” o per limitare quanti task usano un gruppo di risorse.
- Sistema embedded
Un piccolo computer integrato in un dispositivo per fare un solo lavoro, come un termostato, una lavatrice o i freni di un’auto. Il suo cuore di solito è un microcontrollore.
Lezione: Che cos’è un microcontrollore? · Lezione: Il quadro completo
- SPI
Un bus veloce con un clock condiviso (SCK), due linee dati (MOSI dal controller, MISO verso il controller) e un filo di chip select per ogni dispositivo. Si usa per schede SD, display e memorie flash.
- Stack
Un’area della RAM dove le chiamate di funzione tengono le variabili locali e gli indirizzi di ritorno. Cresce e si riduce a ogni chiamata; se cresce troppo sovrascrive altri dati (stack overflow).
- STM32
Una grande famiglia di microcontrollori ARM Cortex-M di STMicroelectronics, molto usata nell’industria. Le schede NUCLEO e Black Pill sono un modo economico per iniziare; gli esempi con i registri di queste lezioni sono scritti per un STM32.
Lezione: GPIO: pin in ingresso e in uscita · Lezione: Timer e interrupt · Piedinatura NUCLEO-F401RE
T
- Tabella dei vettori
Una tabella all’inizio della flash che dice alla CPU dove inizia lo stack, dove si trova il codice di avvio e quale funzione gestisce ogni interrupt.
Lezione: Che cos’è un microcontrollore? · Lezione: Timer e interrupt
- Task
In un RTOS, una funzione con il proprio ciclo infinito e il proprio stack, come un thread. È lo scheduler a decidere quale task gira.
- Timer
Un contatore hardware che conta i colpi di clock da solo mentre la CPU fa altro. Misura il tempo, genera un interrupt a intervalli esatti o produce il PWM.
- Tipi a larghezza fissa (uint8_t, uint32_t)
Tipi C di <stdint.h> con la dimensione nel nome. Il codice embedded li usa perché un semplice int cambia dimensione da chip a chip, mentre un registro ha una dimensione esatta.
- Toolchain
L’insieme di strumenti che trasforma il tuo codice in un file firmware: compilatore, assembler, linker e librerie per il tuo chip, per esempio arm-none-eabi-gcc per STM32.
U
- UART (porta seriale)
Comunicazione seriale tra due dispositivi: il TX di ognuno va all’RX dell’altro e non c’è un clock comune, quindi entrambi devono usare la stessa velocità. Si usa per i messaggi di debug verso il computer, i GPS e molti moduli radio.
- UF2
Un formato di file firmware per programmare trascinando: la scheda compare come chiavetta USB e ci copi sopra il file .uf2. Il Raspberry Pi Pico lo fa se tieni premuto BOOTSEL mentre lo colleghi.
V
- Valori massimi assoluti
Limiti del datasheet da non superare mai, nemmeno per un istante, pena il danneggiamento del chip. Non sono condizioni di lavoro: l’uso normale deve restare nelle condizioni operative consigliate.
- volatile
Una parola chiave del C che dice al compilatore di rileggere il valore dalla memoria ogni volta, perché l’hardware può cambiarlo a sua insaputa. Obbligatoria per i registri e per le variabili condivise con gli interrupt; un volatile mancante spesso rompe solo le build ottimizzate.
W
- Watchdog
Un timer che riavvia il chip se il codice smette di “dargli da mangiare” in tempo. Un dispositivo bloccato si riprende da solo.
Nell’app le lezioni prendono vita
Nell’app le lezioni hanno demo interattive ed esercitazioni pratiche verificate sulla tua scheda. Queste pagine sono la versione da leggere: le demo sono descritte a parole e le esercitazioni richiedono l’app.