为什么RX不能从UART上的回送TX接收数据?

时间:2019-04-22 08:08:51

标签: c

我有a system在运行Linux,从UART1将rx连接到tx(环回)并执行了以下代码:

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>

int main(void) {
    int iFd = open("/dev/ttyTHS0", O_RDWR);
    if (iFd < 0) {
        fprintf(stdout, "Error when opening file.\n");
        return -1;
    }

    while (1) {
        if (write(iFd, "A", strlen("A")) == -1) {
            fprintf(stdout, "Failed to write\n");
            return -1;
        }

        char buff[10] = {
            0
        };

        if (read(iFd, buff, sizeof(buff)) < 0) {
            fprintf(stdout, "Failed to read.\n");
            return -1;
        }

        fprintf(stdout, "read: %s\n", buff);

    }
    close(iFd);

    return 0;
}

问题是似乎没有收到任何数据。该代码仅在read处阻塞。用示波器查看时,我可以看到数据在tx线上传输,但是rx没有接收到任何东西。我还尝试将这段代码分为两个进程,一个进程用于发送,另一个进程用于接收,但这都不起作用。

1 个答案:

答案 0 :(得分:1)

这是合乎逻辑的。您可能不发送任何内容,因为它位于发送缓冲区中。另一个问题是您尝试接收10个字节,但仅发送一个字节。在许多系统上,串行超时设置为无限时间,您将永远等待接下来的9个字节。

要做的事(第2点有一些变体):

  1. 刷新UART文件

2a。读取的字节数与发送的一样多 ioctl(ifd, FIONREAD, &bytes_ready_to_read);,然后仅读取可用的数字。

2c。更改超时。