Raspberry Pi non ha bisogno di alcuna presentazione: si tratta di un single-board computer ideato da Eben Upton che permette di realizzare numerosi progetti nel campo della prototipazione industriale, dell’automazione, della didattica, dell’entertainment.
Un prodotto come Raspberry Pi è richiestissimo perché è completo e versatile, supporta adeguatamente il sistema Linux e, come detto, può essere utilizzato per innumerevoli progetti. Inoltre, costa solamente 38 euro circa nella versione con 1 GB di memoria RAM, intorno ai 59 euro in quella con 4 GB: su Amazon Italia si trovano sia la scheda che alcuni kit interessanti.
Raspberry Pi 4, presentata a giugno 2019 (Raspberry Pi 4, il nuovo single-board computer è un vero e proprio PC) non solo è più veloce delle precedenti versioni ma dispone anche di interfacce più performanti. Il processore è stato inoltre notevolmente ottimizzato per rispondere alle necessità più evolute degli utenti.
Come i suoi predecessori, la scheda del Raspberry Pi 4 ha le dimensioni di una carta di credito.
Il Raspberry originale del 2012 utilizzava un processore Broadcom BCM2835, inizialmente sviluppato per i set-top box ovvero per i sintonizzatori TV e per riproduttori multimediali da salotto. Poiché l’elaborazione delle informazioni video era lo scopo principale del chip BCM2835 (con la richiesta di velocità di trasferimento dati con la memoria relativamente elevate), anche il controller che collega processore e DRAM era integrato nel core (famiglia VideoCore di Broadcom).
Questa è una differenza importante rispetto ai tipici SoC usati negli smartphone: il controller di memoria è strettamente accoppiato ai core della CPU.
Fino al successivo BCM2837, il controller di memoria poteva controllare un massimo di 1 GB di memoria SDRAM DDR2 di tipo LP.
Il BCM2711 del Raspberry Pi 4 ha un controller di memoria completamente nuovo e usa chip SDRAM LPDDR4 saldati sulla scheda, come quelli presenti negli attuali smartphone. Attualmente può controllare 1, 2 o 4 GB di RAM, a seconda della versione scelta dall’utente, come accennato in apertura.
Il processore che rappresenta il cuore pulsante del Raspberry Pi 4 usa ancora quattro core come i predecessori ma si tratta di ARM Cortex-A72: un netto balzo in avanti rispetto ai Cortex-A53 usati dal Raspberry Pi 3 che possono al massimo eseguire solamente due comandi per ciclo di clock.
Con i Cortex-A72 è possibile gestire fino a tre comandi per ciclo di clock ed è possibile aumentare significativamente il numero di comandi oggetto di decodifica (instruction fusing). Durante la fase di dispatching, il processore può ulteriormente suddividere i comandi e distribuirne fino a 5 per unità di esecuzione.
Una stima approssimativa indica che un Cortex-A72 è fino al 50% più veloce per ciclo di clock rispetto a un A53.
Oltre alla cache integrata nei VideoCore di Broadcam, l’A72 può contare su una RAM più veloce e una cache migliorata. Inoltre, i core del BCM2711 possono lavorare fino a 1,5 GHz, frequenza leggermente superiore rispetto agli 1,4 GHz del BCM2837.
Il fatto che le prestazioni siano migliorate pur non aumentando i consumi, è dovuto al processo costruttivo a 28 nm che Broadcom ha abbracciato per realizzare i suoi BCM2711 (i predecessori erano realizzati a 40 nm).
Per evitare il fenomeno del thermal throttling ovvero la riduzione significativa delle performance dovuta a un surriscaldamento del processore, il BCM2711 integra un sistema di controllo delle temperature che entra in funzione ogniqualvolta il chip dovesse diventare troppo caldo.
Con la scelta di un processore basato su Cortex-A72, il Raspberry Pi introduce alcune vulnerabilità di sicurezza (i.e. Spectre) assenti negli A53. Queste lacune, tuttavia, possono essere tranquillamente gestite lato kernel senza perdite apprezzabili in termini di performance.
Il processore BCM2711, come accennato in precedenza, utilizza ancora la tecnologia VideoCore di Broadcom: le GPU 3D e 2D, il motore di visualizzazione, i decoder e codificatori video (MPEG-4/H.264, HEVC/H.265).
Ciò è dovuto non solo allo stretto rapporto tra la Raspberry Pi Foundation e Broadcom – Eben Upton lavora per Broadcom – ma anche alla ampia documentazione disponibile sul funzionamento di VideoCore.
Un aspetto, quest’ultimo, che consente lo sviluppo di driver opensource, specialmente per il 3D. Basti pensare che per il vecchio VideoCore IV (VC4), che è stato utilizzato fino al Raspberry Pi 3+, così come per il più recente VideoCore VI (VC6) del BCM2711, sono driver opensource nella collezione di driver Mesa.
Si tratta di un vantaggio enorme rispetto ad altri core grafici impiegati sugli smartphone: ARM Mali e Imagination PowerVR non sono aperti, motivo per cui i driver opensource sono sviluppati partendo da complesse e laboriose attività di reverse engineering.
Il VC6 del BCM2711 mescola elementi vecchi e nuovi: “inedita” è l’unità 3D, compatibile con OpenGL ES 3.0 e circa quattro volte più veloce della vecchia GPU compatibile OpenGL ES 2.0. La sezione 3D dispone di una propria MMU (Memory Management Unit) che permette di definire a quali aree di memoria si può accedere direttamente.
A proposito di memoria, rispetto al BCM2837, la velocità di trasferimento è approssimativamente raddoppiata: un aspetto questo che va a vantaggio sia dell’unità grafica che della CPU. Il controller di memoria può indirizzare fino a 16 GB (234 bit). Secondo Upton, attualmente non c’è nessun chip che può indirizzare 8 GB – figurarsi 16 GB – in grado di replicare layout e quindi dimensioni complessive del Raspberry Pi 4.
Tra le altre novità il display engine capace di controllare due porte HDMI così come la Display Serial Interface (DSI), la Display Parallel Interface (DPI) che può essere utilizzata opzionalmente via GPIO e l’uscita FBAS (composita).
Per risparmiare spazio sul Raspberry Pi 4, le porte HDMI sono in formato micro-HDMI: adattatori o adattatori economici possono essere utilizzati per collegare monitor e TV dotati di ingressi HDMI di dimensioni normali.
Le uscite HDMI 2.0 possono gestire contenuti 4K elaborati dal nuovo decoder H.265 a 60 fps e con una profondità di colore pari a 10 bit.
In linea di massima Raspberry Pi 4 dovrebbe gestire anche contenuti HDR: secondo gli sviluppatori di LibreELEC, tuttavia, i video HDR potranno diventare utilizzabili solo usando il kernel Linux versione 5.2. A bordo della scheda è presente anche un’unità hardware in grado di decodificare del flusso video VP9 anche se secondo Upton su questo versante siamo ancora in fase di sperimentazione.
Cosa cambia con Raspberry Pi 4 sul versante della connettività
Uno dei principali svantaggi dei vecchi Raspberry consisteva nell’utilizzo di un’unica connessione USB 2.0 sia per il controller Ethernet che per tutte le porte USB.
Con il Raspberry Pi 3+ questo schema è diventato un collo di bottiglia in quanto l’interfaccia Ethernet è di fatto limitata a un terzo delle sue prestazioni effettive: solo circa 30 MB/s invece di circa 100 MB/s. I predecessori di Raspberry Pi 4 non erano quindi adatti per l’uso come server o per lo storage di rete (NAS).
Il nuovo Raspberry risolve il problema: il controller Gigabit Ethernet è collegato tramite l’interfaccia Reduced Gigabit Media Independent Interface (RGMII) al chip “PHY” Broadcom BCM54213PE, al quale è connessa la presa RJ45. La scheda permette quindi, finalmente, di raggiungere la massima velocità offerta dall’interfaccia Gigabit Ethernet.
Il SoC contiene poi un controller PCI-Express che fornisce una pista PCIe-2.0 capace di “muovere” fino a 500 MB/s. Anche il controller PCI-Express è collegato alla RJ45.
Anche le microSD possono raggiungere prestazioni velocistiche più elevate dal momento che l’interfaccia ora supporta la modalità DDR50 permettendo di trasferire fino a 50 MB/s.
Sequenza di avvio nel Raspberry Pi 4
Nel Raspberry Pi i core ARM non sono i primi a diventare attivi all’avvio del sistema. Il sistema, infatti, avvia per prima la CPU VideoCore Broadcom della quale abbiamo parlato in precedenza.
Un primo boot loader, il cui codice risiede in una ROM interna al processore, effettua le operazioni iniziali quindi viene disposto il caricamento di un secondo bootloader (bootcode.bin
) dalla scheda SD. Il suo contenuto viene posto nella cache L2 del VideoCore.
La memoria principale non è ancora inizializzata in questo momento; il secondo bootloader inizializza la memoria principale, la suddivide tra VideoCore e ARM e infine avvia i core ARM. Questi poi caricano il sistema operativo vero e proprio.
La sequenza di avvio può apparire inutilmente complicata ma funziona in modo affidabile. A partire dal BCM2837, il bootloader è divenuto addirittura in grado di caricare codice di avvio aggiuntivo da dispositivi di storage, via USB o attraverso la rete, via Ethernet.
Con il BCM2711, usato nel Raspberry Pi 4, la sequenza di avvio è stata modificata: il codice, tradizionalmente contenuto nel file bootcode.bin
, è ora caricato da un chip flash SPI (SPI-EEPROM) con capacità di 512 KB. Un intervento che si è reso necessario perché il nuovo Raspberry Pi deve prima inizializzare i controller PCIe e USB per poter poi accedere ai dispositivi di archiviazione USB.
Al momento del lancio sul mercato del Raspberry Pi 4, avvio tramite USB e rete Ethernet non sono ancora possibili ma la novità dovrebbe arrivare a breve con un aggiornamento del chip SPI-EEPROM.
Un altro aggiornamento doterà il controller USB delle funzioni di risparmio energetico che mancano nelle prime versioni del firmware (Active-State Power Management, ASPM).
Interfacce
Più interfacce si hanno a disposizione su un single-board computer come Raspberry Pi e meglio è. Anche le versioni precedenti hanno messo a disposizione dei maker interfacce come SPI, I2C e UART ma adesso Raspberry Pi 4 ne offre molte altre.
Come per i suoi predecessori, un blocco multiplexer configurabile nel BCM2711 permette di commuta le porte interne su alcuni pin della GPIO. Con le interfacce aggiuntive aumenta il numero di possibili “GPIO overlay” che possono essere selezionati tramite il file /boot/config.txt
.
L’interfaccia UART, acronimo di Universal Asynchronous Receiver Transmitter, può essere utilizzata come seriale RS-232.
I vecchi SoC avevano solo due porte SDIO (Secure Digital Input Output), che erano occupate da lettore micro SD e controller WLAN; ora ce n’è una terza che può essere commutata su GPIO.
SPI e I2C sono interfacce comuni per sensori e altri chip: I2S trasmette i dati audio attraverso la modulazione PCM. Due delle quattro uscite per segnali modulati PWM trasmettono segnali audio analogici alla presa jack cuffia.
Per quanto riguarda l’alimentazione, il BCM2711 non funziona direttamente con i 5 V erogabili tramite USB-C o interfaccia GPIO. Come i suoi predecessori, ha bisogno di diverse tensioni più basse.
È possibile anche l’alimentazione tramite Power-over-Ethernet (PoE), ma solo con una scheda aggiuntiva. A tale scopo, Raspberry Pi 4 dispone di un connettore posto in prossimità del connettore Ethernet al quale è possibile applicare tensione attraverso un cavo LAN.
Quello che manca anche al Raspberry Pi 4 è un pulsante per accensione e spegnimento. A questo proposito, va detto che un interruttore può essere eventualmente installato collegandolo via GPIO e apportando una modifica al file /boot/config.txt
.