Xbee を介してリモート センサーからデータを受信し、Xbee を介してメッセージを書き戻す Raspberry Pi Model B に C++ プログラムがあります。Xbee を Sparkfun XBee Explorer USB 経由で接続すると、毎回完璧に動作します。しかし、RPi シリアル ポートを使用してまったく同じコードを実行すると、着信メッセージは常に受信されますが、出力メッセージは再起動後にシリアル ポートから Xbee に数回書き込まれ、その後は二度と書き込まれません。ロジック プローブを GND、TXD、および RXD ピンに接続していて、送受信パケットを確認できるため、シリアル ポートから Xbee への出力がないことはわかっています。また、RPi プログラムは着信パケットと発信パケットのデバッグ メッセージを書き込み、どちらも必要なときに発生します。RPi GPIO の 3.3V、GND、TXD、および RXD ピンのみを対応する Xbee ピンに接続しています。RPi は 2013-09-10-wheezy-raspbian リリースを実行しています。ボーレートは 38400 です。
これはシリアル ポートの初期化です。
fcntl(fd, F_SETFL, 0); // Clear the file status flags
struct termios options;
tcgetattr(fd, &options); // Get the current options for the port
options.c_iflag &= ~(IGNBRK | BRKINT | ICRNL | INLCR | PARMRK | INPCK | ISTRIP | IXON);
options.c_oflag &= ~(OCRNL | ONLCR | ONLRET | ONOCR | OFILL | OLCUC | OPOST);
options.c_lflag &= ~(ECHO | ECHONL | ICANON | IEXTEN | ISIG);
options.c_cflag |= (CLOCAL | CREAD);
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
if (cfsetispeed(&options, B38400) < 0 || cfsetospeed(&options, baudRate) < 0) {
throw runtime_error("Unable to set baud rate");
}
if (tcsetattr(fd, TCSAFLUSH, &options) < 0) {
throw runtime_error("Could not set tty options");
}
FD_ZERO(&set); // clear the set
FD_SET(fd, &set); // add file descriptor to the set
sleep(1);
ロジック アナライザーをよく見ると、何が起こっているかがわかります。RPi TxD ライン (GPIO ピン 8) が突然 Low になり、Low のままになります。その後、再起動しないとそれ以上の出力はできません。RxD ラインは引き続き完全に機能します。私は 2 つの RP を持っていますが、これは両方で 1 分から 30 分の間に発生します。なぜこれが起こるのか、そしてもっと重要なことに、私に何ができるのかについて、誰か私に手がかりを教えてもらえますか? 私は絶望的です。これは、私が考えることができるすべてをテストするのに何日もかかりすぎた後、私を夢中にさせています.