RS-232通信インターフェースがあります。単純な通信(パリティビットなしまたはフロー制御→TX、RX、およびグランド)のためにこのインタフェースが必要ですが、今は使用していない4ピン(RTS、DTR、DCD / DSR、CTS)がかなりたくさんあり、私ができるかどうか疑問に思います。します。このピンを乱用して他の信号を実行するには、このピンを読み取る方法が必要です。それでは、Linuxベースの組み込みシステムでこれをどのように実行しますか?
seterial
インターフェイスが16550A
UARTモードにあり、次に基づいていることを報告します。https://en.wikipedia.org/wiki/16550_UART:
「ソフトウェアで制御できる外部モデムを制御するために使用されるハンドシェイクラインです。」
他に知っておくべきことはありますか?
答え1
RTSとDTRは出力端子なので設定できます。
DCDとCTSは入力ピンであり、読み取りのみ可能です。
デフォルトでは、デバイスはハードウェアハンドシェイク用に設定できます。次のコマンドを使用してこの設定を変更できます。tcsetattr
(CRTSCTSを参照)。その後、TIOCMBIS
ioctlを使用して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);
存在するスタックオーバーフローポートを正しく設定する方法に関するいくつかのアドバイスがあります。