web-dev-qa-db-ja.com

未使用のシリアルピン(RTS、CTSなど)を読み取る方法は?

RS-232通信用のインターフェースがあります。単純な通信(パリティビットまたはフロー制御なし→TX、RX、およびグランド)にはこのインターフェイスが必要ですが、現在はかなり4つのピン(RTS、DTR、DCD/DSR、CTS)が使用されておらず、これらのピンを一部に誤用できるかどうか疑問に思いました他のシグナリングとこれのために私はこれらのピンを読み取るための方法が必要になるでしょう。では、組み込みLinuxベースのシステムでそれをどのように行うことができますか?

seterialは、インターフェースが16550A UARTモードであり、 https://en.wikipedia.org/wiki/16550_UART =: "外部モデムを制御するためのハンドシェイクライン。ソフトウェアで制御可能。"

他に知っておくべきことはありますか?

3
phk

RTSとDTRは出力ピンであり、設定できます。

DCDとCTSは入力ピンであり、読み取りのみが可能です。

デバイスは、おそらくデフォルトでハードウェアハンドシェイク用に設定されています。 tcsetattr を使用してこれを変更できます(CRTSCTSを参照)。次に、TIOCMBISioctlを使用してRTSとDTRを設定できます

良い参考資料は次のとおりです。

上記はLinux中心かもしれません。

よりPOSIXになるには、 POSIXオペレーティングシステムのシリアルプログラミングガイド を参照してください。

この例をガイドから削除しました。

#include <unistd.h>
#include <termios.h>

int fd;
int status;

ioctl(fd, TIOCMGET, &status);

status &= ~TIOCM_DTR;

ioctl(fd, TIOCMSET, status);

Stack Overflow で、ポートを適切に設定する方法についていくつかの意見を見つけることができます。

4
Claus Andersen