Bagaimana kucing mengetahui baud rate port serial?

24

Saya secara teratur menggunakan catuntuk melihat informasi debug di konsol dari papan pengembangan FPGA saya melalui koneksi serial, tetapi saya tidak pernah harus memberi tahu linux apa baud rate itu. Bagaimana kucing tahu berapa baud rate koneksi serial itu?

stanri
sumber
Anda tidak mengatur port misalnya dengan minicomsebelumnya? Ini tidak berfungsi di sini. Hanya setelah saya mengatur parameter port serial yang dapat saya gunakan cat.
Marco
Itu tidak mengatur atau mengetahui baudrate, itu hanya membaca dari perangkat.
Ulrich Dangel
@ Marsco, saya tidak tahu apakah Debian memiliki beberapa pengaturan baud rate default, tapi saya belum menetapkannya di mana saja.
stanri

Jawaban:

34

The sttyutilitas set atau laporan tentang I / O karakteristik terminal untuk perangkat yang standar input. Karakteristik ini digunakan ketika membuat koneksi melalui media tertentu. cattidak tahu baud rate seperti itu, ia lebih suka mencetak pada informasi layar yang diterima dari koneksi tertentu.

Sebagai contoh, stty -F /dev/ttyACM0berikan baud rate saat ini untuk perangkat ttyACM0.

stanri
sumber
1
tapi bagaimana stty tahu tentang baud rate? Jawaban ini hanya entah bagaimana mempertanyakan pertanyaan, jika baud rate dapat dideteksi secara otomatis atau ditetapkan pada beberapa titik (yaitu via stty)
humanityANDpeace
@ humanityANDpeace Saya berasumsi bahwa baud rate default adalah yang saya gunakan. Saya kemudian memang perlu mengubahnya melalui stty ketika saya mengubah baud rate pada perangkat.
stanri
9

cathanya menggunakan pengaturan apa pun port sudah dikonfigurasi untuk. Dengan potongan C kecil ini Anda dapat melihat baud rate yang saat ini ditetapkan untuk port serial tertentu:

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

Menjalankannya:

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

Angka-angka yang Anda dapatkan dapat dilihat /usr/include/asm-generic/termios.h, di mana ada #defines seperti B9600dll. Perhatikan bahwa angka-angka dalam file header dan dalam get-baud-rateoutput berada dalam oktal.

Mungkin Anda bisa bereksperimen dan melihat seperti apa angka-angka ini pada boot baru dan apakah mereka berubah nanti.

klak
sumber
2
Saya baru saja menemukan sttyperintah yang melakukan ini. Misalnya, stty -F /dev/ttyACM0beri saya baud rate saat ini, yang benar untuk perangkat saya.
stanri
Tentu saja itu ide yang jauh lebih baik.
clacke