У меня есть приложение, которое разговаривает между ПК и платой с микроконтроллером, работающим под управлением uCLinux. Когда я отправляю сообщение через /dev/TTYS0
, я получаю его на стороне ПК, однако сообщение выглядит тарабарщиной. Я почти уверен, что у меня какое-то несоответствие скорости передачи.
На стороне ПК я использую предоставленную скорость передачи:
Serial<id=0x1efb320, open=True>(port='COM4', baudrate=9600, bytesize=8, parity='
N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
На стороне платы Linux я устанавливаю ту же скорость передачи в коде:
tcgetattr(fd, &options);
cfsetispeed(&options, 9600);
cfsetospeed(&options, 9600);
tcsetattr(fd, TCSANOW, &options);
tcgetattr(fd, &options);
Это сработало для меня, когда я тестировал ПК (Win 7) -> Linux Box (OpenSuse), поэтому я знаю, что теория верна. Теперь, когда я перенес это на свою истинную цель (плата микроконтроллера Coldfire, работающая под управлением uCLinux), я получаю мусор.
Итак, мой первый вариант - «угадать и проверить» при различных скоростях передачи, чтобы увидеть, смогу ли я найти тот, который будет работать, но вместо этого я хотел бы программно найти способ определения поддерживаемых скоростей передачи для конкретной цели.
Я уверен, что есть API, но я его не нашел. Идеи?
РЕДАКТИРОВАТЬ: Кажется, можно получить максимальную скорость передачи в Windows с помощью Структура COMMPROP. Есть ли что-нибудь подобное в Linux?
supported baud rates are: ...
- person Mike   schedule 16.10.2012