Questo articolo riguarda l'interfaccia periferica seriale (SPI) e le sue sfide relative all'integrità del segnale, che derivano tutte dall'impedenza dell'interfaccia e dalle tracce che trasportano segnali digitali. Prima di passare al punto principale di questo articolo, risponderò alla mia domanda:
Con questo, intendo dire che lo standard SPI non menziona alcun particolare requisito di impedenza. Se guardi altre linee guida di progettazione che affermano qualcosa del tipo "l'SPI ha bisogno di un'impedenza controllata", vedrai che spesso non indicano un valore specifico di impedenza. Nella migliore delle ipotesi, indicheranno un intervallo compreso fra 30 e 150 Ohm. Si tratta di un intervallo di valori ampio (e non molto utile).
Proprio di recente ho visto un'altra nota applicativa di un importante produttore di semiconduttori in cui si afferma che le linee SPI necessitano di un'impedenza controllata e di una corrispondenza della lunghezza, ignorando apparentemente i tempi di configurazione e il full duplex di questa interfaccia. Inoltre, non indicano un valore di impedenza o un valore di tolleranza di mancata corrispondenza della lunghezza. A mio modesto parere, questa non è una linea guida molto utile.
La realtà è che le linee SPI iniziano a necessitare di un controllo dell'impedenza solo quando la lunghezza dell'interconnessione diventa molto elevata. E, poiché non esiste un requisito di impedenza specifico nel bus, hai una certa libertà nella progettazione e nella terminazione dei canali. Quindi cosa è considerato "molto lungo" e quando è necessario un metodo di terminazione? Lo analizzeremo in questo articolo.
La topologia di un SPI è molto semplice. Utilizza tre linee con un unico collegamento controller-periferica o quattro linee in cui sono presenti più slave sul bus. Il controller a monte può inviare e ricevere dati su una coppia di linee fino a 60 Mbps, magari inviando i dati tramite cavo a un'altra scheda o dispositivo. La topologia di un tipico SPI bus viene mostrata di seguito.
Cosa accade sul PCB? Se si guardano le schede tecniche di un componente con un'interfaccia SPI, i valori minimi del tempo di salita sono pari a 1 ns per i componenti avanzati. Per alcuni componenti, il tempo di salita potrebbe essere molto più lungo, forse 20 ns o più. Chiaramente, un bus lento come SPI può comunque avere un comportamento del segnale ad alta velocità, anche se la velocità dei dati e la frequenza di clock sono basse, ma non esiste una specifica di impedenza! Come è meglio approcciare i progetti SPI?
Questo problema dell'SPI è poco comunicato ed è uno dei classici problemi di progettazione PCB ad alta velocità. Poiché dobbiamo determinare se un collegamento SPI è "veloce" o "lento" in termini di tempo di salita, il primo passo è capire cosa contribuisce esattamente al tempo di salita.
Il primo passo consiste nell'osservare le schede tecniche per il componente principale che controllerà il bus SPI. Se il tuo componente è ben documentato, il tempo di salita sull'interfaccia SPI sarà espresso in termini di una particolare capacità di carico osservata sul bus. Nota che la "capacità di carico" presuppone un'induttanza pari a zero nel collegamento tra l'uscita SPI e il carico di prova, quindi puoi trattare questo valore del tempo di salita come una costante di tempo RC, in prima approssimazione.
I valori nell'esempio precedente con elevata capacità di carico non sono tipici della maggior parte dei componenti, ma illustrano il punto principale: il tempo di salita è determinato dalla capacità del bus. In questo esempio, se prendiamo il tempo di salita del 10%-90% indicato sopra e determiniamo il suo equivalente in 2.2RC (standard utilizzato per determinare i valori della costante di tempo), otteniamo una resistenza osservata nel bus di R = 113,6. Ciò significa che, se aggiungessimo un resistore al driver (vedi sotto), potremmo rallentare il tempo di salita pur mantenendo l'impedenza.
Tieni a mente questi punti perché, più avanti, li useremo per capire perché la terminazione con resistori in serie può essere usata per rallentare il bus SPI. Ora che conosciamo il tempo di salita del bus osservato sul ricevitore, possiamo determinare quando il bus è considerato "lungo".
Per ottenere una stima approssimativa, possiamo confrontare la distanza percorsa dal segnale durante il suo tempo di salita con la lunghezza totale. L'altro approccio consiste nell'utilizzare una stima della larghezza di banda dal tempo di salita (che nell'esempio precedente sarebbe di 35 MHz) per determinare quando l'impedenza di ingresso del bus si discosta troppo da un'impedenza di carico come ho descritto in questo articolo. Il modo più semplice per ottenere una stima approssimativa è confrontare la distanza percorsa dal segnale durante il suo tempo di salita con il ritardo di propagazione dell'interconnessione.
Preferisco usare un limite conservativo del 10% per stimare quando il bus inizia a sembrare lungo; se il ritardo di propagazione è inferiore a circa il 10% della distanza percorsa durante il tempo di salita del segnale, allora il bus è considerato corto e non è necessario preoccuparsi di terminare l'impedenza del bus:
Tieni presente che altre linee guida indicano come limite un valore compreso tra il 10% e il 50%; non esiste un valore univoco in cui il bus diventa improvvisamente lungo, è una questione di giudizio. Ad esempio, per un segnale SPI di 10 ns su uno strato PCB con Dk = 4, il limite del 10% è di 0,15 metri o 15 cm. Ciò significa che qualsiasi percorso SPI che trasporta un segnale di 10 ns inferiore a 15 cm sarà considerato un bus corto, il che si applica a molte situazioni.
Se disponi di un bus SPI lento, esistono alcune linee guida molto semplici da utilizzare per evitare alcuni problemi di integrità del segnale di base. Alcune delle linee guida più semplici che si possono implementare per ridurre contemporaneamente l'induttanza (che porta al ringing), la diafonia e le emissioni irradiate includono:
Per ottenere prestazioni ottimali, consiglio di non utilizzare 2 layer e di iniziare invece con uno stack-up PCB compatibile con i progetti digitali ad alta velocità.
Nei casi in cui le linee SPI devono avere un'impedenza specifica, c'è una buona ragione per cui le persone utilizzano 50 Ohm come impedenza target. Ironia della sorte, non credo che le persone conoscano i vantaggi di questa scelta, ma finiscono per prendere la decisione giusta per i motivi sbagliati.
Se 50 Ohm è l'obiettivo di impedenza caratteristica per un bus SPI elettricamente lungo, è probabile che sulla scheda siano presenti altre tracce controllate dall'impedenza che puntano anche all'impedenza caratteristica di 50 Ohm. Avere un unico obiettivo di impedenza rende il controllo dell'impedenza molto più facile per un produttore. Se devono scambiare i materiali nello stack-up per raggiungere l'obiettivo di impedenza, è molto più facile farlo se c'è un solo obiettivo da raggiungere nello stack-up.
Da quanto visto sopra, nella stragrande maggioranza delle situazioni pratiche con una traccia SPI, non è necessaria la terminazione al driver o al ricevitore. Se ci fosse, vedresti una specifica di impedenza da qualche parte nelle schede tecniche dei componenti, nelle specifiche SPI o in entrambe. Inoltre, i componenti avrebbero probabilmente una terminazione on-die applicata all'impedenza target, quindi non dovrai preoccuparti di posizionare un resistore.
La risposta è piuttosto semplice: rallentare il segnale emesso dal driver. Il resistore offre anche il vantaggio di smorzare eventuali oscillazioni in uscita. Considera che in questo caso, la scelta di questo resistore non ha nulla a che fare con la corrispondenza di impedenza da determinare in caso di una linea elettricamente corta.
Se il tuo controller è un componente avanzato come un FPGA e integri un'interfaccia SPI in questo controller, il tempo di salita può essere molto breve perché la struttura fisica del dispositivo garantisce semplicemente tempi di salita molto rapidi. Di conseguenza, può essere vantaggioso rallentare il segnale per evitare che un segnale veloce crei una diafonia. In questo caso, è necessario posizionare il resistore vicino al driver.
Assicurati di non rallentare troppo il tempo di salita, altrimenti il segnale sarà troppo lento per attivare/disattivare l'I/O al caricamento e il segnale potrebbe non essere letto correttamente. Potresti anche violare i tempi di configurazione se il tempo di salita è troppo lungo. Esiste un semplice modello RLC che può essere simulato per determinare il valore appropriato del resistore in serie.
Il modello reale di un bus SPI è più complesso. Include i seguenti fattori:
Il bus corto somiglia sostanzialmente a questo modello LC:
L'impedenza della sorgente è idealmente 0 Ohm, sebbene in realtà possa essere un valore basso di circa 10-30 Ohm. La capacità di carico deve essere specificata nella scheda tecnica del ricevitore.
Howard Johnson ne parla sul sito web di SigCon; questo è un bus che può presentare oscillazioni sotto amplificate se riceve un segnale veloce e c'è troppa induttanza; può anche essere simulato in SPICE. L'aggiunta di un resistore in serie in questo caso aggiunge smorzamento, riducendo il tempo di salita.
Nota che non ho tenuto conto della resistenza della traccia in questo elenco; la resistenza della traccia sarà molto bassa e fornirà perdite e attenuazioni trascurabili. Questo perché la resistenza della traccia è dell'ordine dei milliOhm, mentre la resistenza approssimativa che regola il tempo di salita può essere compresa tra 10 e 100 Ohm, quindi è chiaro che la resistenza della traccia è trascurabile.
Nel caso di un bus lungo, che non è poi così raro, è necessario abbinare la linea SPI a un'impedenza target (50 Ohm è un valore adeguato). In questo caso, confrontando l'oscillazione del segnale sull'I/O SPI con la corrente, otterrai un valore di resistenza per il segnale nello stato ON. In questo caso, in genere, il resistore della serie è di 22 Ohm o 33 Ohm necessari per raggiungere un obiettivo di 50 Ohm. Posizionalo vicino al driver per far coincidere l'impedenza e rallentare il segnale come descritto qui.
L'altra ragione per farlo è se sul bus sono presenti più componenti slave; dovrai quindi abbinare il resistore all'impedenza di ingresso in ciascun ramo del bus e potrebbe avere senso rallentare il tempo di salita abbastanza in modo da non doversi preoccupare dell'impedenza di ingresso ai divisori nel bus. In generale, suddividere la linea più vicino al driver è meglio perché l'impedenza d'ingresso in ciascuna sezione sarà più vicina all'impedenza caratteristica della linea.
Qualcosa che non abbiamo trattato in questo articolo è il formato di segnalazione in SPI. Per ulteriori informazioni su questo aspetto del protocollo SPI, leggi questa eccellente panoramica di Mark Harris:
Indipendentemente dal fatto che sia necessario applicare o meno un requisito di impedenza di traccia SPI, è possibile progettare le migliori schede con le funzioni di progettazione e instradamento di PCB di Altium Designer®. Quando avrai completato il progetto e vorrai inviare i file al tuo produttore, la piattaforma Altium 365™ ti permetterà di semplificare la collaborazione e la condivisione dei tuoi lavori.
Questo è solo un assaggio di tutto ciò che è possibile fare con Altium Designer su Altium 365. Inizia la tua prova gratuita di Altium Designer + Altium 365 oggi stesso.