Последовательная связь с конвертером USB в Serial в Ubuntu - PullRequest
1 голос
/ 19 октября 2011

У меня есть преобразованный USB / последовательный порт на базе микросхемы FTDI, с которым я однажды попытаюсь связаться с телевизором через RS232. Я использую Ubuntu Maverick.

Я новичок в последовательной связи и не могу понять, почему я не могу просто читать байты из порта.

Тест последовательного шлейфа прошел успешно. Я замкнул Tx и Rx вместе и запустил следующую программу на C, и моя клавиатура эхом отразилась на экране.

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

int main(int argc,char** argv)
{
    struct termios tio;
    struct termios stdio;
    int tty_fd;
    fd_set rdset;

    unsigned char c='D';

    printf("Please start with %s /dev/ttyS1 (for example)\n",argv[0]);
    memset(&stdio,0,sizeof(stdio));
    stdio.c_iflag=0;
    stdio.c_oflag=0;
    stdio.c_cflag=0;
    stdio.c_lflag=0;
    stdio.c_cc[VMIN]=1;
    stdio.c_cc[VTIME]=0;
    tcsetattr(STDOUT_FILENO,TCSANOW,&stdio);
    tcsetattr(STDOUT_FILENO,TCSAFLUSH,&stdio);
    fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK);       // make the reads non-blocking




    memset(&tio,0,sizeof(tio));
    tio.c_iflag=0;
    tio.c_oflag=0;
    tio.c_cflag=CS8|CREAD|CLOCAL;           // 8n1, see termios.h for more information
    tio.c_lflag=0;
    tio.c_cc[VMIN]=1;
    tio.c_cc[VTIME]=5;

    tty_fd=open(argv[1], O_RDWR | O_NONBLOCK);
    cfsetospeed(&tio,B115200);            // 115200 baud
    cfsetispeed(&tio,B115200);            // 115200 baud

    tcsetattr(tty_fd,TCSANOW,&tio);
    while (c!='q')
    {
            if (read(tty_fd,&c,1)>0)        write(STDOUT_FILENO,&c,1);              // if new data is available on the serial port, print it out
            if (read(STDIN_FILENO,&c,1)>0)
            {
              write(tty_fd,&c,1);                     // if new data is available on the console, send it to the serial port
            }
    }

    close(tty_fd);
}

Затем я подключил USB-сторону к порту USB (/ dev / ttyUSB0) на моем ПК и 9-контактную сторону кабеля к последовательному порту (/dev/ttyS0).

Я запустил предыдущую программу на / dev / ttyUSB0 и набрал в другом окне терминала:

echo "Hello world!" > /dev/ttyS0

Ничего не появляется. Я также попытался запустить программу в двух отдельных терминалах на обоих / dev / ttyUSB0 и / dev / ttyS0, и я не мог связаться от одного к другому.

Кто-нибудь знает, что я здесь не так делаю?

Заранее спасибо!

1 Ответ

0 голосов
/ 21 октября 2011

Я думаю, вам нужно настроить как последовательный порт USB, так и последовательный порт DB9. (т. е. скорости передачи в бодах, аппаратное обеспечение, flowcontrol и т. д.) stty или setserial - это две команды linux, которые могут выполнить это, проверьте страницы руководства или примеры в Интернете.

После этого вы должны иметь возможность передавать строки в устройства, и это должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...