Я подключил Raspberry PI к ноутбуку через последовательный порт.Я написал программу, которая обеспечивает связь между устройствами в c на PI.Для проверки связи я использовал программное обеспечение терминала на ноутбуке.Я должен установить следующие параметры для связи:
Скорость передачи: 300, Биты данных: 8, Четность: ODD, Стоповый бит: 1, Подтверждение связи: Нет, Тайм-аут чтения: 5 с.
У меня есть несколько вопросов:
1) Правильно ли установлены необходимые параметры соединения?
2) Почему я ничего не получаю в терминале на ноутбуке?
3) Почему, если я отправляю один байт после наступления 2-х тайм-аутов, все остальные получаемые байты мгновенно равны 0 (без спада по таймауту)?
См. Мой код ниже:
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
int main ()
{
struct termios RSopt;
char byte = -1;
char str[2] = {0,0};
int fd;
fd = open( "/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY );
tcgetattr(fd, &RSopt);
cfsetospeed (&RSopt, (speed_t)B300);
cfsetispeed (&RSopt, (speed_t)B300);
cfmakeraw(&RSopt);
RSopt.c_cflag &= ~CSIZE;
RSopt.c_cflag &= ~CRTSCTS;
RSopt.c_cflag |= O_NONBLOCK;
RSopt.c_cflag |= CREAD;
RSopt.c_cflag |= CLOCAL;
RSopt.c_cflag |= CS8;
RSopt.c_cflag |= PARENB;
RSopt.c_cflag |= PARODD;
RSopt.c_cflag |= ~CSTOPB;
RSopt.c_iflag |= IGNPAR;
tcflush( fd, TCIFLUSH );
tcsetattr (fd, TCSANOW, &RSopt);
struct timeval timeout;
fd_set read_fds;
for (int ii=0;ii<10;++ii)
{
FD_ZERO(&read_fds);
FD_SET(fd, &read_fds);
timeout.tv_sec = 5;
timeout.tv_usec = 0;
str[0] = 0x5;
write(fd, str, 1);
if (select(fd + 1, &read_fds, NULL, NULL, &timeout) == 1)
{
read(fd, &byte, 1);
printf("Recive: %x\n", byte);
}
else
{
printf("Timeout.\n");
}
};
close(fd);
}