Làm thế nào để mèo biết tốc độ baud của cổng nối tiếp?


24

Tôi thường xuyên sử dụng catđể xem thông tin gỡ lỗi trong bảng điều khiển từ bảng phát triển FPGA của tôi qua kết nối nối tiếp, nhưng tôi chưa bao giờ phải nói với linux tốc độ baud là bao nhiêu. Làm thế nào để mèo biết tốc độ baud của kết nối nối tiếp là gì?


Bạn đã không thiết lập cổng, ví dụ như minicomtrước đây? Nó không hoạt động ở đây. Chỉ sau khi tôi thiết lập các tham số cổng nối tiếp, tôi có thể sử dụng cat.
Marco

Nó không đặt hoặc biết baudrate, nó chỉ đọc từ thiết bị.
Ulrich Dangel

@Marco, tôi không biết liệu Debian có cài đặt tốc độ truyền mặc định nào không, nhưng tôi chưa đặt nó ở bất cứ đâu.
stanri

Câu trả lời:


34

Các sttybộ tiện ích hoặc các báo cáo về đặc điểm I / O terminal cho thiết bị đó là đầu vào tiêu chuẩn của nó. Những đặc điểm này được sử dụng khi thiết lập kết nối qua phương tiện cụ thể đó. catkhông biết tốc độ truyền như vậy, nó thay vào đó in trên thông tin màn hình nhận được từ kết nối cụ thể.

Như một ví dụ stty -F /dev/ttyACM0cho tốc độ truyền hiện tại của thiết bị ttyACM0.


1
Nhưng làm thế nào mà stty biết về tốc độ baud sau đó? Câu trả lời này chỉ trả lời bằng cách nào đó câu hỏi, nếu tốc độ baud có thể được tự động phát hiện hoặc được đặt ở một thời điểm nào đó (tức là thông qua stty)
humanityANDpeace

@humanityANDpeace Tôi giả sử tốc độ baud mặc định là tốc độ tôi sử dụng. Sau này tôi cần phải thay đổi nó thông qua stty khi tôi thay đổi tốc độ truyền trên thiết bị.
stanri

9

catchỉ cần sử dụng bất kỳ cài đặt nào mà cổng đã được cấu hình. Với đoạn mã C nhỏ này, bạn có thể thấy tốc độ truyền hiện được đặt cho một cổng nối tiếp cụ thể:

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

Chạy nó:

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

Các số bạn nhận được có thể được tra cứu /usr/include/asm-generic/termios.h, trong đó có #definecác số, B9600v.v ... Lưu ý rằng các số trong tệp tiêu đề và trong get-baud-rateđầu ra là theo số bát phân.

Có lẽ bạn có thể thử nghiệm và xem những con số này như thế nào trên một chiếc giày mới và liệu chúng có thay đổi sau này không.


2
Tôi chỉ tìm thấy sttylệnh làm điều này. Ví dụ, stty -F /dev/ttyACM0cung cấp cho tôi tốc độ truyền hiện tại, chính xác cho thiết bị của tôi.
stanri

Tất nhiên đó là một ý tưởng tốt hơn nhiều.
clacke
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.