Linux串口RAW模式

时间:2017-12-02 08:58:20

标签: c++ c linux serial-port

Linux版本:4.9.59

平台:Raspberry Pi 3 Model B

USB转串口:FTDI4232

我希望从机器中读取大量数据(大约4096字节)。所有可打印的ASCII格式数据。 数据在一次传输中连续出现;一旦用户按下数据传输按钮。此操作在30分钟内完成一次。 数据包含多个CR LF。

我已将串口配置为RAW输入模式。

config.c_lflag &= ~(ICANON | ISIG | ECHO | ECHOE);
this->minChars = 5000;
this->timeOut = 100000;
if(this->timeOut > 0)
    config.c_cc[VTIME] = this->timeOut;
else
    config.c_cc[VTIME] = 0;

if(this->minChars > 0)
    config.c_cc[VMIN] = this->minChars;
else
    config.c_cc[VMIN] = 0;

阅读功能:

ready = epoll_wait(this->epfd, &this->events, 1, this->ePollTimeout);
returnVal = read(this->fd, readDataBuffer, 8192);

然而,当我从串口读取时,系统会将传入的blob中断为多个数据包,而某些数据包会丢失。

EG。 :我发送了278个字节的数据。 系统以3个随机长度的包破坏了这个。数据包的长度每次执行都会有所不同。 请建议。

1 个答案:

答案 0 :(得分:0)

read将读取您提供的字节数,但不保证实际读取的字节数。 read的返回值是实际读取的字节数。通常,读取系统调用放在while循环中,直到实际读取所需的字节数,发生错误或达到文件/流的结尾。

http://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html