Небольшая проблемка с CH340G

На днях я разбираемся с проблемой — почему CH340G на скорости 115200 не может пересылать данные в компьютер.

Ответ на вопрос получен.

С CH340G всё в порядке! CH340G — может работать на 115200 и на любой другой стандартной скорости. Проблема не в микросхеме. Проблема в том, что команда

# stty -F /dev/ttyUSB0 115200

в Debian-8.6 не выполняется.

И хотя команда

# stty -F /dev/ttyUSB0

возвращает заданную скорость, но реально получается так, что CH340G работает на прежней скорости. Что называется — «проверено электроникой», то бишь — осциллографом.

Почему stty не перепрограммирует CH340G я пока не разобрался, я ушёл немного в другом направлении. Я попытался работать с микросхемой не в оболочке (не средствами командной строки), а работать непосредственно в программах.

В программах на Питоне и на Си можно задавать скорость работы CH340G и проблем не возникает.

Вот, фрагмент кода на Питоне:

import serial

...

ser = serial.Serial("/dev/ttyUSB0")
# ser.baudrate = 9600   # t = 103.8 us
# ser.baudrate = 19200  # t = 51.99 us
ser.baudrate = 115200   # t = 8.662-8.667 us

...

Вот, фрагмент Си-шной проги:


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

...

struct termios term;
const char *tty ="/dev/ttyUSB0";
int fd;

fd = open(tty, O_RDONLY);
if (fd == -1)
{
  fprintf(stderr, "Не могу открыть %s\n", tty);
  exit(EXIT_FAILURE);
}
else
{
  if (!tcgetattr(fd, &term))
  {
    // cfsetispeed(&term, B9600);
    // cfsetispeed(&term, B19200);
    cfsetispeed(&term, B115200);
    tcsetattr(fd, TCSANOW, &term);   // Меняем скорость прямо сейчас

    while (1)
    { // Это -- тестовая прога. Выход из цикла по Ctrl-C
      n = read(fd, &ch, 1);  // Читаем один байт из /dev/ttyUSB0
      if (n)
        putchar(ch);         // и выводим его в stdout
    }
  }
}
close (fd);

А вообще, похоже напрашивается целая статья про философию ввода-вывода в Линуксе и чем она отличается от философии ввода- вывода у Винды (DOS-а).

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s