cat รู้อัตรา baud ของพอร์ตอนุกรมได้อย่างไร?


24

ฉันใช้เป็นประจำcatเพื่อดูข้อมูลการแก้ไขข้อบกพร่องในคอนโซลจากบอร์ดพัฒนา FPGA ของฉันผ่านการเชื่อมต่อแบบอนุกรม แต่ฉันไม่เคยบอก linux ว่าอัตรารับส่งข้อมูลเป็นเท่าไหร่ แมวรู้ได้อย่างไรว่าอัตราการรับส่งข้อมูลของการเชื่อมต่อแบบอนุกรมคืออะไร?


คุณไม่ได้ตั้งค่าพอร์ตไว้เช่นminicomเคยหรือไม่? มันไม่ทำงานที่นี่ หลังจากที่ฉันตั้งค่าพารามิเตอร์พอร์ตอนุกรมที่ฉันสามารถcatใช้ได้
Marco

มันไม่ได้ตั้งค่าหรือรู้ baudrate มันเพิ่งอ่านจากอุปกรณ์
Ulrich Dangel

@Marco ฉันไม่รู้ว่า Debian มีการตั้งค่าอัตรารับส่งข้อมูลเริ่มต้นบ้างหรือไม่ แต่ฉันไม่ได้ตั้งไว้ที่ใดเลย
stanri

คำตอบ:


34

sttyชุดยูทิลิตี้หรือรายงานเกี่ยวกับลักษณะของ I / O ขั้วสำหรับอุปกรณ์ที่เข้ามาตรฐาน คุณลักษณะเหล่านี้จะใช้เมื่อสร้างการเชื่อมต่อผ่านสื่อนั้น ๆ catไม่ทราบอัตราการรับส่งข้อมูล แต่จะพิมพ์ข้อมูลหน้าจอที่ได้รับจากการเชื่อมต่อโดยเฉพาะ

เป็นตัวอย่างstty -F /dev/ttyACM0ให้อัตรา baud ปัจจุบันสำหรับอุปกรณ์ ttyACM0


1
แต่ stty รู้ได้อย่างไรเกี่ยวกับอัตราการรับส่งข้อมูลแล้ว? คำตอบนี้เฉพาะคำถามใดคำถามถ้าอัตราการรับส่งข้อมูลสามารถตรวจสอบอัตโนมัติหรือถูกตั้งค่าในบางจุด (เช่นผ่านstty)
มนุษยชาติ

@humanityANDpeace ฉันถือว่าอัตราการรับส่งข้อมูลเริ่มต้นคือสิ่งที่ฉันกำลังใช้ ฉันในภายหลังไม่จำเป็นต้องเปลี่ยนผ่าน stty เมื่อฉันเปลี่ยนอัตราการรับส่งข้อมูลบนอุปกรณ์
stanri

9

catเพียงใช้การตั้งค่าใด ๆ ก็ตามที่พอร์ตได้รับการกำหนดค่าไว้แล้ว ด้วยตัวอย่างข้อมูล C ขนาดเล็กนี้คุณสามารถดูอัตราการรับส่งข้อมูลในปัจจุบันสำหรับพอร์ตอนุกรมเฉพาะ:

ได้รับบอด 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;
}

เรียกใช้:

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

หมายเลขที่คุณได้รับสามารถค้นหาได้ใน/usr/include/asm-generic/termios.hที่ซึ่งมี#defineเช่นB9600ฯลฯ โปรดทราบว่าตัวเลขในไฟล์ส่วนหัวและในget-baud-rateผลลัพธ์อยู่ในรูปฐานแปด

บางทีคุณสามารถทดลองและดูว่าตัวเลขเหล่านี้เป็นอย่างไรในการเริ่มระบบใหม่


2
ฉันเพิ่งพบsttyคำสั่งที่ทำแค่นี้ ตัวอย่างเช่นstty -F /dev/ttyACM0ให้อัตราการรับส่งข้อมูลในปัจจุบันซึ่งถูกต้องสำหรับอุปกรณ์ของฉัน
stanri

แน่นอนว่าเป็นความคิดที่ดีกว่ามาก
clacke
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.