Como o gato sabe a taxa de transmissão da porta serial?

24

Uso regularmente catpara exibir informações de depuração no console da minha placa de desenvolvimento FPGA pela conexão serial, mas nunca tive que informar ao linux qual é a taxa de transmissão. Como o gato sabe qual é a taxa de transmissão da conexão serial?

Stanri
fonte
Você não configurou a porta, por exemplo, com minicomantes? Não funciona aqui. Somente depois de configurar os parâmetros da porta serial eu posso usar cat.
Marco
Ele não define ou conhece a taxa de transmissão, apenas lê a partir do dispositivo.
precisa saber é o seguinte
@ Marco, não sei se o Debian tem alguma configuração padrão de taxa de transmissão, mas não a coloquei em lugar nenhum.
stanri

Respostas:

34

O sttyutilitário define ou relata as características de E / S do terminal para o dispositivo que é sua entrada padrão. Essas características são usadas ao estabelecer uma conexão por esse meio específico. catnão conhece a taxa de transmissão como tal, imprime na tela as informações recebidas de uma conexão específica.

Como exemplo, stty -F /dev/ttyACM0fornece a taxa de transmissão atual do dispositivo ttyACM0.

Stanri
fonte
1
mas como stty sabia sobre a taxa de transmissão então? Esta resposta só adia alguma forma a questão, se a taxa de transmissão pode ser detectado automaticamente ou foi definido em algum momento (ie via stty)
humanityANDpeace
@humanityANDpeace Suponho que a taxa de transmissão padrão foi a que eu estava usando. Mais tarde, precisei alterá-lo via stty quando alterei a taxa de transmissão no dispositivo.
Stanri # 6/18
9

catapenas usa as configurações para as quais a porta já está configurada. Com este pequeno trecho C, você pode ver a taxa de transmissão atualmente definida para uma porta serial específica:

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

Executá-lo:

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

Os números obtidos podem ser consultados /usr/include/asm-generic/termios.h, onde existem #defines, B9600etc. Observe que os números no arquivo de cabeçalho e na get-baud-ratesaída estão em octal.

Talvez você possa experimentar e ver como são esses números em uma nova inicialização e se eles mudam mais tarde.

clacke
fonte
2
Acabei de encontrar o sttycomando que faz exatamente isso. Por exemplo, stty -F /dev/ttyACM0fornece a taxa de transmissão atual correta para o meu dispositivo.
stanri
Claro que é uma ideia muito melhor.
clacke