Una decisione fondamentale nell’architettura dei sistemi embedded è se il core di calcolo del dispositivo debba essere una Microcontroller Unit (MCU), una Microprocessor Unit (MPU) o un processore Crossover. Sebbene tutti eseguano istruzioni software per controllare l’hardware, la loro architettura interna, le gerarchie di memoria e i paradigmi software sono fondamentalmente diversi. Scegliere la categoria sbagliata per un prodotto comporta tipicamente sforamenti catastrofici dei costi, superamento dei limiti di consumo energetico o l’incapacità di soddisfare i requisiti di temporizzazione deterministica.
1. Microcontroller Unit (MCU)
Una MCU (ad es. la serie ARM Cortex-M, ESP32, STM32, PIC32) è progettata per il controllo deterministico in tempo reale. È sostanzialmente un intero computer sintetizzato su un singolo pezzo di silicio.
- Architettura di memoria: le MCU integrano SRAM interna (per i dati) e memoria Flash interna (per il codice). Il codice è tipicamente eseguito direttamente dalla Flash on-chip (Execute-In-Place, o XIP). Ciò garantisce tempi di esecuzione altamente prevedibili, poiché le latenze di accesso alla memoria sono note e minime.
- Sistema operativo: le MCU eseguono codice “bare-metal” (un singolo ciclo infinito
while(1)con routine di servizio degli interrupt) oppure un Real-Time Operating System (RTOS) come FreeRTOS o Zephyr. - Metriche di prestazione: operano nell’ordine delle decine o centinaia di megahertz (ad es. da 16 MHz a 600 MHz).
- Consumo energetico: le MCU eccellono nelle applicazioni a basso consumo. Possono entrare in modalità di sleep profondo consumando microampere (µA) a una sola cifra e risvegliarsi per elaborare un interrupt in pochi microsecondi.
- Casi d’uso: controllo motori (algoritmi FOC), sensori IoT a basso consumo, dispositivi indossabili e sistemi di sicurezza hard real-time (ad es. freni ABS).
2. Microprocessor Unit (MPU)
Una MPU (ad es. la serie ARM Cortex-A, NXP i.MX, Broadcom BCM283x nel Raspberry Pi) è progettata per throughput elevato ed elaborazione applicativa complessa. A differenza di una MCU, una MPU non è un sistema autonomo; è il core di elaborazione centrale che richiede chip di supporto esterni.
- Architettura di memoria: le MPU non dispongono di memoria interna sufficiente per archiviare o eseguire applicazioni complesse. Si affidano a memoria esterna ad alta densità (RAM DDR3/DDR4 per l’esecuzione e Flash eMMC/NAND per l’archiviazione non volatile). Poiché l’accesso alla memoria esterna è lento, le MPU sfruttano in modo intensivo le strutture di cache L1/L2.
- Sistema operativo: le MPU dispongono di una Memory Management Unit (MMU). Questo componente hardware traduce gli indirizzi di memoria virtuale in indirizzi fisici, rendendo possibile l’esecuzione di sistemi operativi ricchi e general-purpose come Embedded Linux, Android o Windows IoT.
- Metriche di prestazione: operano nell’ordine dei gigahertz (ad es. da 1 GHz a oltre 3 GHz) e sono spesso multi-core (ad es. Cortex-A53 quad-core).
- Consumo energetico: le MPU consumano significativamente più energia (spesso misurata in Watt, non in milliwatt o microwatt) e di solito richiedono complessi Power Management IC (PMIC) per sequenziare molteplici linee di tensione. I tempi di avvio si misurano in secondi, non in microsecondi.
- Casi d’uso: display smart (HMI), gateway di rete, elaborazione/streaming video e applicazioni che richiedono stack di rete complessi (TLS/SSL, Wi-Fi 6) o software containerizzato di terze parti (Docker).
3. Processori Crossover
Negli ultimi anni, la netta distinzione tra MCU e MPU si è sfumata con l’avvento dei processori “Crossover” (ad es. la serie NXP i.MX RT). Questi dispositivi presentano le elevate frequenze di clock di una MPU (fino a 1 GHz) ma mantengono l’architettura deterministica, basata su SRAM e priva di MMU di una MCU. Sono concepiti per carichi di lavoro real-time estremi (come il DSP audio di fascia alta o l’EtherCAT industriale) in cui si preferisce un RTOS a Linux, ma le velocità tradizionali delle MCU sono insufficienti.