सीरियल पोर्ट के बॉड रेट को कैट कैसे जानती है?


24

मैं नियमित रूप catसे धारावाहिक कनेक्शन पर अपने FPGA विकास बोर्ड से कंसोल में डिबगिंग जानकारी देखने के लिए उपयोग करता हूं, लेकिन मुझे कभी भी यह बताने की ज़रूरत नहीं है कि बॉड दर क्या है। बिल्ली कैसे जानती है कि सीरियल कनेक्शन की बॉड दर क्या है?


आपने minicomपहले की तरह पोर्ट सेट नहीं किया है ? यह यहाँ काम नहीं करता है। सीरियल पोर्ट पैरामीटर सेट करने के बाद ही मैं उपयोग कर सकता हूं cat
मार्को

यह बॉड्रेट को सेट या जानता नहीं है, यह सिर्फ डिवाइस से पढ़ता है।
उलरिच डेंगल

@ मर्को, मुझे नहीं पता कि डेबियन की कुछ डिफ़ॉल्ट बॉड दर सेटिंग है, लेकिन मैंने इसे कहीं भी सेट नहीं किया है।
stanri

जवाबों:


34

sttyउपयोगिता सेट या डिवाइस अपने मानक इनपुट है कि के लिए टर्मिनल आई / ओ विशेषताओं पर रिपोर्ट। इन विशेषताओं का उपयोग उस विशेष माध्यम पर संबंध स्थापित करते समय किया जाता है। catबॉड दर को इस तरह से नहीं जानता है, बल्कि यह विशेष कनेक्शन से प्राप्त स्क्रीन जानकारी पर प्रिंट करता है।

एक उदाहरण के रूप stty -F /dev/ttyACM0में ttyACM0 डिवाइस के लिए वर्तमान बॉड दर देता है।


1
लेकिन स्टड को बॉड रेट के बारे में कैसे पता चला? यह उत्तर केवल किसी भी तरह से सवाल का बचाव करता है, अगर बॉड दर को स्वतः निर्धारित किया जा सकता है या किसी बिंदु पर सेट किया जा सकता है (यानी के माध्यम से stty)
humanityandpeace

@humanityANDpeace मुझे लगता है कि डिफ़ॉल्ट बॉड दर वह थी जिसका मैं उपयोग करने वाला था। जब मैंने डिवाइस पर बॉड दर को बदल दिया, तो मुझे बाद में इसे स्टिकी के माध्यम से बदलने की आवश्यकता थी।
stanri

9

catपोर्ट के लिए पहले से ही कॉन्फ़िगर की गई सभी सेटिंग्स का उपयोग करता है। इस छोटे से सी स्निपेट से आप बॉड दर को किसी विशेष धारावाहिक पोर्ट के लिए वर्तमान में देख सकते हैं:

मिल-बॉड-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

बेशक यह एक बेहतर विचार है।
क्लैक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.