Benvenuti a un nuovo appuntamento con la Rubrica Firmware Reload di Elettronica Open Source. In questa seconda parte dell'articolo "USB 3.0: SuperSpeed con il “-25%” dei Consumi!" continueremo ad approfondire lo standard USB 3.0, le sue specifiche e le sue caratteristiche. L’USB 3.0 offre nuove prestazioni da primato in termini di velocità di trasferimento, e nuove opportunità per prolungare la vita dei dispositivi a batteria, sia che siano “host” o “device”, grazie ad una serie di caratteristiche che operano in maniera indipendente a livello hardware.
TRANSIZIONE DA U0 A U1
Ogni lato del link può iniziare una transizione U0→U1 nel momento in cui il timer arriva al valore PORT_U1_TIMEOUT. Alternativamente, il device può essere più aggressivo impostando la feature U1_Enable e riportando U1 Inactivity Timeout uguale a 0. Inizialmente, l’ingresso in uno stato di low power è sempre negoziato tra le porte utilizzando un pacchetto LGO_Un, seguito da un pacchetto LAU (in caso di accettazione) o da un LXU (in caso di rifiuto). La porta che invia il LAU deve attendere finchè non riceve un singolo pacchetto di LPMA (di accettazione della risposta), che costituisce l’handshake finale prima della transizione o uno qualsiasi degli stati di power. Per massimizzare il risparmio di energia, alle porte viene richiesto di rispondere ai comandi di power entro il timeout PM_LC_TIMER. Nel caso in cui la porta che ha iniziato la procedura per il cambio di power non riceva nè il LAU nè LXU prima che il timer PM_LC_TIMER spiri (3 μs) viene considerato un errore di link e parte la procedura di recovery. In maniera analoga, se dopo un LAU il dispositivo non riceve LPMA o altro traffico prima che spiri il timer PM_ENTRY_TIMER ( 6 μs), allora può procedere comunque alla transizione verso lo stato di power differente (U1). Si assume che LPMA sia stato corrotto e non ricevuto e la porta richiedente il cambiamento sia già transitata nel nuovo stato di power U1.
TRANSIZIONE DA U1 A U2
La transizione da U1 a U2 è solitamente attivata da un secondo timer detto U2_ Inactivity_Timer che, se abilitato, muove silenziosamente lo stato da U1 a U2. Il valore del timer è riportato nell’ “endpoint configuration descriptor”. È compito dell’host abilitare questo timer, attraverso il pacchetto di U2 Inactivity Timeout LMP. Alcuni dispositivi, come per esempio i device compositi, spesso hanno difficoltà a gestire le transizioni verso U2 dei singoli endpoint (per esempio, perché il PLL da spegnere è comune a tutti gli endpoint e non selettivo), in questi dispositivi lo stato U1 può essere disabilitato generando una transizione diretta U0→U2 usando il pacchetto di comando LGO_U2. Un dispositivo può essere configurato per supportare lo stato U2 esclusivo se prima riceve un pacchetto di SET_FEATURE: U1_DISABLE.
TRANSIZIONE DA U0 A U3
Lo stato U3 è lo stato di minor assorbimento dove anche l’alimentazione all’interfaccia può essere rimossa. Si tratta dell’equivalente dello stato di suspend per l’USB 2.0. La transizione deve essere iniziata esclusivamente da una porta di downstream che genera il pacchetto LGO_U3 seguito da un LAU (accettazione). Le porte di upstream non possono rifiutarsi di obbedire. Poiché l’obiettivo è di conservare più energia possibile, rimangono in funzione solo le circuiterie della porta che effettuano il Warm Reset detect, l’U3 wake detect o il wake trasmission, corrispondenti rispettivamente a situazione di reset del bus, risveglio comandato dall’host o risveglio indotto dal dispositivo (remote wakeup).
TRANSIZIONE DA U1/U2 A U0
Il ritorno nello stato attivo dallo stato U1 o U2 ha un tempo estremamente ridotto, nel range di 10us. Avviene solitamente quando c’è l’esigenza di trasmettere qualcosa, come per esempio un messaggio di IN per l’host o di ERDY per il device. In tal caso, le porte il low power state devono aver modo di segnalare all’altra porta che condivide il link di iniziare il recupero del collegamento stesso. Per far ciò, è previsto un segnale detto “wake signal” a 50 MHz periodico, seguito da un pacchetto di LFPS (di hanshake) che evita il recovery del link finche l’altra porta del link non è pronta.
STATI DI POWER E CONFLITTI
La specifica USB 3.0 ovviamente considera tutti i possibili casi particolari e definisce le regole necessarie per evitare conflitti e preservare l’integrità del link durante i cambiamenti di stato di alimentazione. Sono inclusi i requisiti di non portare in low power i dispositivi che hanno pacchetti pendenti, ci sono poi regole per assicurare la coerenza del link nel caso la risposta attesa ad un evento di power non sia ricevuta. Poiché le transizioni di stato di alimentazione possono essere iniziate dall’host o dal dispositivo, esistono anche delle regole per gestire le condizioni di conflitto tra porte e le “race condition”.
TEST E VERIFICA DELLA GESTIONE DELL’ALIMENTAZIONE PER L’USB 3.0
Per assicurarsi che un dispositivo USB 3.0 implementi correttamente le specifiche relative al power management è prevista una certificazione dell’USB-IF detta “SuperSpeed Certification Program”. Ovviamente, i test compresi nel programma di certificazione devono essere eseguiti in maniera preliminare sul dispositivo per evitare di avere brutte sorprese al momento della certificazione. Questi test, d’altra parte, sono estremamente difficili da generare e controllare solo a livello software, per questo si fa uso di “feature” e di strumenti avanzati che molti produttori di oscilloscopi e strumentazione USB mettono a disposizione. La LeCroy, per esempio, propone la sua USB Protocol Suite da cui trarremo spunto per descrivere i test, anche se il discorso è analogo anche per altri produttori. Solitamente i test riguardano i seguenti aspetti:
- Generazione del traffico a basso livello: per testare il livello di link è necessario generare traffico e per esempio introdurre delle violazioni (di tempistiche o di transizioni di stato) per verificare le situazioni di recupero.
- Sequenza di recupero da U1: la transizione da U1 a U0, come detto in precedenza, ha tempistiche strettissime e quindi richiede velocità di campionamento elevate per gli oscilloscopi.
- Trigger sul cambiamento di stato: il traffico a livello di link è invisibile ai livelli superiori del protocollo USB 3.0, quindi, se si desidera sincronizzarsi su questi eventi per un calcolo accurato delle tempistiche, è necessario fare affidamento a suite software dedicate fornite dai produttori di strumentazione, in grado di analizzare il traffico ed individuare i pacchetti sensibili.
- Trigger sui timeout di power: come detto in precedenza, tutte le operazioni avvengono durante i cambiamenti di stato e sono sottoposte a timeout entro i quali la comunicazione deve completarsi. Se i tempi previsti non sono rispettati, la controparte del link potrebbe entrare in modalità disabled, il metodo più veloce per verificare il rispetto dei tempi è farsi aiutare dallo strumento che riconosce la partenza di un determinato timer e si sincronizza sulla fine del timeout. È particolarmente utile avere un meccanismo, come mostrato in Figura 1, per catturare le sporadiche o intermittenti violazioni di tempistiche durante le transizioni di power management.
- Monitorare le diminuzioni della Vbus. Vbus viene fornita dalle porte di downstream ai dispositivi collegati e, nel caso l’host sia a batteria, questo può costituire un problema. Una attrezzatura di test viene messa a disposizione da LeCroy che integra funzionalità di voltmetro e caratteristiche da analizzatore di protocollo.
Il sistema mostrato in Figura 2 aiuta il progettista a correlare la potenza erogata su Vbus con lo stato corrente. Viene generato un grafico con i valori di tensione misurati nel tempo, questa informazione è sincronizzata con le richieste di I/O e permette di interpretare velocemente quello che succede elettricamente a basso livello con i comandi che transitano sul bus.
CONCLUSIONI
Lo scopo che si voleva raggiungere con questa serie di articoli era quello di non far passare lo standard USB 3.0 solo attraverso l’analisi dell’aumento delle prestazioni in termini di velocità, ma anche di approfondire e dare una informazione generale sui miglioramenti che la nuova specifica introduce a livello di gestione dei consumi. La chiave del successo di questo protocollo, giunto alla versione 3.0, è infatti quella di miscelare accuratamente questi aspetti, e tutta l'attenzione all’aspetto dei consumi lo ha reso un protocollo utilizzatissimo anche per i dispositivi portatili a batteria e non solo, passando da quello che doveva essere un protocollo di comunicazione per PC desktop in ambito domestico e di ufficio ad uno standard di fatto per la maggior parte dei dispositivi elettronici intelligenti.