Condividi tramite


Transizioni U1 e U2

Questo argomento descrive innanzitutto la configurazione iniziale eseguita dal software per abilitare le transizioni U1 e U2 e quindi descrive come si verificano queste transizioni nell'hardware.

Configurazione iniziale per software

Questo argomento descrive come il software enumera un dispositivo.

Per eseguire le transizioni U1 o U2, il software esegue i passaggi seguenti durante l'enumerazione di un dispositivo.

  1. Gli scambi software U1 o U2 escono dalle informazioni sulla latenza con il dispositivo durante il processo di enumerazione. Come prima parte di questo scambio, le latenze specifiche del dispositivo vengono compilate dal dispositivo in bU1DevExitLat e i campi wU2DevExitLat della funzionalità dispositivo USB SuperSpeed (definita nella sezione 9.6.2.2 della specifica USB 3.0). Come seconda parte dello scambio, l'host informa il dispositivo sulle latenze di uscita complessive per il dispositivo inviando un trasferimento di controllo SET_SEL, in base alla sezione 9.4.12 della specifica USB 3.0. Le informazioni sulla latenza includono le latenze associate ai collegamenti upstream e al controller.

  2. Per la porta DS a cui è collegato il dispositivo, il software configura due valori: PORT_U1_TIMEOUT e PORT_U2_TIMEOUT. Durante la decisione di questi valori, il software prende in considerazione le caratteristiche del dispositivo (ad esempio il tipo di endpoint) e le latenze associate al ripristino del dispositivo da U1 o U2 a U0. La tabella seguente descrive i valori di timeout.

    Tabella 1. valori PORT_U1_TIMEOUT e PORT_U2_TIMEOUT

    Valore Descrizione
    01H-FEH La porta DS deve avviare le transizioni dopo un periodo di inattività. Il periodo esatto è derivato dal valore di timeout. La porta deve accettare transizioni avviate dal partner di collegamento, a meno che non vi sia traffico in sospeso.
    FFH La porta DS non deve avviare le transizioni, ma deve accettare transizioni avviate dal partner di collegamento, a meno che non vi sia traffico in sospeso.
    0 La porta DS non deve avviare le transizioni e non accettare transizioni avviate dal partner di collegamento.
  3. Se il valore PORT_U2_TIMEOUT è compreso tra 01H-FEH, è presente un passaggio aggiuntivo che si verifica nell'hardware come risultato del passaggio 2. La porta DS informa il partner di collegamento su tale valore. L'importanza di questo passaggio è descritta in "Transizione diretta da U1 a U2".

  4. Per ogni dispositivo o hub, il software configura due valori: U1_ENABLE e U2_ENABLE inviando il controllo SET_FEATURE (U1_ENABLE/U2_ENABLE). La tabella seguente descrive questi valori.

    Tabella 2. valori U1_ENABLE e U2_ENABLE

    Valore Descrizione
    Attivato La porta US può avviare le transizioni e accettare transizioni avviate dal partner di collegamento se consentite dai criteri del dispositivo.
    Disabled La porta statunitense non deve avviare le transizioni, ma può accettare transizioni avviate dal partner di collegamento.

Transizioni hardware

In questo argomento vengono descritte le transizioni hardware a U1 e U2.

Dopo l'installazione iniziale dal software, l'hardware passa autonomamente a U1 e u2 senza ulteriore intervento dal software.

Un collegamento si trova nello stato di lavoro (U0) purché si trasferisca attivamente pacchetti. Il collegamento viene considerato inattiva quando non vengono trasmessi pacchetti. In stato di inattività, qualsiasi partner di collegamento può avviare una transizione a U1 o U2. L'altro partner di collegamento può scegliere di accettare o rifiutare la transizione. Se il partner di collegamento accetta la transizione, il collegamento passa allo stato U. Se rifiuta la transizione, il collegamento rimane in U0.

Transizioni avviate da DS

Una porta DS implementa un meccanismo timer che tiene traccia dell'inattività sulla porta. Il timer viene reimpostato ogni volta che la porta invia o riceve un pacchetto. Il timer ottiene anche la reimpostazione quando i programmi software nuovi valori di timeout. Se il software ha programmato la porta DS per avviare solo transizioni U1 o U2, la porta DS avvia il timer quando il collegamento entra prima in U0. Il valore del timer si basa sul valore di timeout U1 (o U2) programmato dal software. Se il collegamento è in U0 alla scadenza del timer, la porta DS avvia la transizione U1 (o U2).

Il partner del collegamento alla porta stati Uniti può scegliere di rifiutare la transizione se il dispositivo sa che la transizione può influire sulla capacità del dispositivo di soddisfare i requisiti di prestazioni o latenza. Ad esempio, se il dispositivo ha inviato una notifica ERDY e prevede una richiesta di trasferimento dall'host, il dispositivo potrebbe rifiutare le transizioni di stato U1 o U2 nel frattempo.

Se il software ha programmato la porta DS per avviare entrambe le transizioni U1 e U2, la porta DS avvia prima la transizione U1 in base al timer (descritto in precedenza in questa sezione). La transizione da U1 a U2 è descritta in questo argomento in Transizione diretta da U1 a U2.

Se un collegamento è in U1 o U2, una porta DS può riportare la porta in U0 in qualsiasi momento riceve il traffico per il dispositivo collegato alla porta.

Transizioni avviate dal dispositivo (porta STATI UNITI)

Un dispositivo può scegliere di avviare una transizione da U0 a U1 o U0 a U2, purché la funzionalità sia abilitata dal software. Se il dispositivo passa un collegamento a U1, il collegamento può passare direttamente a U2 in base al timer U2 della porta DS (descritto in "Transizione diretta da U1 a U2". Tuttavia, se il timer U2 non è impostato, il dispositivo non può avviare una transizione diretta da U1 a U2 autonomamente. In questo caso, il dispositivo deve riportare il collegamento a U0 prima di avviare la transizione a U2.

Quando si decide quando avviare tali transizioni, un dispositivo deve considerare le latenze di uscita e i requisiti di prestazioni. Per aiutare il dispositivo a prendere decisioni informate su come può avviare in modo aggressivo le transizioni, il software fornisce anche vari valori di latenza di uscita come descritto in precedenza in questo documento in "Configurazione iniziale per software".

Se il collegamento è in U1 o U2, una porta statunitense può riportare la porta in U0 in qualsiasi momento. In genere, la porta US avvia la transizione a U0 quando sa che sta per inviare pacchetti all'host o se prevede un pacchetto dall'host.

Vantaggi dell'LPM avviato dal dispositivo

I valori timer impostati dal software per le porte DS sono basati sull'euristica generale. Se si sceglie questi valori timer, il software garantisce che le prestazioni del dispositivo non siano compromesse. Per mantenere le prestazioni del dispositivo, il software non può scegliere valori troppo piccoli. Poiché le transizioni avviate da DS si basano sui timer e non tenere conto dello stato esatto del dispositivo, questo meccanismo non può sfruttare tutte le possibili opportunità di invio del dispositivo allo stato U1 o U2.

Il dispositivo, d'altra parte, ha una conoscenza accurata delle sue caratteristiche e dello stato corrente. Pertanto, può fare un'ipotesi intelligente su quando il trasferimento successivo verrà eseguito. In base a queste informazioni, il dispositivo può (e deve) scegliere di avviare attivamente queste transizioni senza influire in modo significativo sulle prestazioni.

Ad esempio, il dispositivo ha inviato una notifica NRDY in uno dei relativi endpoint e sa che non ci sarà traffico per un certo periodo. In questo caso, il dispositivo può avviare immediatamente una transizione a U1 o U2. Prima di inviare la notifica ERDY, il dispositivo può riportare il collegamento a U0 in preparazione per l'invio di tali dati. Per informazioni dettagliate su questo processo, vedere la sezione C.3.1 della specifica USB 3.0.

Transizione diretta da U1 a U2

Se il collegamento è in U1, è possibile che il collegamento possa passare direttamente a U2 senza immettere U0 tra. Ciò può verificarsi indipendentemente dal partner di collegamento avviato la transizione a U1. Tuttavia, la transizione U1 a U2 può verificarsi solo se il timeout U2 sulla porta DS del collegamento è impostato su un valore compreso tra 01H-FEH.

La sezione "Configurazione iniziale per software" descrive un passaggio aggiuntivo che consente alla porta DS di comunicare il valore di timeout al partner di collegamento. Dopo aver immesso il collegamento U1, entrambi i partner di collegamento avviano un timer usando il valore di timeout impostato in base al valore di timeout U2 della porta DS. Se il timer non viene reimpostato a causa del traffico e scade, entrambi i partner di collegamento passano in modo automatico a U2 senza alcuna comunicazione esplicita tra di essi.

Transizioni da U1 o U2 a U3

Le transizioni a U1 o U2 vengono avviate autonomamente nell'hardware, ma la transizione a U3 viene avviata dal software. Poiché la transizione U3 viene avviata solo dopo un periodo di inattività, è abbastanza probabile che il collegamento fosse in U1 o U2 (anziché U0) prima della transizione.

La specifica USB 3.0 non definisce transizioni dirette da U1 o U2 a U3. L'hub padre o il controller è responsabile della transizione automatica del collegamento a U0 e quindi alla transizione a U3.

Transizioni U1 o U2 per hub

La specifica USB 3.0 fornisce linee guida specifiche per gli hub su quando avviare le transizioni di stato U sulla porta STATUNITENSE. Se tutte le porte DS sono in stato di collegamento U1 o inferiore, l'hub deve avviare una transizione U1 sulla porta statunitense, presupponendo che il software abbia abilitato l'hub per avviare la transizione U1.

Analogamente, se tutte le porte DS sono in stato di collegamento U2 o inferiore, l'hub deve avviare una transizione U2 sulla porta statunitense, presupponendo che il software abbia abilitato l'hub per avviare la transizione U2.

Nota

Se non è presente alcun dispositivo collegato a una porta DS, lo stato della porta è Rx.Detect, che è inferiore a U2. Quindi, se non sono presenti dispositivi collegati, l'hub deve inviare la porta US a U2. Inoltre, se tutte le porte DS erano inizialmente in U1 o inferiore e passano a U2 o inferiori, l'hub deve eseguire la transizione della porta statunitense da U1 a U2. Poiché tale transizione non è basata sul timer di attività U2, l'hub deve portare la porta US a U0 e quindi inviarla a U2.

Rinvio dei pacchetti

La specifica USB 3.0 descrive un meccanismo noto come rinvio dei pacchetti (vedere la sezione C.1.2.2). Il meccanismo viene usato per ridurre al minimo l'effetto di LPM sull'utilizzo degli autobus.

Se un host invia una richiesta di trasferimento a un dispositivo, il cui collegamento upstream si trova in U1 o U2, l'host potrebbe perdere la larghezza di banda del bus attendendo che il collegamento torni a U0 e che il dispositivo risponda. Per evitare tale attesa, l'hub padre risponde per conto del dispositivo inviando un'intestazione di pacchetto posticipata all'host. L'host elabora l'intestazione del pacchetto posticipato in modo simile a NRDY ed è quindi libero di avviare i trasferimenti con altri endpoint. In parallelo, l'hub avvia una transizione U0 sul collegamento e quindi informa il dispositivo sul pacchetto posticipato. Il dispositivo invia quindi ERDY all'host per indicare che il dispositivo è ora pronto per il trasferimento. L'host può quindi riprogrammare il trasferimento al dispositivo.

Una responsabilità importante del dispositivo è che dopo l'invio di ERDY, il dispositivo è responsabile di mantenere il collegamento in U0 fino a quando l'host invia una risposta a ERDY o fino a quando non scade il tempo tERDYTimeout (500 millisecondi). Durante questo periodo, il dispositivo non deve avviare una transizione U1 o U2 e deve anche rifiutare qualsiasi transizione avviata dal partner di collegamento.