Comment le chat connaît-il le débit en bauds du port série?

24

J'utilise régulièrement catpour afficher les informations de débogage dans la console à partir de ma carte de développement FPGA via la connexion série, mais je n'ai jamais eu à dire à linux quel est le débit en bauds. Comment le chat sait-il quel est le débit en bauds de la connexion série?

Stanri
la source
Vous n'avez pas configuré le port par exemple avec minicomavant? Ça ne marche pas ici. Ce n'est qu'après avoir configuré les paramètres du port série que je peux utiliser cat.
Marco
Il ne définit pas ou ne connaît pas la vitesse de transmission, il lit simplement à partir de l'appareil.
Ulrich Dangel
@Marco, je ne sais pas si Debian a un paramètre de vitesse de transmission par défaut, mais je ne l'ai défini nulle part.
stanri

Réponses:

34

L' sttyutilitaire définit ou signale les caractéristiques d'E / S du terminal pour le périphérique qui est son entrée standard. Ces caractéristiques sont utilisées lors de l'établissement d'une connexion sur ce support particulier. catne connaît pas le débit en tant que tel, il imprime plutôt sur l'écran les informations reçues de la connexion particulière.

À titre d'exemple, stty -F /dev/ttyACM0donne le débit en bauds actuel du périphérique ttyACM0.

Stanri
la source
1
mais comment stty savait-il alors le débit en bauds? Cette réponse ne diffère en quelque sorte la question, si la vitesse de transmission peut être détecté automatiquement ou a été fixé à un moment donné ( par exemple via stty)
humanityANDpeace
@humanityANDpeace Je suppose que le débit en bauds par défaut était celui que j'utilisais justement. Plus tard, j'ai dû le changer via stty lorsque j'ai changé le débit en bauds sur l'appareil.
stanri
9

catutilise simplement les paramètres pour lesquels le port est déjà configuré. Avec ce petit extrait C, vous pouvez voir le débit en bauds actuellement défini pour un port série particulier:

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;
}

Exécuter:

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

Les nombres que vous obtenez peuvent être recherchés /usr/include/asm-generic/termios.h, où il y a des #defines tels que B9600etc. Notez que les nombres dans le fichier d'en-tête et dans la get-baud-ratesortie sont en octal.

Vous pouvez peut-être expérimenter et voir à quoi ressemblent ces chiffres sur un nouveau démarrage et s'ils changent plus tard.

clacke
la source
2
Je viens de trouver la sttycommande qui fait exactement cela. Par exemple, stty -F /dev/ttyACM0me donne le débit en bauds actuel, qui est correct pour mon appareil.
stanri
Bien sûr, c'est une bien meilleure idée.
clacke