現在、Udoo Neo の C++ で UART 経由でデバイスと通信しています。このために、termios を使用して接続をセットアップし、デバイスにデータを書き込みます。この目的のために、ハードウェア フロー制御を使用し、termios でフラグ (CRTSCTS) を設定しました。
ハードウェア フロー制御のために、デバイスの RTS ラインをボードの CTS に接続し、オシロスコープを介して、読み取りの準備ができていない場合、デバイスがアクティブ ハイを与えていることも確認しました。
問題は、デバイスに数字をスパム送信する次の例でまだバイトが失われていることですが、ボードの出力には、すべてが正しく書き込まれていることが示されています。
HW フロー制御を使用すると UART がブロックされるので、情報が失われないと思いました。私はこれを正しく理解していませんか?それともコードにエラーがありますか?
助けてくれてありがとう
const char dev[] = "/dev/ttymxc4";
int main(int argc, char **argv) {
int fd;
struct termios t; ///< control structure for a general asynchronous interface
// edited code
tcgetattr(fd, &t);
t.c_iflag &= ~(IGNBRK | BRKINT | ICRNL |
INLCR | PARMRK | INPCK | ISTRIP | IXON);
t.c_oflag = 0;
t.c_cflag &= ~(CSIZE | PARENB);
t.c_cflag |= (CS8 | CRTSCTS);
// edited code
t.c_cflag |= (CLOCAL | CREAD);
t.c_lflag &= ~(ECHO | ECHONL | ICANON | IEXTEN | ISIG);
t.c_cc[VMIN] = 0;
t.c_cc[VTIME] = 0;
cfsetispeed(&t,B57600); /* normal shall be: B115200 Baud */
fd = ::open(dev, O_RDWR);
if (fd==-1) {
printf("UART: cannot open file: %s\n",dev);
return -1;
}
tcsetattr(fd,TCSANOW, &t);
// edited code
fcntl(fd, F_SETFL, 0);
int count = 0;
while (true) {
count++;
std::stringstream output;
output << count << ",";
::write(fd, output.str().c_str(), output.str().length());
printf("%d, writing: %s\n", fd, output.str().c_str());
usleep(10000);
}
return 0;
}