Domanda:
A quale velocità di trasmissione UART è richiesto il controllo del flusso hardware?
user768421
2016-08-20 20:16:17 UTC
view on stackexchange narkive permalink

A una velocità di trasmissione bassa come 9600bps, non credo che il controllo del flusso hardware CTS / RTS sia necessario.Credo che a velocità di trasmissione più elevate sarà necessario CTS / RTS.Qual è questa velocità di trasmissione?Si può ancora fare a meno di CTS / RTS a 115,2 kbps?

Dipenderà dalla velocità di clock di qualunque dispositivo tu stia utilizzando.
NOTA: la velocità in baud non determina il numero di caratteri al secondo che l'applicazione effettivamente invia: determina solo il _massimo_ numero di caratteri al secondo che _può_ inviare.Ho gestito più di un'applicazione in cui è stata utilizzata una porta seriale per il controllo o la telemetria (al contrario del trasferimento di dati in blocco) e la velocità dei caratteri effettiva era sostanzialmente inferiore a quella consentita dalla velocità di trasmissione.
Non esiste un bit rate che risponda alla tua domanda.Molto dipende dalla capacità dell'hardware (quanto sono profondi i buffer di ricezione dell'hardware?), Dalle capacità della CPU (latenza di interrupt e velocità di elaborazione non elaborata).Ho lavorato su un'applicazione in cui era obbligatorio utilizzare solo tre fili, ma l'elemento su un'estremità era un processore di classe laptop con un RTOS e sull'altra estremità un grande FPGA.Non ricordo quale bit rate abbiamo usato, ma 115.2 suona come il giusto vicinato.Un'attenta progettazione del protocollo (pacchetti progettati per adattarsi ai buffer hardware) lo ha fatto funzionare.
Il controllo del flusso è necessario a qualsiasi velocità di trasmissione.La tua domanda si basa su un falso presupposto.Il mittente può sempre superare il ricevitore a qualsiasi velocità di trasmissione.
Otto risposte:
Peter Smith
2016-08-20 20:27:01 UTC
view on stackexchange narkive permalink

Non è la velocità dei dati che conta;usiamo CTS / RTS (o XON / XOFF per il controllo del flusso del software) dove esiste la possibilità di un overflow del ricevitore, anche se è vero che è più probabile a velocità di trasmissione dati più elevate.

Seun ricevitore non può svuotare i suoi buffer abbastanza velocemente, quindi dovrebbe disattivare CTS (in risposta al quale, il trasmettitore affermerà RTS se ci sono più dati da trasmettere).

Si noti che il trasmettitore potrebbe subire un buffer underrun, nel qual caso dovrebbe deasserire RTS (perché non ci sono dati validi da inviare).

Quindi dipende dalla velocità con cui i buffer possono essere spostati - è più probabile cheessere un problema a velocità di trasmissione dati più elevate, ma dipende completamente dall'implementazione;non esiste un'unica velocità.

Anche la dimensione del buffer di ricezione (FIFO hardware) gioca in questo.Supponiamo che i dati arrivino in raffiche di 32 byte che si verificano con un intervallo di ripetizione di 10 secondi.Un ricevitore con un FIFO a 64 byte può fare a meno dell'handshaking a velocità di trasmissione elevate, probabilmente.Un ricevitore con un FIFO a 16 byte probabilmente avrà bisogno di handshake al di sopra di una certa velocità di trasmissione in cui non può scaricare il FIFO abbastanza rapidamente.
@Nick: davvero.Il punto era che il problema dipende dall'implwmentatiin :)
Majenko
2016-08-20 20:24:29 UTC
view on stackexchange narkive permalink

È necessaria una qualche forma di controllo del flusso (che sia hardware o XON / XOFF) quando si trasferiscono dati a una velocità maggiore di quella che è possibile elaborare.È così semplice.

Il controllo del flusso viene utilizzato per un'estremità per dire all'altra estremità "aspetta un momento, sto ancora pensando".Di solito è legato al fatto che un buffer è quasi pieno (noto come "high water mark").

js441
2016-08-20 20:28:13 UTC
view on stackexchange narkive permalink

Il controllo del flusso hardware consente alle apparecchiature comunicanti di sincronizzarsi tra loro.Consente all'apparecchiatura ricevente di indicare che è pronta a ricevere i dati che vengono inviati.Se i dati vengono inviati quando il ricevitore non è in "ascolto", ciò causerà errori nei dati.

La velocità dei dati a cui si verifica dipenderà da una serie di altre cose, incluso il tipo di dispositivo e software suil dispositivo.Se stai collegando due PC a 115.2K, probabilmente saranno in grado di funzionare correttamente.Se si tratta di due microcontrollori con altro carico software, potrebbero non esserlo.

Se specifichi quale tipo di dispositivi stanno inviando e ricevendo, riceverai una consulenza migliore.

Vorrei solo sottolineare che se stai collegando due PC su un modem null, non riesco a pensare a un motivo * non * per abilitare un handshake hardware.
@RubberDuck - Sono d'accordo con il sentimento, ma ecco un motivo: se uno dei PC sta emulando un dispositivo che non supporta il controllo del flusso hardware.L'ho fatto sia per testare software che per eseguire il reverse engineering di kit obsoleti.
Michael Karas
2016-08-20 20:29:33 UTC
view on stackexchange narkive permalink

La necessità di un controllo di flusso su un'interfaccia seriale asincrona dipende completamente dalle esigenze dell'applicazione. A volte una velocità di trasmissione più lenta può abbassare la velocità dati effettiva per alleviare la necessità di controllo del flusso, ma anche questo dipende dall'applicazione.

Esistono alcune tecniche che possono consentire a un'applicazione di funzionare a velocità di trasmissione più elevate senza la necessità di utilizzare l'handshaking di controllo del flusso. Uno di questi consiste nell'utilizzare una tecnica di invio e ricezione UART guidata da interrupt e accodare il flusso di dati tra il codice della linea principale dell'applicazione e le routine di interrupt tramite buffer FIFO circolari.

L'uso dei buffer FIFO deve essere fatto in base al fatto che il processore dell'applicazione possa gestire gli interrupt UART alla velocità dei caratteri (cioè baud_rate / bits_per_transmission_unit). Se non è in grado di gestire quella velocità di interrupt più il piccolo overhead imposto dalla gestione del buffer FIFO, allora sarebbe necessario abbassare la velocità di trasmissione abbastanza da permettere il funzionamento della velocità di interrupt.

A volte il processore dell'applicazione avrà un UART che include un FIFO hardware integrato. Se questi vengono utilizzati insieme a uno schema di buffering FIFO gestito da interrupt, può essere vantaggioso per la progettazione della routine di servizio di interrupt svuotare i FIFO hardware di ricezione o riempire completamente i FIFO hardware di trasmissione al momento dell'interrupt da / per il il software gestiva buffer FIFO che normalmente sarebbero di dimensioni maggiori. Configurato e codificato correttamente, questo può abbassare la velocità di interruzione netta che un processore di applicazioni deve gestire a qualsiasi velocità di trasmissione particolare.

Nick Gammon
2016-08-21 07:59:43 UTC
view on stackexchange narkive permalink

Ricordo quando usavamo terminali "stupidi" e digitavi Ctrl + S (XOFF) per mettere in pausa la trasmissione in modo da poter leggere lo schermo prima che i dati scorressero.Quindi dovremmo digitare Ctrl + Q (XON) per riprendere l'output.Lo schermo potrebbe essere messo in pausa per 10 minuti.Non aveva nulla a che fare con la velocità di trasmissione.

Allo stesso modo, una stampante seriale che aveva esaurito la carta poteva richiedere il controllo del flusso hardware per mettere in pausa l'output mentre la carta veniva sostituita.Anche in questo caso non avrebbe nulla a che fare con la velocità di trasmissione.

Si può ancora fare a meno di CTS / RTS a 115,2 kbps?

Invio di routine dati dail mio ATmega328P * a un monitor seriale a 115200 baud.Funziona bene.

* Arduino

xon / xoff manuale funziona ancora, l'ho usato ieri.
MikeP
2016-08-21 06:34:24 UTC
view on stackexchange narkive permalink

Ti interessa che i tuoi dati vengano trascinati nel secchio di bit?Se sì, allora usa il controllo di flusso.

Hai una parità secondaria / ECC / controllo di flusso come ha TCP?Se sì, allora sei coperto.Tuttavia, utilizzando TCP / OSI come modello, più livelli eseguono il controllo e il controllo degli errori per garantire la consegna dei dati e ridurre al minimo gli errori.Supponiamo che tu stia utilizzando TCP / IP, senza controllo del flusso hardware a 115,2 kbps, la tua velocità effettiva a causa di problemi di flusso hardware potrebbe essere terribile.

Peter Green
2016-08-21 06:47:24 UTC
view on stackexchange narkive permalink

Ci sono molte considerazioni.

  • Quanto è grande il tuo buffer di ricezione?
  • Quanto velocemente il ricevitore può svuotare detto buffer?
  • il ricevitore fa cose che lo fanno smettere di guardare il buffer per qualche tempo?in tal caso il buffer è abbastanza grande da consentire al ricevitore di superare quei casi?
  • Se perdi parole a causa di un overflow del buffer di ricezione, quanto è grave?
  • Se la fonte sperimenta "contropressione "dovuta al controllo del flusso quanto è grave?

Non esiste un numero magico per" quando ho bisogno del controllo del flusso hardware ", è una domanda che deve essere posta e risoltanel contesto di un sistema specifico.

Si può ancora fare a meno di CTS / RTS a 115,2 kbps?

Molti sistemi lo fanno, si veda ad esempio il serialeporte della console su quasi tutte le schede Linux integrate.

Tony Stewart Sunnyskyguy EE75
2016-08-20 20:28:11 UTC
view on stackexchange narkive permalink

Se il dispositivo di destinazione ha un buffer di 16 byte ma l'interrupt veloce non è garantito, allora RTS / CTS è sempre preferito e include anche bit di parità dispari per l'affidabilità.Senza tutti i dettagli, è difficile conoscere la soglia di overflow del buffer di destinazione, quindi diventa tentativi ed errori.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...