Gli Snapdragon hanno una porta USB nascosta: di cosa si tratta

Svelata Embedded USB Debug (EUD), interfaccia nascosta nei SoC Snapdragon che permette il debug tramite USB, semplificando e democratizzando l’accesso al funzionamento interno dell'hardware da parte degli sviluppatori indipendenti.

I SoC (System-on-a-Chip) Snapdragon, cuore pulsante di gran parte degli smartphone e dispositivi mobili moderni, integrano al loro interno CPU potenti e co-processori specializzati, come i DSP Hexagon, per gestire compiti complessi con efficienza. Fino a poco tempo fa, accedere ai meccanismi di debug hardware di questi chip richiedeva strumenti esterni ingombranti e costosi.

A febbraio 2025, Qualcomm ha fatto un passo avanti sorprendente: senza suonare i tamburi, la società ha reso pubblica l’interfaccia Embedded USB Debug (EUD), una funzionalità nascosta che permette di accedere direttamente al debug JTAG e SWD (Serial Wire Debug) tramite la semplice porta USB del dispositivo, senza necessità di saldature o hardware aggiuntivo. Si sono così aperte nuove prospettive per sviluppatori e ricercatori, riducendo tempi e costi e rendendo il debug più accessibile che mai.

La cosa interessante è che EUD è presente nei chip Snapdragon almeno dal 2018 ma fino a qualche mese fa il tutto era sempre rimasto “sotto traccia”.

Cos’è EUD: il debug JTAG via USB per i chip Snapdragon

EUD è un’interfaccia di debug nativamente integrata nel silicio dei SoC Qualcomm, che consente l’accesso a funzionalità tipiche del JTAG/SWD tramite una semplice connessione USB. Quando attivata (tipicamente tramite la scrittura diretta di registri e l’inizializzazione dell’interfaccia USB fisica), il dispositivo è rilevato dal PC come un hub USB a 7 porte, una delle quali espone l’interfaccia di controllo EUD.

Se gestita correttamente, questa interfaccia genera un secondo dispositivo USB che espone direttamente un endpoint SWD, accessibile con tool open source come OpenOCD, e utilizzabile per effettuare operazioni di debugging avanzato: dal single-stepping, all’ispezione dei registri CPU, fino al controllo dei co-processori Hexagon DSP. Tutto questo, senza aprire il dispositivo e senza utilizzare interfacce fisiche esterne.

Il rilascio del codice e l’integrazione con OpenOCD

Fino a poco tempo fa, l’accesso all’EUD era limitato a partner OEM e sviluppatori interni, in quanto dipendeva da una libreria proprietaria. Tuttavia, dopo mesi di dibattiti nella community del kernel Linux (soprattutto in merito all’accettabilità di driver utilizzabili solo con componenti closed-source), Qualcomm ha finalmente pubblicato:

  • La libreria libeud open source.
  • Un ramo aggiornato di OpenOCD che integra il supporto EUD.
  • Codice kernel per abilitare il backend dispositivo.

Si tratta di un passaggio cruciale verso l’apertura della piattaforma Snapdragon agli sviluppatori indipendenti.

Stato attuale, limiti e SoC compatibili

Come conferma Linaro, ad oggi EUD è stato testato con successo su SoC come Snapdragon 845, 855 e 865. Tuttavia, l’abilitazione dell’interfaccia può variare:

Alcuni dispositivi consumer (es. OnePlus 6) risultano compatibili nonostante i fuse (piccoli circuiti elettronici programmabili che servono a configurare in modo permanente alcune caratteristiche del chip) di disabilitazione. Per i SoC più recenti (ad esempio SM8450) sono necessari ulteriori aggiornamenti ai driver e al supporto Linux.

Altre periferiche EUD sono visibili ma non ancora integrate in OpenOCD: potrebbero aprire la strada a nuove modalità di tracing e comunicazione seriale senza accesso fisico.

Cos’è il JTAG?

JTAG (Joint Test Action Group) è uno standard industriale utilizzato per il test, il debug e la programmazione di circuiti integrati, in particolare microprocessori, microcontrollori e SoC. Nato originariamente per facilitare il collaudo di schede elettroniche, oggi JTAG è uno strumento essenziale per sviluppatori e ingegneri hardware/software.

Di solito permette di collegarsi direttamente al processore o ad altri componenti interni del chip tramite una serie di pin dedicati (tipicamente 4 o 5). È uno strumento fondamentale per il debugging a basso livello, permettendo di analizzare e correggere errori direttamente sull’hardware, anche quando il sistema operativo o il software di più alto livello non è ancora operativo.

Nel caso di EUD, sui SoC Snapdragon, l’interfaccia di JTAG e SWD (variante più recente e semplificata di JTAG) è esposta direttamente via USB, rendendo il debug più semplice e accessibile.

Ti consigliamo anche

Link copiato negli appunti