Domanda:
Sono necessari CTS e RTS sulla porta UART?
user92481
2016-05-25 19:12:07 UTC
view on stackexchange narkive permalink

Attualmente sto lavorando a un progetto in cui utilizziamo TIVA C TM4C123G e attualmente mi sto ispirando al launchpad come progetto di riferimento. Ho diverse periferiche UART da collegare al chip principale usando UART, tuttavia sui pin del chip RTS e CTS sono contrassegnati solo sull'UART1. Come dovrei affrontarlo?

Hai cercato online per determinare lo scopo dei pin RTS e CTS?Guarda questo e dovresti ottenere alcune informazioni sui loro requisiti per una determinata applicazione.
Se si utilizza RS485, sarà necessario il segnale RTS per passare dalla ricezione alla trasmissione.
Hai bisogno di * qualcosa * per abilitare un ricetrasmettitore RS485, ma non deve essere la linea RTS.Usare la linea RTS è solo una sorta di hack comune: "è lì, possiamo controllarlo nel software, usiamolo!"Ma su un sistema embedded ci sono in genere anche molti GPIO che soddisfano questa definizione.
Cinque risposte:
Warren Hill
2016-05-25 19:41:15 UTC
view on stackexchange narkive permalink

Potresti riuscire a ignorare questi segnali. CTS (Clear To Send) e RT (Request To Send) forniscono un meccanismo di handshaking in modo che ogni dispositivo possa dire all'altro quando è pronto per ricevere dati.

Tuttavia, molti Uart non implementano questo e nessuno dei due presumere che l'altra estremità possa acquisire dati in qualsiasi momento o utilizzare un altro metodo come XON / XOFF

L'handshaking hardware con RTS / CTS non viene utilizzato molto spesso sulle apparecchiature moderne ma sarà necessario controllare il manuale, a pochi dispositivi lo richiedono ancora.

Grazie per la tua risposta, questo mi conforta un po 'nella possibilità di implementare senza utilizzare RTS e CTS.Stavo pensando che potrei potenzialmente collegare quella linea a un normale GPIO, nel caso in cui dovessi fare un aggiornamento latr semplicemente implementando RTS e CTS sul software bitbanging GPIO con RTS e CTS, ma non sono sicuro se lo sarebbefunziona o no ..?
Richard Crowley
2016-05-25 19:33:32 UTC
view on stackexchange narkive permalink

Dipende dal tipo di "controllo di flusso" utilizzato da "diverse periferiche UART" (non identificate). Dipende anche dal fatto che sia necessaria la comunicazione simultanea con le periferiche e se queste debbano essere in grado di "interrompere" in modo asincrono il controller o se verranno interrogate e solo "parlano quando si parla". Questi fanno tutti parte della progettazione complessiva del sistema, che è un problema più ampio rispetto al problema ristretto su cui hai chiesto.

La ringrazio per la risposta.I dispositivi sono tipicamente: modulo GSM, ricetrasmettitore RS485 o ricetrasmettitore CAN.Sono un po 'nuovo per quelli, quindi non mi è chiaro se posso disegnare pacificamente lo schema e il layout del circuito stampato senza avere quelle linee RTS e CTS tra le periferiche e l'MCU
Non puoi rispondere alla domanda sull'uso di RTS e CTS senza PRIMA progettare il concetto più ampio di come funzionerà l'intero sistema e di come i pezzi parleranno tra loro.RTS e CTS sono solo alcune parti della soluzione.Non hai ancora stabilito il protocollo di controllo della comunicazione, quindi non sai come (o IF) avrai bisogno di RTS e CTS.
Cosa dovrei fare allora?
Per esaminare il protocollo utilizzato dal dispositivo di destinazione a cui intendi connetterti.
Ricomincia dall'inizio e stabilisci COME devi comunicare con queste periferiche.Sembra che tu non abbia ancora fatto una corretta progettazione del sistema.
Attualmente sto seguendo lo schema e il progetto di riferimento forniti dai produttori.So che useremo l'UART per comunicare tra l'MCU e la periferica
È necessario creare PIANI PIÙ GRANDI di COME funzionerà il software.Quante volte ha bisogno di comunicare con le periferiche.Se inizierà la comunicazione o se dovrà accettare input su richiesta.Ci sono dozzine di domande sull'architettura del sistema che devono essere risolte prima di arrivare a RTS / CTS.
Arun Kumar Naidu
2017-10-19 03:15:28 UTC
view on stackexchange narkive permalink

RTS e CTS ti consentono solo di avere il controllo del flusso .. forse sto usando un chip FTDI che traduce i flussi da USB a UART ... ecco 4 metodi di controllo del flusso che possono essere programmati per il dispositivo FT232BM.

  1. Nessuno: ciò potrebbe causare la perdita di dati ad alte velocità

  2. RTS / CTS - Handshake a 2 fili. Il dispositivo trasmetterà se CTS è attivo e interromperà RTS se non può più riceverne.

  3. DTR / DSR - Handshake a 2 fili. Il dispositivo trasmetterà se DSR è attivo e interromperà DTR se non può più riceverne.

  4. XON / XOFF - il controllo del flusso viene effettuato inviando o ricevendo caratteri speciali. Uno è XOn (trasmissione attiva), l'altro è XOff (trasmissione disattivata).

A seconda del requisito che puoi selezionare ... c'è un comando sulla riga del terminale che possiamo usare per impostare o ripristinare il controllo di flusso. Utilizza questo link per maggiori dettagli.

stty --file / dev / ttyUSB0 -crtscts per disabilitare il controllo del flusso hardware

stty --file / dev / ttyUSB0 crtscts per abilitare il controllo del flusso hardware.

stty -F / dev / ttyUSB0 -crtscts ixon ixoff per disabilitare il flusso hw abilitare i software xon e xoff.

supercat
2017-10-19 19:51:30 UTC
view on stackexchange narkive permalink

Il supporto hardware per RTS / CTS può essere vantaggioso e talvolta necessario, a seconda di quanto "preavviso" un dispositivo può dare quando ha bisogno di un dispositivo di trasmissione per trattenerlo. Se un dispositivo ricevente non dispone del supporto hardware per il rilascio automatico di RTS, dovrà essere in grado di assicurarsi di essere sempre in grado di servire i caratteri in arrivo prima che il buffer hardware possa traboccare. Se un dispositivo non dispone del supporto hardware per tenere a bada il CTS, dovrà evitare di fornire all'UART più caratteri di quelli che il ricevitore sarebbe in grado di gestire dopo aver rilasciato RTS.

Se sia il trasmettitore che il ricevitore includono il supporto hardware per RTS / CTS, saranno in grado di comunicare in modo affidabile anche se il ricevitore ha solo un buffer a carattere singolo e il software del ricevitore a volte può impiegare un po 'di tempo per rispondere ai dati in arrivo (se il il destinatario rilascia i dati dopo aver ricevuto il secondo byte completo, dovrebbe rilasciare RTS come mentre sta ricevendo il primo, il che peggiorerebbe le prestazioni; se non rilascia i dati a meno che / fino a quando non arriva il bit di inizio di un terzo byte, esso potrebbe lasciare RTS affermato fino a quando non riceve il secondo). Se il ricevitore non dispone del supporto hardware RTS, non sarà possibile una comunicazione affidabile a meno che il buffer del ricevitore non possa contenere tutto ciò che potrebbe arrivare mentre non è in grado di rispondere ai dati in arrivo (ad esempio perché è troppo occupato con interrupt a priorità più alta). Se il destinatario ha il supporto hardware ma il mittente no, sarà possibile una comunicazione affidabile, ma solo se il software del mittente si sincronizza da solo in modo da non fornire mai all'UART più dati di quelli che possono essere trasmessi in sicurezza.

Nei chip con funzionalità simile a PLD su alcuni pin, potrebbe essere possibile confondere il supporto RTS grezzo in chip che non hanno un supporto hardware reale programmando un'uscita in modo che si agganci automaticamente alto ogni volta che il pin di ricezione seriale è Basso. Ciò avrebbe l'effetto di far sì che il ricevitore inizi a segnalare se stesso non pronto ogni volta che inizia una trasmissione. Una volta che il software riceve un byte, sarà quindi in grado di riaffermare CTS per far sapere al mittente che può trasmettere un altro byte. Le prestazioni utilizzando un tale approccio sarebbero probabilmente cattive, ma se un dispositivo che non ha né il supporto hardware RTS né la capacità di garantire buoni tempi di risposta all'interrupt deve ricevere i dati da un dispositivo che arresta i dati immediatamente quando il suo CTS (RTS del ricevitore) viene rilasciato , un tale approccio potrebbe consentire un funzionamento affidabile.

Un altro approccio che a volte potrebbe essere utile nei casi in cui un dispositivo sarà reattivo e non reattivo a intervalli prevedibili (ad esempio perché esegue periodicamente alcune attività che richiedono il 100% della CPU, senza interruzioni, per millisecondi alla volta) è fare in modo che un dispositivo rilasci RTS ogni volta che sta per entrare in uno stato di non risposta indipendentemente dal fatto che il suo buffer di ricezione sia pronto ad accettare alcuni dati. Il problema più grande con questo approccio è che se un dispositivo è pronto a ricevere dati solo in determinati periodi e un altro controlla solo se è pronto a ricevere dati in determinati momenti, nessun dato verrà inviato a meno che quei tempi non coincidano.

Personalmente, ritengo che il supporto hardware RTS / CTS sia una funzionalità preziosa, ma molti produttori di chip non sembrano farlo.Fortunatamente, i chip FTDI da USB a seriale rispondono molto bene a quei segnali (altri potrebbero anche, ma non li ho testati), rendendo possibile per un dispositivo senza supporto hardware RTS / CTS di richiedere un byte alla voltaaffermando brevemente RTS (non sono sicuro di quale sarebbe la larghezza minima) ogni volta che il software del ricevitore verifica la presenza di un byte in arrivo e lo rilascia subito dopo.Funzionerà in modo affidabile a condizione che l'RTS non venga mai affermato accidentalmente per più di un intervallo di caratteri alla volta.

filo
2016-05-26 13:05:23 UTC
view on stackexchange narkive permalink

RTS e CTS non sono necessari. RX e TX sono sufficienti se si esegue tutto il controllo del flusso nel software.

Ad esempio: RTS può essere utilizzato se si dispone di un ricetrasmettitore RS-485 (che può solo trasmettere o ricevere alla volta) per disabilitare automaticamente il ricevitore e abilitare il trasmettitore quando si desidera inviare qualcosa.

Se il tuo MCU non ha RTS hardware, potresti fare lo stesso anche con un GPIO e un pezzo di codice.



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...