// WIKI

Anatomia di un PDO USB Power Delivery

Come un caricatore USB-C dichiara cosa sa erogare: i 32 bit del Power Data Object, lo scaling dei campi, e la negoziazione sink↔source che porta dai 5 V iniziali al contratto di potenza.

Pubblicato il Aggiornato il USB-PDPDOUSB Type-CPPSEPR
Codice su GitHub ↗

Quando colleghi un telefono a un caricatore USB-C, prima che scorra un solo milliampere oltre i 5 V di sicurezza i due dispositivi si parlano. Il caricatore dichiara cosa sa erogare, il dispositivo sceglie, e solo allora la tensione sale. Quella dichiarazione è una lista di Power Data Object (PDO): parole da 32 bit, ciascuna un profilo di alimentazione. Questo strumento le decodifica e le costruisce; questa pagina spiega come sono fatte.

Cos’è un PDO

Un Power Data Object è una parola di 32 bit che descrive un modo in cui una sorgente può alimentare. Un caricatore non offre un solo profilo ma un elenco — i suoi Source Capabilities — tipicamente da uno a sette PDO: 5 V, 9 V, 15 V, 20 V, magari un profilo programmabile. Il dispositivo che riceve (il sink) legge l’elenco e chiede quello che gli serve.

La regola di base, fissata dalla specifica: il primo PDO è sempre 5 V Fixed, e i PDO Fixed successivi sono in tensione crescente. È ciò che garantisce che qualunque dispositivo, anche il più semplice, trovi sempre i 5 V da cui partire.

I cinque tipi

I bit 30–31 di ogni PDO ne dichiarano il tipo. Sono la prima cosa da leggere, perché determinano come interpretare tutti gli altri bit:

  • Fixed Supply (00) — tensione fissa, corrente massima. È il profilo classico: “5 V fino a 3 A”, “20 V fino a 5 A”.
  • Battery (01) — sorgente a batteria, espressa come intervallo di tensione e potenza massima.
  • Variable Supply (10) — tensione variabile non regolata, espressa come intervallo di tensione e corrente massima.
  • Augmented PDO / APDO (11) — i profili “intelligenti” introdotti dalle revisioni più recenti. Un ulteriore campo di sottotipo (bit 28–29) distingue:
    • SPR PPS — Programmable Power Supply: la tensione si regola con continuità in un intervallo, per la ricarica adattiva.
    • EPR AVS — Adjustable Voltage Supply: il profilo ad alta potenza (oltre 100 W) della Extended Power Range.

Lo scaling dei campi: le unità di misura

Qui sta l’errore più comune nel leggere un PDO a mano. I campi non contengono volt e ampere: contengono numeri interi, e ogni tipo di PDO usa un fattore di scala diverso. Sbagliare il fattore significa leggere “5 V” dove ci sono “10 V”.

Per i PDO Fixed, Variable e Battery:

Un PDO Fixed da 5 V / 3 A porta quindi nel campo tensione il numero 100 (100 × 50 mV = 5 V) e nel campo corrente 300 (300 × 10 mA = 3 A).

Per gli APDO (PPS e AVS) lo scaling cambia, ed è il secondo inciampo classico:

Stesso bit, significato diverso a seconda del tipo: è il motivo per cui un decoder deve sempre leggere prima i bit 30–31, e solo dopo interpretare il resto.

La struttura bit per bit

Lo strumento mostra, per ogni PDO, una mappa dei 32 bit con i campi evidenziati. Il Fixed PDO è quello che si incontra più spesso, e la sua mappa completa è qui sotto — tutti e trentadue i bit attribuiti, senza buchi:

Bit Campo Significato
31–30 PDO type 00 = Fixed
29 Dual-Role Power può sia erogare sia ricevere
28 USB Suspend Supported rispetta la sospensione USB
27 Unconstrained Power alimentazione non limitata (rete)
26 USB Comms Capable sa parlare USB, non solo alimentare
25 Dual-Role Data può essere host o device
24 Unchunked Ext Msg messaggi estesi senza chunking
23 EPR Mode Capable sa entrare in modalità EPR
22 Reserved deve essere 0
21–20 Peak Current sovracorrente ammessa — vedi sotto
19–10 Voltage 50 mV/unità
9–0 Max Current 10 mA/unità

Gli otto bit di flag (29–22) comunicano le capacità del dispositivo, non un profilo di alimentazione: descrivono chi è il dispositivo. Vanno letti solo sul primo Fixed PDO della lista, dove per specifica sono significativi; nei PDO successivi sono ignorati.

I bit che si dimenticano: il Peak Current

I due bit 21–20 sono quelli che le descrizioni sommarie saltano, e dicono una cosa che a un progettista serve: quanta sovracorrente istantanea la sorgente ammette oltre la corrente massima dichiarata, e per quanto.

Codice Sovracorrente ammessa
00 100 %
01 110 % / 130 % / 150 %
10 125 % / 150 % / 200 %
11 150 % / 175 % / 200 %

I tre valori di ogni riga corrispondono a tre finestre temporali diverse (dall’impulso brevissimo al sovraccarico prolungato). Il significato pratico è che un PDO da 3 A con codice 11 tollera picchi fino a 6 A per intervalli brevi: informazione decisiva per dimensionare il condensatore di ingresso di un sink, o per capire perché un caricatore «da 3 A» non protesta a 4,5 A. Con codice 00 non c’è alcun margine, e il limite dichiarato è il limite vero.

Un esempio di decodifica

Prendiamo il valore 0x0002D12C. I bit 30–31 valgono 00 → è un Fixed PDO. Il campo tensione (bit 19–10) contiene 180: 180 × 50 mV = 9 V. Il campo corrente (bit 9–0) contiene 300: 300 × 10 mA = 3 A. Il PDO dichiara quindi “9 V fino a 3 A”. Costruirlo è l’operazione inversa: 9 V / 50 mV = 180 nel campo tensione, 3 A / 10 mA = 300 nel campo corrente, tipo 00.

PPS ed EPR: due estensioni diverse

Le due sigle si confondono spesso, ma rispondono a esigenze opposte.

PPS (Programmable Power Supply, dalla USB-PD 3.0) serve a regolare la tensione con precisione e con continuità entro un intervallo, in genere sotto i 21 V. È pensato per la ricarica adattiva: il caricatore segue la curva di carica della batteria invece di imporre gradini fissi. Un dettaglio che genera confusione: la regolazione runtime avviene a passi di 20 mV, ma i limiti dell’intervallo nel PDO sono codificati a passi di 100 mV. Sono due cose diverse — la granularità con cui si regola, e la risoluzione con cui si dichiarano gli estremi.

EPR (Extended Power Range, dalla USB-PD 3.1) serve invece ad andare oltre i 100 W, fino a 240 W, introducendo tensioni Fixed a 28, 36 e 48 V e il profilo AVS. Nell’AVS la corrente non è fissa: varia con la tensione, perché il vincolo è la potenza. Per questo lo strumento, per i profili AVS, mostra la potenza invece di una corrente massima — riflette il modo in cui la sorgente effettivamente ragiona.

I due layout APDO non si somigliano

Dire che «per gli APDO lo scaling cambia» copre le unità, ma non basta: PPS e AVS hanno confini di campo completamente diversi, e usare il layout dell’uno sull’altro produce numeri plausibili e sbagliati.

Bit SPR PPS (sottotipo 00) EPR AVS (sottotipo 01)
31–30 PDO type = 11 PDO type = 11
29–28 sottotipo = 00 sottotipo = 01
27 PPS Power Limited Peak Current
27–26 — Peak Current
26–25 Reserved —
25–20 — Reserved
24–17 Max Voltage (100 mV/u) —
19–10 — Max Voltage (100 mV/u)
16 Reserved —
15–8 Min Voltage (100 mV/u) —
9 — Reserved
8–0 — PDP (1 W/u)
7 Reserved —
6–0 Max Current (50 mA/u) —

Due asimmetrie. L’AVS non codifica una tensione minima: il minimo è fissato dalla specifica a 15 V e non compare nei bit — uno strumento deve saperlo, perché non c’è nessun campo da leggere. E l’AVS non porta una corrente ma la PDP (Power Delivery Power) in watt: coerentemente, la corrente ammessa varia con la tensione scelta.

I sottotipi riservati

Il campo sottotipo è di due bit, quindi ha quattro valori possibili, ma la R3.1 ne definisce due: 00 SPR PPS e 01 EPR AVS. I valori 10 e 11 sono riservati.

Uno strumento ha due modi di comportarsi davanti a un sottotipo riservato, e uno solo è corretto: può rifiutare il PDO, oppure decodificarlo best-effort con il layout più vicino — ma in questo secondo caso deve dichiarare nella mappa dei bit il valore vero del campo, marcandolo come riservato. Mostrare 01 (EPR AVS) su bit che valgono 10 sarebbe mentire sui bit, che è esattamente ciò che un decoder non deve fare. Questo strumento decodifica best-effort e segnala il campo come Reserved.

Quanto ci sta in un campo

I campi hanno un numero fisso di bit, quindi un tetto:

Campo Bit Passo Valore massimo esprimibile
Fixed — tensione 10 50 mV 51,15 V
Fixed — corrente 10 10 mA 10,23 A
Battery — potenza 10 250 mW 255,75 W
PPS — tensione 8 100 mV 25,5 V
PPS — corrente 7 50 mA 6,35 A
AVS — tensione 10 100 mV 102,3 V
AVS — PDP 9 1 W 511 W

Il tetto della tensione Fixed — 51,15 V — è comodamente sopra i 48 V dell’EPR, mentre quello della corrente, 10,23 A, è il motivo per cui oltre i 5 A si sale in tensione e non in corrente. Il campo corrente del PPS è il più stretto di tutti (7 bit, massimo 6,35 A): PPS ed EPR non sono estensioni sovrapponibili, e questo è uno dei punti in cui si vede.

La negoziazione: dal PDO all’RDO

Decodificare la lista è solo metà del lavoro. La parte viva del protocollo è la negoziazione: il sink esamina i PDO offerti e ne sceglie uno, costruendo un Request Data Object (RDO) che rimanda alla sorgente. L’RDO non contiene una tensione: contiene la posizione del PDO scelto nell’elenco (l’Object Position, da 1 a 13 in EPR) più la corrente operativa e massima richieste.

La logica di selezione segue una priorità: un match esatto su un PDO Fixed ha la precedenza, poi i profili programmabili (PPS/AVS) quando la tensione cade nel loro intervallo, infine i fallback. Se nessun profilo soddisfa la richiesta, il sink resta sui 5 V di sicurezza. Lo strumento, in modalità negoziazione, mostra quale PDO verrebbe scelto e perché, e costruisce l’RDO corrispondente.

I limiti di questo strumento

È uno strumento didattico e di lavoro, non un validatore di conformità. Decodifica e codifica PDO e RDO secondo lo scaling della specifica, ma non verifica i CRC dei pacchetti, non simula il livello fisico del protocollo (BMC, messaggi di controllo, timer), e copre i tipi di PDO d’uso comune — non ogni caso particolare delle revisioni più recenti. I valori che produce sono corretti al bit per la struttura del PDO; per una verifica di conformità reale servono un analizzatore di protocollo e la specifica ufficiale.

Riferimenti

  • USB Implementers Forum (USB-IF) — usb.org, ente che pubblica e mantiene la specifica.
  • USB Power Delivery Specification — il documento normativo (revisioni 3.1 / 3.2), disponibile nell’area documenti di usb.org/documents.
  • USBPD-Stack — il nostro stack USB Power Delivery open source per il controller PTN5110, che implementa la decodifica e la negoziazione descritte qui: github.com/stefanofante/USBPD-Stack.
  • Strumento correlato — il decoder/encoder PDO mette in pratica tutto questo: incolla un PDO e vedi i campi, o costruiscilo dai valori.

Ultimo aggiornamento: · Trovato un errore o un dato superato? Segnalacelo

← Torna all’indice Wiki

Un progetto simile?

Acustica, embedded, strumenti di calcolo: se hai un caso d’uso vicino, parliamone.