文件描述符有效,但调用read()返回-1

时间:2017-11-06 23:10:06

标签: c linux io serial-port arm

我的项目使用ARM开发板上的串行端口。

旧版本的电路板(TS-7800)继续工作。我必须升级到更新版本的电路板(TS-7800-V2)才能完成项目。

在新的主板上,我可以打开串口的文件描述符,但是当我从端口读取时,返回-1。这是打开的文件代码:

<!doctype html>
<html lang="en">
<head>
  <script src="//code.jquery.com/jquery-1.12.4.js"></script>
  <link href="https://cdn.datatables.net/1.10.16/css/jquery.dataTables.min.css">
  <script src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>
  <link href="https://cdn.datatables.net/buttons/1.4.2/css/buttons.dataTables.min.css">
  <script src="https://cdn.datatables.net/buttons/1.4.2/js/dataTables.buttons.min.js"></script>
  <link href="https://cdn.datatables.net/select/1.2.3/css/select.dataTables.min.css">
  <script src="https://cdn.datatables.net/select/1.2.3/js/dataTables.select.min.js"></script>
  <link href="/scripts/datatables/extensions/Editor/css/editor.dataTables.min.css">
  <script src="/scripts/datatables/extensions/Editor/js/dataTables.editor.min.js"></script>
</head>
</html>

这是main.c中的函数调用。这是

gps_fd = initPort("/dev/ttts4", "COM3", O_RDWR, B19200);

initPort()

int initPort( char *port, char *name, int oflags, speed_t baudRate ){ int fd; //File descriptor fd = open(port, oflags); //Open the port like a file printf("fd = %d\n", fd); //Print file descriptor to terminal assert(fd > 0); //Open returns -1 on error struct termios options; //Initialize a termios struct tcgetattr(fd, &options); //Populate with current attributes cfsetospeed (&options, baudRate); //Set baud rate out cfsetispeed (&options, baudRate); //Set baud rate in (same as baud rate out) options.c_cflag &= ~CSIZE; //Clear bit-length flag so it can be set //8N1 Serial Mode options.c_cflag |= CS8; //Set bit-length: 8 options.c_cflag &= ~PARENB; //Set parity: none options.c_cflag &= ~CSTOPB; //Set stop bit: 1 options.c_cflag &= ~CRTSCTS; //Set flow control: none options.c_iflag &= ~ICANON; //Enable canonical input options.c_cflag |= (CLOCAL | CREAD); //Enable receiver, and set local mode tcsetattr(fd, TCSANOW, &options); //Set new attributes to hardware return fd; } 会返回&#34; 3&#34;,这是一个很好的fd (gps_fd)。我工作的另一个应用程序返回&#34; 15&#34;对于fd,这也很好。执行串口读取:

fd

原因&#34; bytesRead&#34;为-1。投入&#34; perror&#34;行打印&#34;输入/输出错误&#34;。

我运行的代码与我在早期版本的主板上运行的代码相同,但设备名称(/ dev)没有改变。还有什么我应该寻找的会导致端口无法读取吗?

1 个答案:

答案 0 :(得分:0)

感谢所有评论的人,以增加我的知识! 事实证明,FPGA(向板提供硬件UART)已关闭。这是一个仍在开发中的新电路板,这是设计人员所知道的问题,并且他们已经在修复工作。如果您发现自己处于类似情况,请与董事会制造商保持联系。 这台Technologic Systems的单板计算机(TS-7800-V2)非常棒,它们提供了出色的客户服务。