Come fa Cat a conoscere il baud rate della porta seriale?


24

Uso regolarmente catper visualizzare le informazioni di debug nella console dalla mia scheda di sviluppo FPGA tramite la connessione seriale, ma non ho mai dovuto dire a Linux qual è il baud rate. Come fa Cat a sapere qual è la velocità di trasmissione della connessione seriale?


Non hai impostato la porta ad es. Con minicomprima? Qui non funziona. Solo dopo aver impostato i parametri della porta seriale posso usare cat.
Marco,

Non imposta o conosce il baudrate, legge solo dal dispositivo.
Ulrich Dangel,

@Marco, non so se Debian abbia qualche impostazione di baud rate predefinita, ma non l'ho impostata da nessuna parte.
Stan

Risposte:


34

L' sttyutilità imposta o riporta le caratteristiche di I / O del terminale per il dispositivo che è il suo input standard. Queste caratteristiche vengono utilizzate quando si stabilisce una connessione su quel particolare supporto. catnon conosce il baud rate in quanto tale, piuttosto stampa sullo schermo le informazioni ricevute dalla particolare connessione.

Ad esempio, stty -F /dev/ttyACM0fornisce l'attuale baud rate per il dispositivo ttyACM0.


1
ma allora come faceva stty a conoscere il baud rate? Questa risposta non rispecchia in qualche modo la domanda, se il baud rate può essere rilevato automaticamente o è stato impostato ad un certo punto (cioè via stty)
umanità e

@humanityANDpeace Presumo che il baud rate predefinito sia quello che mi è capitato di usare. In seguito ho dovuto cambiarlo tramite stty quando ho cambiato la velocità di trasmissione sul dispositivo.
stanri,

9

catutilizza solo le impostazioni per le quali la porta è già configurata. Con questo piccolo frammento C puoi vedere la velocità di trasmissione attualmente impostata per una particolare porta seriale:

get-baud-rate.c

#include <termios.h>
#include <unistd.h>
#include <stdio.h>

int main() {
  struct termios tios;
  tcgetattr(0, &tios);
  speed_t ispeed = cfgetispeed(&tios);
  speed_t ospeed = cfgetospeed(&tios);
  printf("baud rate in: 0%o\n", ispeed);
  printf("baud rate out: 0%o\n", ospeed);
  return 0;
}

Eseguirlo:

./get-baud-rate < /dev/ttyS0 # or whatever your serial port is

I numeri che ottieni possono essere cercati in /usr/include/asm-generic/termios.h, dove ci sono messaggi #definecome B9600ecc. Nota che i numeri nel file di intestazione e get-baud-ratenell'output sono in ottale.

Forse puoi sperimentare e vedere come sono questi numeri con un nuovo avvio e se cambiano in seguito.


2
Ho appena trovato il sttycomando che fa proprio questo. Ad esempio, stty -F /dev/ttyACM0mi dà l'attuale baud rate, che è corretto per il mio dispositivo.
Stan

Ovviamente è un'idea molto migliore.
clacke
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.