Analisi del protocollo UART

1. Base dell'accordo

1.1. Introduzione all'Accordo

UART è "Ricevitore/trasmettitore asincrono universale", abbreviazione di ricetrasmettitore asincrono universale. Negli anni '1860 dell'Ottocento, per risolvere il problema della comunicazione tra computer e telescriventi, Bell inventò il protocollo UART, che converte i segnali di ingresso paralleli in segnali di uscita seriali. A causa della sua natura semplice e pratica, UART è diventato un protocollo di comunicazione molto diffuso. Le porte seriali a cui siamo esposti quotidianamente, RS232, RS485 e altri bus, l'uso interno è fondamentalmente il protocollo UART.

Per comprendere e analizzare meglio la relazione tra protocolli e bus, di solito dividiamo una specifica di comunicazione completa in livelli fisici, livelli di protocollo e livelli di applicazione. Lo strato fisico definisce solo le vere caratteristiche del segnale (come tensione, corrente, capacità di pilotaggio, ecc.) e la corrispondenza tra il segnale elettrico e il segnale logico 0 e 1; Il livello del protocollo non si preoccupa di come vengono implementati gli 0 e gli 1 sottostanti, ma specifica solo le specifiche del protocollo dei segnali logici e del processo di comunicazione (come inizio, dati e fine, ecc.); Il livello dell'applicazione non si preoccupa di come vengono ottenuti i dati, ma definisce solo il significato della rappresentazione dei dati e come implementare la logica di business specifica.

L'applicazione più semplice del protocollo UART, solitamente lo strato fisico necessita solo di due linee di trasmissione, una per la trasmissione e una per la ricezione, ottenendo così una comunicazione full-duplex. Per le trasmissioni unidirezionali, puoi anche utilizzare una sola linea di trasmissione. L'esempio più tipico di tale applicazione sono le porte RX/TX del microcontrollore collegate tra loro, consentendo la comunicazione UART basata sul livello TTL. Per diverse distanze di trasmissione e requisiti di affidabilità, la sostituzione di diverse implementazioni di livello fisico può ottenere i nostri comuni bus di comunicazione RS232, RS485 e altri.

1.2. Diverse implementazioni a livello fisico

Poiché l'ingresso al livello del protocollo UART è un segnale logico 0/1, il segnale logico 0/1 può essere distinto in base a diversi standard di livello nel livello fisico. Per diverse esigenze di comunicazione, possono essere utilizzati diversi livelli fisici. Ad esempio, una semplice comunicazione a bordo o scenari comuni di debug del dispositivo, la comunicazione del protocollo UART tra due dispositivi può essere eseguita utilizzando un semplice livello LVTTL/TTL.

La porta seriale universale utilizza il livello RS232, che può aumentare la distanza di trasmissione e resistere a un certo grado di interferenza del segnale. Il costo è che il chip di traduzione del livello corrispondente è richiesto a livello fisico per ottenere, il trasmettitore deve convertire il segnale interno di livello alto e basso in un segnale di tensione +/- tensione più alto e l'estremità ricevente deve convertire il +/- - segnale di tensione in un segnale interno di livello alto e basso.

Nel caso della comunicazione industriale, per migliorare ulteriormente la distanza di trasmissione e aumentare l'affidabilità del segnale, viene generalmente utilizzato lo standard di livello RS485. I normali segnali di livello alto e basso vengono convertiti in una coppia di segnali differenziali all'estremità di trasmissione e i segnali differenziali vengono convertiti in normali segnali di livello alto e basso all'estremità di ricezione. Inoltre, l'RS485 consente di collegare fino a 128 ricetrasmettitori sul bus, mentre TTL o RS232 sono connessioni punto-punto.

1.2.1. Comunicazione UART basata su TTL

La comunicazione UART basata su TTL è il caso d'uso più semplice per le applicazioni del protocollo UART. Cioè, i livelli alto e basso dell'uscita I/O digitale vengono trasmessi direttamente come segnale fisico effettivo. In termini di connessione fisica, solo il dispositivo deve avere una messa a terra comune e la comunicazione unidirezionale del dispositivo può essere completata tramite una linea di segnale. Se è richiesto il full duplex bidirezionale, vengono utilizzate due linee di segnale.

Per confrontare le differenze nell'implementazione di diversi livelli fisici, possiamo osservare come i segnali effettivi di diversi livelli fisici differiscono quando vengono inviati gli stessi dati. Qui, prendendo come esempio il carattere di trasmissione 'D', attraverso l'oscilloscopio a pietra, osservare direttamente il segnale trasmesso dal TTL (il terminale di massa della sonda è collegato all'estremità di terra comune del dispositivo e l'estremità del segnale della sonda è collegata a la linea del segnale blu nella figura sopra) e la forma d'onda del segnale mostrata nella Figura 1-4 può essere ottenuta. Come si può vedere dalla forma d'onda, quando non c'è trasmissione dati, il segnale UART rimarrà ad un livello alto (l'ampiezza specifica del segnale è determinata dalla tensione di alimentazione dell'I/O), il segnale salterà durante la trasmissione dati e il segnale tornerà allo stato di livello alto inattivo al termine della trasmissione.

1.2.2. Comunicazione UART basata su RS232

Per migliorare la capacità dell'azionamento di aumentare la distanza di trasmissione e l'affidabilità, il bus RS232 utilizza un segnale di tensione bipolare per la trasmissione fisica. Prima che il segnale venga inviato/ricevuto, il segnale interno e il segnale del bus vengono convertiti tra loro per mezzo di un chip di spostamento del livello. Il metodo di connessione è esattamente lo stesso del livello TTL e l'intero livello fisico è solo un ulteriore livello di traslazione del livello.

Usando anche il carattere di trasmissione 'D' come esempio, la sonda dell'oscilloscopio Pushi è collegata all'estremità del segnale ed è possibile acquisire la forma d'onda effettiva mostrata nella Figura 1-6. Si può vedere che la forma d'onda RS232 è una tensione negativa quando è inattiva e, quando c'è una trasmissione di dati, il segnale inizia a saltare tra le tensioni positive e negative e torna allo stato di tensione negativa inattiva dopo che la trasmissione è stata completata.

1.2.3. Comunicazione UART basata su RS485

L'RS485 è progettato per ambienti industriali complessi e la caratteristica principale del bus RS485 è l'uso della trasmissione del segnale differenziale rispetto ai livelli fisici di altri protocolli UART. Prima che il segnale venga inviato, il segnale single-ended viene convertito in un segnale differenziale dal ricetrasmettitore di RS485, e quindi inviato al bus per la trasmissione; Anche prima della ricezione, il segnale differenziale sul bus viene convertito dal ricetrasmettitore in un segnale single-ended e quindi inviato al controller UART per la ricezione. Sul bus RS485 sono necessarie due coppie di linee di segnale differenziali (ovvero 4 linee di segnale) per la comunicazione bidirezionale full-duplex. Se viene eseguita solo la comunicazione a due vie half-duplex, è necessaria solo una coppia di segnali differenziali.

Anche in questo caso, utilizzando il carattere di trasmissione 'D' come esempio, la forma d'onda effettiva mostrata nella Figura 1-8 può essere acquisita utilizzando due sonde di canale (comunemente indicate) delle sonde dell'oscilloscopio Pushi, che sono collegate alle estremità A/B di uno dei segnali differenziali. Si può vedere che la forma d'onda all'estremità A/B è complementare. La forma d'onda del terminale A è logica diretta (tensione positiva quando è inattiva) e la forma d'onda del terminale B è logica inversa (tensione negativa quando è inattiva).

2. Specifiche del protocollo

2.1. Struttura del telaio UART

Nell'introduzione della sezione precedente, abbiamo osservato la forma d'onda UART effettiva attraverso l'oscilloscopio a pietra, quindi come viene esattamente riconosciuta questa forma d'onda come il carattere 'D' e non qualcos'altro? Ciò comporta la definizione della struttura del frame del protocollo UART. Come mostrato nella Figura 2-1:

Quando due dispositivi devono comunicare tramite il protocollo UART, devono concordare contemporaneamente quanto segue:

  • Durata per segnale T (baud rate = 1/T)
  • Il numero specifico di bit in ogni elemento nella struttura del frame
  • Se esiste una cifra di controllo e il meccanismo della cifra di controllo (dispari/pari/…). )

Con queste convenzioni, il dispositivo ricevente deve solo attendere l'arrivo del bit di partenza, quindi campionare la forma d'onda successiva a intervalli regolari per ottenere le informazioni specifiche trasmesse. Prendendo come esempio la forma d'onda del carattere 'D', il processo di risoluzione è mostrato nella Figura 2-2:

2.1.1. Velocità di trasmissione

Il baud rate è un concetto molto importante del protocollo UART, o di tutti i protocolli seriali asincroni, ovvero il numero di bit che può essere rappresentato per unità di tempo (1 secondo), oppure può anche essere espresso come reciproco della larghezza del bit . Ad esempio, una forma d'onda UART con una velocità di trasmissione di 115200 significa che può contenere 115200 bit al secondo, il che significa che ogni bit di dati rappresenta circa 8.68uS di tempo.

I protocolli seriali asincroni come UART, al fine di semplificare la connessione fisica dei segnali e ridurre i costi di comunicazione, generalmente hanno una sola linea di segnale e non possono trasmettere dati e segnali di clock contemporaneamente. Affinché il ricetrasmettitore/dispositivo di trasmissione risolva correttamente la forma d'onda, deve avere la stessa impostazione della velocità di trasmissione. La stessa forma d'onda che utilizza velocità di trasmissione diverse può ottenere informazioni completamente diverse. Per il dispositivo ricevente, solo il bit di avvio può essere utilizzato come punto di sincronizzazione di un frame di dati e gli altri dati sono determinati dalla velocità di trasmissione per determinare la posizione di campionamento specifica.

Anche in questo caso, utilizzando la forma d'onda del carattere 'D' come esempio, come mostrato nella Figura 2-4, se viene ricevuta alla velocità di trasmissione errata, è possibile ottenere informazioni sui dati completamente errate.

2.1.2. Bit inattivi

Quando i dati non vengono trasferiti tra dispositivi, un livello alto sostenuto indica l'inattività. Maggiore è la durata del bit di inattività e maggiore è l'intervallo tra due frame di dati, meno dati vengono trasmessi per unità di tempo.

2.1.3. Bit di inizio

Il ricevitore UART rileverà sempre il cambiamento di livello sulla linea del segnale e, quando i dati vengono trasmessi, il mittente tirerà la linea del segnale dal livello alto alla fine del livello basso allo stato di riposo e manterrà un po' di tempo. Quando il ricevitore rileva uno spostamento di livello alto-basso, inizia a ricevere i segnali.

2.1.4. Bit di dati

Il bit di dati contiene i dati effettivamente trasmessi, che sono lunghi da 5 a 8 bit se viene utilizzata la parità e da 5 a 9 bit se non viene utilizzata la parità. In generale, i bit di dati sono 8 bit e i dati vengono inviati per primi dal bit meno significativo, con i bit alti che vengono per secondi.

2.1.5. Controllare le cifre

Le cifre di controllo possono essere utilizzate per migliorare l'affidabilità della trasmissione. Se il segnale è errato a causa di un'interferenza nel processo di trasmissione e provoca un errore nel livello di alcune posizioni, è possibile determinare se i dati ricevuti e la cifra di controllo corrispondono calcolando se i dati ricevuti e le cifre di controllo corrispondono, quindi in modo da fornire informazioni valide al livello dell'applicazione per decidere di accettare/eliminare i dati corrispondenti.

2.1.6. Bit di arresto

Il bit di stop rappresenta la fine di un frame di dati e il segnale effettivo è un periodo di tempo alto. La lunghezza del bit di stop può essere impostata su un bit di stop di 1, 1.5 o 2 bit. Nella maggior parte dei casi viene utilizzato un bit di stop di 1 bit.

Poiché UART è un protocollo asincrono, l'inizio di ogni frame può essere sincronizzato con un fronte di salto, ma il bit di stop può calcolare la posizione relativa solo in base alla velocità di trasmissione e se viene riconosciuto un livello basso nella posizione di stop, un errore di frame è generato. Nel processo di comunicazione, al fine di ridurre il problema causato dall'errore del baud rate, è possibile impostare diverse lunghezze di bit di stop per adattarsi.

3. Analizzare la comunicazione UART utilizzando un analizzatore logico

3.1. Oscilloscopio vs Analizzatore logico

Essendo il principale strumento di prova e misurazione per uso generale, gli oscilloscopi hanno un vantaggio naturale nell'osservare i dettagli dei segnali analogici. Ad esempio, il funzionamento in tempo reale, con un'elevata frequenza di aggiornamento della forma d'onda, può facilmente osservare segnali anomali improvvisi; Ad esempio, quando si esegue la valutazione del rumore e l'ottimizzazione della qualità del segnale, l'oscilloscopio può confrontare le somiglianze e le differenze dei segnali sullo stesso bus e nodi diversi per trovare problemi nascosti di integrità del segnale.

Tuttavia l'oscilloscopio ha naturalmente anche dei posti scomodi, oltre ai pochi canali, lo schermo è generalmente piccolo, il funzionamento non è computer + mouse modo flessibile e controllabile questi problemi morfologici, per l'acquisizione e l'analisi di segnali digitali, il più grande il problema dell'oscilloscopio è che la profondità di memoria è troppo piccola. Un oscilloscopio di diverse centinaia di migliaia di yuan può anche avere una profondità di memorizzazione di poche centinaia di Mpts. Allo stesso tempo, a causa della limitazione della profondità di memorizzazione, quando è necessario eseguire un'acquisizione di tempo leggermente più lunga, la vera frequenza di campionamento dell'oscilloscopio diminuirà drasticamente, con il risultato che la forma d'onda raccolta non può ripristinare il segnale reale, perdendo il significato dell'analisi.

Gli analizzatori logici sono strumenti di test e misurazione progettati specificamente per l'acquisizione e l'analisi del segnale digitale e i risultati della forma d'onda raccolti sono solo di livello alto e basso (ovvero, 0 e 1 logici). Tuttavia, compensa la mancanza di oscilloscopi nell'acquisizione e nell'analisi dei segnali digitali.

  1. 1. La maggior parte degli analizzatori logici funziona su un PC, con le potenti prestazioni dei processori desktop e l'esperienza interattiva dei sistemi operativi maturi, che migliora notevolmente la praticità e l'efficienza dell'analisi del segnale digitale.
  2. 2. Il numero di canali dell'analizzatore logico è elevato, l'analizzatore logico DSLogic entry-level ha 16 canali che possono essere raccolti contemporaneamente e l'utente può anche ottenere prodotti dell'analizzatore logico con dozzine o addirittura centinaia di canali a un prezzo molto ragionevole costo.
  3. 3. La profondità di archiviazione dell'analizzatore logico è maggiore, ad esempio DSLogic può raggiungere una profondità di archiviazione di 16G in modalità flusso e allo stesso tempo mantenere una frequenza di campionamento abbastanza elevata, superando di gran lunga la capacità di acquisizione della maggior parte degli oscilloscopi.
  4. 4. Gli analizzatori logici generalmente forniscono ricche funzioni di decodifica del protocollo, che possono eseguire analisi approfondite dei segnali digitali. Ad esempio, DSLogic attualmente supporta più di 100 protocolli di decodifica. La maggior parte degli oscilloscopi ha capacità di decodifica limitate e la maggior parte richiede l'acquisto separato dei plug-in corrispondenti.

Successivamente, ci concentreremo su come utilizzare gli analizzatori logici per l'acquisizione e l'analisi dei segnali UART in varie situazioni.

3.2. Stabilire un ambiente di test per analizzatori logici

3.2.1. Collegamento a DSLogic

DSLogic è un analizzatore logico portatile basato su connettività USB. L'host DSLogic è responsabile dell'acquisizione del segnale e della memorizzazione nella cache, quindi trasmette i dati tramite USB al software del computer host DSView sul PC. DSView è responsabile dell'elaborazione dei dati delle forme d'onda, della visualizzazione, dell'analisi e delle corrispondenti funzioni di interazione uomo-computer.

Durante l'utilizzo, è sufficiente collegare l'host DSLogic direttamente alla porta USB sulla scheda PC tramite un cavo dati USB, aprire il software DSView e verificare che l'INDICATORE sull'host DSLogic diventi sempreverde. A questo punto il collegamento e l'inizializzazione dell'analizzatore logico sono completati. Come mostrato nella Figura 3-4, sul software DSView è possibile osservare il nome del dispositivo corrente nell'angolo in alto a sinistra e lo stato della connessione corrispondente.

3.2.2. Collegamento del segnale UART

Per tutte le misurazioni, l'apparecchiatura di prova e il segnale da misurare devono essere basati su un piano di riferimento comune, comunemente indicato come messa a terra, in modo che il segnale misurato possa essere correttamente acquisito e misurato. In alcuni casi non c'è una messa a terra esplicita, ma i risultati della misurazione sembrano non essere un problema, questo perché l'apparecchiatura di misurazione e il segnale misurato sono collegati a terra in altri modi, come lo stesso alimentatore utilizzato, o il riferimento messa a terra è collegata contemporaneamente al terminale di terra della rete. Tuttavia, quando si effettuano misurazioni rigorose, l'apparecchiatura di misurazione deve essere collegata a terra in base al segnale in prova. Maggiore è l'area del circuito del terminale di messa a terra del segnale dal segnale misurato al dispositivo di misurazione, più facile è l'interferenza del segnale, che provoca errori di misurazione o addirittura errori di misurazione.

Per i segnali UART, quando si accede all'analizzatore logico, nel caso più semplice è necessario collegare solo 2 fili, uno alla massa di riferimento e uno al segnale misurato. Per le diverse implementazioni del livello fisico del protocollo UART menzionate in precedenza, il modo in cui i segnali sono collegati sarà leggermente diverso.

Ad esempio, per il segnale UART a livello TTL, oltre a collegare la massa di riferimento, è sufficiente collegare il segnale (TX o RX) da testare all'ingresso del canale corrispondente dell'analizzatore logico.

Per i segnali bus RS232, possiamo misurare il segnale bus dopo la traslazione di livello (DSLogic ha un intervallo di tensione di tenuta di +-30 V all'ingresso del cavo e l'intervallo del segnale +-15 V di RS232 può essere collegato direttamente), oppure possiamo misurare il segnale digitale interno prima della traslazione di livello. Il suo metodo di cablaggio è coerente con il segnale TTL, l'unica cosa da notare è che il segnale RS232 capovolge il livello (tensione negativa quando è inattivo, cioè livello basso), durante la decodifica del protocollo UART, possiamo invertire il livello del segnale corrispondente in la finestra delle impostazioni di decodifica di DSView (l'opzione Inverti segnale è impostata su sì).

Il bus RS485 utilizza segnali differenziali e quando utilizziamo un analizzatore logico per l'acquisizione del segnale, dobbiamo prestare particolare attenzione al collegamento del segnale misurato. Innanzitutto, il sito di riferimento dell'analizzatore logico deve essere collegato alla massa di riferimento del corrispondente dispositivo in prova ricetrasmettitore RS485, in modo da garantire che l'analizzatore logico abbia il corretto piano di riferimento del livello; In secondo luogo, per i segnali differenziali, l'analizzatore logico deve solo acquisire alti e bassi livelli di omopolarità con il segnale interno. Dal punto di vista dei segnali digitali, il modo differenziale migliora solo l'affidabilità della trasmissione del segnale, senza aggiungere ulteriori informazioni. Come mostrato nella Figura 3-7, quando si testa il segnale del bus 485 utilizzando un analizzatore logico, collegare la massa di riferimento del ricetrasmettitore del dispositivo corrispondente e il segnale A+ sul bus differenziale.

Naturalmente, se è possibile raccogliere solo il segnale B, possiamo anche impostare il decoder UART per invertire il segnale per ottenere il risultato di risoluzione del protocollo corretto durante la decodifica in DSView.

3.2.3. Impostazioni soglia

La soglia dell'analizzatore logico è la tensione di giudizio dei livelli alto e basso, ovvero quando la tensione del segnale di ingresso è superiore alla tensione di soglia, l'acquisizione è di livello alto; Quando la tensione del segnale di ingresso è inferiore alla tensione di soglia, l'acquisizione è bassa.

Per il protocollo UART, abbiamo precedentemente introdotto che ha diverse implementazioni di livello fisico e diverse implementazioni di livello fisico hanno standard di livello diversi. Abbiamo solo bisogno di scegliere una soglia corrispondente per distinguere tra livelli alti e bassi in diversi casi. Le soglie mostrate nella Figura 3-8 possono sostanzialmente soddisfare questo requisito.

In alcuni casi, l'ampiezza del segnale differenziale del bus RS485 può variare in un ampio intervallo a causa della configurazione o del debug. Poiché la specifica RS485 stabilisce che finché la tensione differenziale tra AB è maggiore di 200 mV, può essere considerata alta. A questo punto, possiamo utilizzare l'oscilloscopio a pietra per osservare l'ampiezza effettiva del livello del segnale e quindi decidere l'impostazione della soglia appropriata. Devi solo assicurarti che la tensione di soglia impostata possa ragionevolmente distinguere tra livelli alti e bassi.

3.3. Semplice acquisizione del segnale UART

La maggior parte dei segnali UART sono segnali a bassa velocità, come il baud rate più comunemente usato di 115200, che indica che la frequenza del segnale è solo 115.2 KHz. Tali segnali possono essere acquisiti direttamente utilizzando le impostazioni di default di DSLogic. Qui, prendendo l'intervallo fisso di 1 s dell'host e inviando ripetutamente il carattere "D" come esempio, viene descritto come utilizzare un analizzatore logico per acquisire e analizzare tali segnali UART.

3.3.1. Acquisizione del segnale

Dopo aver preparato l'hardware e la connessione del segnale, fare clic sul pulsante "Avvia" del software DSView direttamente per acquisire il segnale in prova con l'impostazione predefinita (tempo di acquisizione della frequenza di campionamento 1MHz 1s). Se si desidera modificare la frequenza di campionamento e la durata dell'acquisizione, selezionare i parametri corrispondenti direttamente nella casella a discesa corrispondente. Si raccomanda che il principio di impostazione della frequenza di campionamento sia 10 volte o più della frequenza massima del segnale misurato, ad esempio, per i segnali UART con una velocità di trasmissione di 115200 baud, la frequenza del segnale più veloce è 115.2 KHz, quando la frequenza di campionamento di 1 M è selezionato, ogni segnale bit avrà 8 o 9 punti di campionamento e l'errore di fase corrispondente è +-1/8 (12.5%); Quando viene selezionata una frequenza di campionamento di 10 M, ci saranno 86 o 87 punti di campionamento per bit di segnale, corrispondenti a un errore di fase di +-1/86 (1.16%). Naturalmente, generalmente non è consigliabile utilizzare una frequenza di campionamento troppo alta, perché maggiore è la frequenza di campionamento, minore è il tempo per il quale può essere raccolta e una frequenza di campionamento troppo alta può raccogliere più salti sul singolo salto limite del segnale lento, causando così problemi alla decodifica del protocollo. La Figura 3-9 mostra la forma d'onda del segnale risultante acquisita utilizzando le impostazioni predefinite.

Come si può vedere dalla Figura 3-9, il Canale 0 acquisisce un segnale persistentemente alto, ma non trova alcun salto. Osservare attentamente il righello temporale sopra la finestra della forma d'onda e la barra di scorrimento nella parte inferiore della finestra per sapere che la finestra corrente visualizza solo una parte della forma d'onda raccolta, non tutti i segnali. A questo punto è possibile eseguire lo zoom con la rotellina del mouse o fare clic con il pulsante destro del mouse nell'area della forma d'onda per visualizzare tutte le forme d'onda per l'intera durata dell'acquisizione. Ottieni il risultato mostrato nella Figura 3-10.

Sulla base della figura sopra, vogliamo guardare solo la parte di transizione del canale 0. È possibile disattivare la visualizzazione della forma d'onda di altri canali nella finestra Opzioni e regolare l'altezza di visualizzazione del segnale del canale. Quindi puntare il mouse sulla forma d'onda target e, allo stesso tempo, utilizzare la rotellina del mouse per ingrandire la forma d'onda della posizione puntata; In alternativa, è possibile selezionare l'area della forma d'onda che si desidera ingrandire tenendo premuto il tasto destro del mouse nella casella. Inoltre, tenere premuto il pulsante sinistro del mouse per spostare la forma d'onda a sinistra ea destra. Ottenere i dettagli della forma d'onda mostrati nella Figura 3-11.

Quando si osserva la forma d'onda, posizionando il mouse sopra la forma d'onda dell'impulso è possibile visualizzare informazioni come l'ampiezza dell'impulso, il periodo, la frequenza e il duty cycle del segnale corrente. Allo stesso tempo, puoi anche aggiungere un cursore facendo doppio clic con il pulsante sinistro del mouse e, quando sposti il ​​cursore, si alzerà automaticamente al bordo di salto vicino.

3.3.2. Decodifica UART

La forma d'onda del segnale raccolta dall'analizzatore logico cambia nel tempo solo a livelli alti e bassi (0/1), il che non è favorevole alla nostra analisi mirata del processo e del contenuto della trasmissione del segnale. Sebbene possiamo utilizzare l'occhio nudo per tradurre il contenuto del protocollo corrispondente alla forma d'onda in base alle specifiche del protocollo, ridurrà notevolmente l'efficienza dell'analisi. Il decodificatore integrato di DSView fornisce un ricco contenuto di decodifica del protocollo, trasformando le noiose forme d'onda in caratteri, marcatori e contenuti di dati significativi. Facilita notevolmente l'analisi e la comprensione dei segnali da parte degli ingegneri per trovare messaggi di errore o dati critici.

Nel software DSView la decodifica del protocollo della forma d'onda acquisita è molto semplice, basta aprire il pannello “Decode”, cercare il decoder corrispondente (qui selezioniamo 1: protocollo UART), e impostare le opzioni del decoder corrispondenti (incluso display/canale /struttura/formato del frame, ecc.). Una volta determinato, il software inizierà a decodificare il protocollo dell'UART sul canale selezionato. Il risultato decodificato viene visualizzato nel canale del protocollo. Questo è mostrato nella Figura 3-12.

Quando si seleziona un decoder, DSView fornisce una comoda funzione di ricerca del protocollo, basta inserire i caratteri chiave nella casella di ricerca del protocollo, DSView elencherà tutti i decoder contenenti questi caratteri, dove l'utente può selezionare il decoder corretto. Come mostrato nella Figura 3-13, esistono due protocolli relativi a UART 0: UART e 1: UART, dove 0: UART è un decoder semplificato che non analizza le informazioni sui bit, né supporta lo stacking di protocolli di livello superiore, quando vogliamo solo ottenere i dati corrispondenti alla forma d'onda, è possibile utilizzare questo protocollo semplificato per ridurre il tempo di decodifica e le risorse di memoria.

La finestra delle impostazioni del decoder ha molte opzioni di impostazione relative alla decodifica e il contenuto della finestra delle impostazioni dei diversi protocolli sarà diverso. Ci sono alcune opzioni che tutti i decoder devono impostare, come la corrispondenza tra i segnali del canale e del protocollo. Qui stiamo usando il segnale UART catturato dal canale 0, quindi il canale corrispondente che deve essere decodificato dovrebbe essere impostato sul canale 0.

E le opzioni di impostazione relative al protocollo che abbiamo spiegato in dettaglio nella sezione della struttura del frame, nel funzionamento effettivo possono anche essere ottenute tramite il software del computer host della porta seriale (assistente di debug della porta seriale, ecc.) Per ottenere queste informazioni. Questo è mostrato nella Figura 3-14.

Per il contenuto dei dati decodificato, DSView supporta diversi formati di visualizzazione. Ad esempio, il segnale UART precedentemente acquisito visualizza il carattere 'D' sotto forma di codici ASCII, oppure può essere modificato nella modalità di visualizzazione esadecimale (Hex) e il risultato visualizzerà 0x44. Questo è mostrato nella Figura 3-15. I formati di visualizzazione attualmente supportati sono: hex (esadecimale), dec (decimale), oct (ottale), bin (binario) e codice ascii.

3.4. Acquisizione di una singola trasmissione UART

Quando la forma d'onda che vogliamo acquisire è un segnale occasionale, non sappiamo quando apparirà la forma d'onda e, se utilizziamo il metodo di acquisizione diretta, potremmo essere in grado di catturare solo la forma d'onda del segnale inattivo per la maggior parte del tempo e non possiamo catturare il segnale al momento della trasmissione effettiva.

In questo momento, può essere catturato tramite trigger. Impostando le condizioni di trigger corrispondenti, possiamo controllare l'ora di inizio dell'acquisizione del segnale in base al cambiamento della forma d'onda, in modo da catturare con precisione la forma d'onda del segnale che vogliamo vedere.

3.4.1. Modalità tampone

DSLogic supporta due modalità di acquisizione: modalità Stream e modalità Buffer. I dati raccolti in modalità Stream vengono trasmessi al PC in tempo reale e quindi elaborati da DSView. I dati raccolti in modalità Buffer vengono prima memorizzati nella cache hardware interna di DSLogic, quindi trasferiti al PC al termine dell'acquisizione ed elaborati da DSView.

Oltre ai vantaggi di ottenere frequenze di campionamento più elevate, la modalità Buffer supporta anche più opzioni e impostazioni di attivazione, come attivazione multilivello, attivazione seriale e impostazione delle posizioni di attivazione. La modalità Stream, d'altra parte, supporta solo il trigger semplice.

3.4.2. Impostazioni di attivazione

Per un'attivazione semplice, possiamo impostare l'opzione di attivazione direttamente accanto al canale. Corrisponde in sequenza al fronte di salita, alto, fronte di discesa, livello basso e qualsiasi trigger di fronte. Mantieni semplicemente la modalità di attivazione semplice predefinita nel pannello di attivazione. Ad esempio, per una trasmissione UART che non sa quando si verifica, possiamo scegliere di attivare il fronte di discesa. Quando il segnale UART rimane inattivo, il trigger non è soddisfatto. DSLogic attende l'arrivo della condizione di trigger, come mostrato nella Figura 3-17.

Quando l'UART inizia a trasmettere il primo bit di avvio, la condizione di trigger viene attivata e DSLogic acquisisce la forma d'onda del segnale al momento del trigger. Questo è mostrato nella Figura 3-18.

Consideriamo uno scenario trigger più complesso, come il dispositivo A che invia costantemente dati al dispositivo B in modo casuale e il dispositivo B che risponde a dati diversi in base al contenuto dei dati inviato dal dispositivo A. Se vogliamo sapere quali dati il ​​dispositivo A ha inviato al dispositivo B prima di inviare i dati 0, come impostiamo la condizione di trigger per catturare la forma d'onda nel momento corrispondente?

Ci sono due problemi che devono essere risolti qui, prima dobbiamo impostare la posizione del trigger in modo da poter vedere i dati prima del trigger, non i dati dopo il trigger; In secondo luogo, dobbiamo trovare le caratteristiche della forma d'onda del dispositivo B che invia i dati 0 e convertirlo nella corrispondente condizione di trigger.

Analisi del protocollo UART

Figura 3-19 Posizione del grilletto

Secondo le regole del protocollo di UART, la forma d'onda che invia i dati 0 sarà un segnale di impulso di basso livello continuo relativamente ampio. Se la velocità in baud dell'UART è 115200 e la frequenza di campionamento che abbiamo impostato è 1 MHz, la forma d'onda dei dati 0 è mostrata nella Figura 3-20, che sarà un impulso di basso livello di circa 78.125 uS.

Per impostare il trigger avanzato o la posizione del trigger è necessario il supporto della modalità buffer, è necessario prima impostare la "Modalità di esecuzione" su "Modalità buffer" in "Opzioni" e non selezionare l'opzione "Compressione hardware RLE". Impostare la condizione di trigger avanzato sul canale 1 con un minimo continuo di 75 punti di campionamento (corrispondente a una frequenza di campionamento di 1MHz, che è un livello basso di 75us) e impostare la posizione di trigger sull'80% per facilitare l'osservazione dei dati prima dell'attivazione. Le impostazioni specifiche sono mostrate nella Figura 3-21.

In base a questa condizione di trigger, viene attivato quando il dispositivo B invia i dati 0 e la forma d'onda acquisita è mostrata nella Figura 3-22.

3.4.3. Ripetere la raccolta

In alcuni casi, abbiamo bisogno di osservare dinamicamente lo stato di alcuni segnali, come il contenuto dei dati inviato da Burst ogni volta, ma non sappiamo quando i dati vengono inviati ed è impossibile fare clic frequentemente sul pulsante "Avvia" . DSView fornisce una modalità di acquisizione "ripetuta" che acquisisce e aggiorna automaticamente le forme d'onda quando viene soddisfatta l'attivazione. Quando eseguiamo il debug di alcuni segnali burst periodici, è molto conveniente osservare i risultati dell'acquisizione dinamica e dell'analisi del protocollo attraverso la modalità di ripetizione.

La modalità di ripetizione può essere impostata come mostrato nella Figura 3-23. L'intervallo di ripetizione è il tempo di permanenza minimo tra due campioni per facilitare l'osservazione della forma d'onda e la decodifica dei risultati dell'acquisizione precedente.

3.5. Acquisizione di trasmissioni UART a lungo termine

Quando è necessario acquisire forme d'onda ultra lunghe per l'analisi, possiamo utilizzare la modalità Stream. DSLogic può raggiungere una profondità di campionamento di 16G per canale in modalità Stream. Con una frequenza di campionamento di 1MHz, il tempo di acquisizione può raggiungere 16G/1M ≈ 16000s, ovvero più di 4 ore.

3.5.1.Modalità streaming

L'impostazione della modalità flusso è mostrata nella Figura 3-24 e diverse versioni hardware di DSLogic supportano diverse opzioni del canale della modalità flusso. Per U3Pro16, basato sulla porta USB 3.0, può raggiungere 3 canali con una frequenza di campionamento fino a 1 GHz, 6 canali con una frequenza di campionamento fino a 500 MHz, 12 canali con una frequenza di campionamento fino a 250 MHz e 16 canali con una frequenza di campionamento fino a 125 MHz.

Quando la quantità di dati raccolti è relativamente grande, il protocollo 0:UART può essere utilizzato per la decodifica, rispetto a 1:UART, che omette l'output delle informazioni sui bit, non supporta lo stacking del protocollo di alto livello e può ridurre il tempo di decodifica e ridurre l'occupazione della memoria. Le altre funzioni sono le stesse di 1: UART. L'effetto di decodifica è mostrato nella Figura 3-25.

3.5.2. Viene visualizzato l'elenco dei protocolli

Come mostrato nella figura seguente, il risultato della decodifica grafica è completamente sincronizzato nel tempo con la forma d'onda acquisita, il che ci aiuta a capire la forma d'onda e a trovare il problema, ma allo stesso tempo, a causa della scala di visualizzazione del tempo, non è favorevole alla visualizzazione del risultato della decodifica. La visualizzazione degli elenchi compensa questa lacuna, semplificando la visualizzazione e l'analisi di grandi quantità di contenuto decodificato.

DSView fornisce un modo per passare dai risultati grafici a quelli di elenco. Fare clic su una riga qualsiasi dei risultati dell'elenco per passare automaticamente al risultato della forma d'onda corrispondente e anche scegliere se ingrandire automaticamente la forma d'onda durante il salto o correggere la colonna del rapporto di zoom corrente della forma d'onda. Inoltre, quando visualizziamo la forma d'onda in un determinato momento, se vogliamo saltare alla posizione in cui viene visualizzato nell'elenco il risultato della decodifica corrispondente a questa forma d'onda, è sufficiente fare clic sul pulsante di posizionamento nell'angolo in alto a destra della finestra di visualizzazione dell'elenco.

Inoltre, il contenuto decodificato può essere esportato in un file tramite la visualizzazione dell'elenco. Come mostrato nella figura sopra, facendo clic sul pulsante "Salva" visualizzato nell'elenco, puoi scegliere di esportare il contenuto attualmente decodificato in un file csv o txt, il che è conveniente per l'elaborazione di dati più di terze parti, come l'input in matlab per analisi o come input di dati per altri software.

3.5.3. Decodifica la ricerca dei dati

Un altro vantaggio della visualizzazione dell'elenco è che i risultati decodificati possono essere utilizzati come stringhe per ricerche di risultati, come la ricerca di operazioni specifiche, o byte di dati specifici, che possono individuare rapidamente la posizione che deve essere visualizzata.

Immettere la parola chiave che si desidera cercare nella casella di ricerca, quindi premere i pulsanti avanti/indietro per trovare il contenuto decodificato che contiene la parola chiave e l'interfaccia della forma d'onda salterà alla posizione appropriata per l'analisi. Se stai analizzando i risultati di un segmento, puoi fare clic su una riga nell'elenco di controllo e i pulsanti Avanti/Indietro cercano le partite precedenti e successive che iniziano con questo comportamento invece di ricominciare da zero.

Per il protocollo UART, DSView supporta anche la ricerca di dati su più righe. Può essere utilizzato per trovare risultati di stringhe contigue che appaiono nei tuoi dati. Come mostrato nella Figura 3-29, una ricerca di dati su più righe concatena più parole chiave con il carattere “-”.

3.5.4. Ricerca della forma d'onda

DSView supporta non solo la ricerca dei risultati decodificati, ma anche la funzione di ricerca della forma d'onda originale. Le forme d'onda possono essere localizzate rapidamente in molte scene. Ad esempio, quando la forma d'onda viene trasmessa all'improvviso, poiché il periodo di inattività è relativamente lungo, è impossibile vedere la forma d'onda dettagliata trasmessa più volte contemporaneamente, è possibile utilizzare la ricerca della forma d'onda e passare immediatamente alla forma d'onda successiva. visualizzazione della forma d'onda nel momento precedente per garantire che il rapporto di zoom sia invariato.

Controllare la barra degli strumenti "Cerca", la casella di ricerca apparirà sotto la finestra del software, fare clic sulla casella di ricerca, visualizzare la finestra delle impostazioni di ricerca, determinare il bordo di salto del canale, è possibile cercare la forma d'onda che soddisfa i criteri a sinistra e a destra chiavi. Allo stesso tempo, puoi anche spostare manualmente il cursore di ricerca per determinare dove inizia la ricerca.

Quando si seleziona la ricerca, viene visualizzato un cursore con un tag "S", lo stato iniziale è grigio, se si fa clic a sinistra/destra per cercare e trovare una forma d'onda che soddisfi i criteri, il cursore diventerà blu e si sposterà automaticamente nella posizione di ricerca . Se si sposta manualmente il cursore “S”, il cursore diventa nuovamente grigio.

3.5.5. Utilizzo del cursore

DSView supporta un'ampia gamma di operazioni del cursore, consentendo non solo misurazioni di temporizzazione con il cursore, ma anche contrassegnare e tracciare forme d'onda speciali con il cursore. Quando la forma d'onda è inattiva o l'intervallo è lungo, è possibile inserire un cursore in ogni posizione di interesse e quando si desidera passare a una forma d'onda di interesse, è sufficiente fare clic con il pulsante destro del mouse nell'area del righello, quindi fare clic sull'icona numero di sequenza del cursore a cui si desidera saltare, che può saltare alla posizione del cursore corrispondente.

Se vuoi spostare il cursore, devi solo spostare il mouse vicino al cursore, quando il cursore appare in grassetto, fare clic con il pulsante sinistro del mouse per selezionare, il cursore seguirà il movimento del mouse, determinare la posizione e fare nuovamente clic con il pulsante sinistro per rilasciare il cursore. Quando si desidera che il cursore si alzi su uno dei bordi di salto di una particolare forma d'onda del canale, è sufficiente spostare il mouse vicino al bordo di salto e il cursore si bloccherà automaticamente sul bordo del salto.

3.5.6. Misure del mouse

Oltre alle misurazioni basate sul cursore, DSView fornisce misurazioni con il mouse più convenienti. Ad esempio, misurazioni dell'ampiezza dell'impulso attuale, del periodo, del duty cycle e della frequenza (basta posizionare il mouse sull'impulso che cambia); Misurazione del numero di fronti (cliccando sulle posizioni di inizio e fine sulla forma d'onda verranno conteggiati automaticamente i fronti di salto di questo intervallo); e misurazione della distanza dal bordo (fare clic con il mouse sul bordo iniziale e passare al bordo finale).

Come mostrato nella Figura 3-31, spostare il mouse sulla posizione del bordo di transizione iniziale, fare clic con il pulsante sinistro del mouse, selezionare il bordo di transizione iniziale, spostare il mouse sulla posizione del bordo di transizione finale e la distanza tra i due Verranno visualizzati i bordi di transizione (durata/punto di intervallo di campionamento) e si farà nuovamente clic con il pulsante sinistro del mouse per completare la misurazione.

4. Domande frequenti

4.1. Determina il baud rate sconosciuto

Quando non è possibile ottenere in anticipo il baud rate della forma d'onda UART, possiamo anche indovinare il vero baud rate dalla forma d'onda acquisita. DSView fornisce un decodificatore "Guess bitrate" per indovinare i parametri della velocità di trasmissione di una stringa di forma d'onda arbitraria. Il principio di Guess bitrate è trovare a sua volta la larghezza di impulso più stretta nella forma d'onda, come larghezza della forma d'onda di un bit, e quindi calcolare il suo reciproco come baud rate. Quindi potrebbero esserci più risultati, dobbiamo solo osservare se l'impulso corrispondente ha un'ampiezza di impulso ragionevole e quindi selezionare il risultato della velocità di trasmissione massima. Questo è mostrato nella Figura 4-1.

Una volta ottenuto il baud rate, è possibile impostarlo sulle opzioni per il decoder UART. Poiché il protocollo UART risincronizza ogni bit di avvio, l'errore del baud rate si accumulerà solo in un frame di dati e finché l'errore all'interno di un frame non supera il limite del bit bit, è possibile ottenere il risultato di decodifica corretto .

Naturalmente, se è presente un piccolo campione della forma d'onda, ad esempio nessun impulso di un solo bit di larghezza nella forma d'onda, è probabile che la velocità in baud ipotizzata non sia corretta, determinando un risultato di decodifica errato. Quando è presente una forma d'onda non conforme al protocollo, il decodificatore UART fornirà anche possibili suggerimenti di errore, come un errore di frame, come mostrato nella Figura 4-2. Ingegneri esperti possono regolare la velocità di trasmissione osservando la forma d'onda e i risultati di decodifica per ottenere i risultati di decodifica corretti.

4.2. Decodifica dei segnali di anti-fiducia

Nella sezione precedente abbiamo menzionato che il protocollo UART può essere trasmesso da diversi segnali fisici e alcuni segnali di livello fisico possono avere una relazione inversa con il segnale del protocollo (livello alto e basso intercambiabili), come RS232, o il segnale B in il segnale differenziale RS485. Quando il segnale che raccogliamo viene invertito, il decodificatore UART di DSView può anche essere impostato per ottenere il risultato di decodifica corretto.

L'utente deve solo sostituire "Invert Signal?" nelle impostazioni del decoder UART. L'opzione è impostata su "sì". La decodifica del segnale inverso è mostrata nella figura seguente.

4.3. Decodifica della comunicazione UART multigruppo

Il decodificatore UART di DSView è deliberatamente progettato per essere un approccio a canale singolo, che facilita le impostazioni arbitrarie del canale per la comunicazione multiplex durante la decodifica. Ad esempio, per una comunicazione UART full-duplex, che ha sia un segnale TX che un segnale RX, dobbiamo solo aggiungere due decoder UART per corrispondere alla decodifica di TX e RX.

Come mostrato nella figura seguente, è il caso in cui tre segnali UART vengono decodificati contemporaneamente.

4.4. Errore di decodifica causato dalla posizione di partenza

Per qualsiasi processo di comunicazione, il dispositivo deve partire dallo stato iniziale per ricevere correttamente il contenuto della comunicazione, ovvero identificare e analizzare correttamente la trama del protocollo. Lo stesso vale per gli analizzatori logici, se l'acquisizione di un segnale inizia esattamente nel mezzo di un frame di dati, è probabile che una posizione iniziale errata porti a un risultato di decodifica errato. Come mostrato nella figura seguente, il dispositivo continua a inviare la stringa “DreamSourceLab”, ma poiché la posizione della prima cattura è esattamente al centro del frame di dati, la decodifica della prima forma d'onda viene confusa.

Per evitare una decodifica errata dei dati, possiamo impostare artificialmente la posizione di inizio e la posizione di fine della decodifica, in modo da evitare errori di decodifica causati da frame di dati troncati. La posizione di decodifica può essere la posizione specificata di qualsiasi cursore e l'operazione richiede solo di impostare le posizioni di inizio e fine corrispondenti nelle impostazioni del decoder dopo aver inserito il cursore corrispondente. Come mostrato nella figura seguente, l'impostazione della posizione iniziale evita la decodifica errata della prima forma d'onda troncata.

5. Analisi avanzata

5.1. Analisi del protocollo multistrato

UART è un protocollo di base molto diffuso e molti dei protocolli di trasmissione utilizzati nelle applicazioni pratiche sono estesi sulla base di UART. Ad esempio: DMX512, LIN, MIDI e Modbus, ecc., la base di comunicazione sottostante è il protocollo UART. 、

In base a questa funzionalità, DSView supporta anche lo stacking di analisi di protocolli multistrato. Quando aggiungiamo un decodificatore di un protocollo complesso, DSView costruirà automaticamente l'intero stack del protocollo dal livello superiore, il che rende i risultati della decodifica più ricchi e perfetti, il che è molto utile per l'analisi approfondita e la comprensione del protocollo da parte dell'utente.

Prendiamo come esempio Modbus RTU per comprendere il processo di analisi dei protocolli multistrato di DSView. Basato sulla funzione di trasferimento dei byte UART, Modbus RTU specifica in dettaglio il significato specifico di ciascun byte, in modo che la struttura del frame di Modbus sia formata combinando insieme più frame del protocollo UART. Questo è mostrato nella figura seguente.

Quando si utilizza DSView per tale decodifica del protocollo, è sufficiente immettere il protocollo corrispondente nella casella di ricerca del protocollo e aggiungerlo. DSView crea automaticamente la pagina delle impostazioni per l'intero protocollo di stacking, come mostrato nella figura seguente, e l'utente può effettuare le impostazioni corrispondenti.

Come mostrato nella figura seguente, la struttura di stacking del protocollo è chiaramente visibile dal risultato della decodifica del Modbus RTU. Il Modbus per ogni frame è costituito da 8 frame di byte UART. Il contenuto di un frame Modbus avrà anche commenti chiari che ne indicano il significato specifico. Quando si verifica un errore di trasmissione, tale risultato di decodifica può individuare molto chiaramente la posizione dell'errore, nonché la causa dell'errore (se si tratta di un problema con l'UART sottostante o di un problema con il livello del protocollo Modbus). Se non vuoi vedere i dettagli sottostanti, puoi nascondere il contenuto decodificato corrispondente nella pagina delle impostazioni del decoder.

Sii il primo a commentare

Lascia un Commento

L'indirizzo email non verrà pubblicato.


*