Например TDA7294

Форум РадиоКот :: Просмотр темы - Linux и COM-порт
Форум РадиоКот
https://radiokot.ru/forum/

Linux и COM-порт
https://radiokot.ru/forum/viewtopic.php?f=24&t=37848
Страница 1 из 1

Автор:  eqltv [ Вт ноя 16, 2010 21:05:39 ]
Заголовок сообщения:  Linux и COM-порт

Здравствуйте! Мое устройство общается с компьютером по UART. Я хочу сделать так, чтобы можно было просто писать и читать /dev/ttyS0.
С помощью программы minicom получается и принимать, и посылать данные на любой скорости.
С помощью простого чтения из /dev/ttyS0 почему-то ничего не принимается! Запись же в /dev/ttyS0 работает (устройство реагирует).
Вопрос: как устанавливать скорость ком-порта? Как сделать так, чтобы команды
Код:
cat /dev/ttyS0
и
Код:
echo > /dev/ttyS0
делали то, что хочется?
У команды setserial куча каких-то страшных параметров...

Автор:  eqltv [ Вт ноя 16, 2010 21:24:52 ]
Заголовок сообщения:  Re: Linux и COM-порт

А, извините, рано спросил. Решение найдено:
Код:
stty -F /dev/ttyS0 ispeed 115200 ospeed 115200

Всё работает :)

Автор:  Yftul [ Ср ноя 17, 2010 17:12:02 ]
Заголовок сообщения:  Re: Linux и COM-порт

Заинтересовал меня данный вопрос. Не могли бы Вы подробнее описать свое устройство?


В качестве обмена опытом, проводил эксперименты по непосредственной записи из WEB интерфейса в порт, набросал такую программку:

Код:
#!/usr/bin/perl -w
use strict;
use CGI qw(:all);

print "Content-type: text/html\r\n\r\n";
my $portname = "ttyS0";
my $random = int(rand(1000));
my $readline;

open (my $port, "+>/dev/$portname") || die "cannot open port $portname: $!\n";
#system("stty 115200 raw < /dev/${portname}\n");
$/=":";

print $port "test string, $random\n\r";

$readline = <$port>;
print $readline;

close ($port);


Так как это моя первая программа на perl, то во многом еще не разобрался, к примеру со strict она не хочет устанавливать параметры порта. В настоящее время приходится его отключать, устанавливать параметры порта, затем включать :)

Проверяю с кабелем ttyS0 - ttyS1 и запущенным screen на терминале ttyS1, при запуске через web данного скрипта (установлен apache2, необходимые расширения для работы с perl, программа помещена в cgi-bin и на нее установлены права запуска и SGID на группу dialout) происходит запрос на screen, ответ, завершаемый двоеточием, отображается на экране браузера.

Естесственно это лишь набросок, демонствирующий возможность непосредственного общения web интерфейса с устройством на МК, потому и возник интерес к Вашему посту.

Изображение

Так примерно это все выглядит.

Автор:  Мурик [ Ср ноя 17, 2010 18:47:49 ]
Заголовок сообщения:  Re: Linux и COM-порт

На PureBasic в Linux можно работать с COM портом вот так:
Код:
If OpenSerialPort(0,"/dev/ttyS0",9600,#PB_SerialPort_NoParity,8,1,#PB_SerialPort_NoHandshake,256,256)
  WriteSerialPortString(0,"Радиокот")
  CloseSerialPort(0)
Else
  MessageRequester("", "Не удалось открыть COM порт!")
EndIf


А для Windows будет такой код:
Код:
If OpenSerialPort(0,"COM1",9600,#PB_SerialPort_NoParity,8,1,#PB_SerialPort_NoHandshake,256,256)
  WriteSerialPortString(0,"Радиокот")
  CloseSerialPort(0)
Else
  MessageRequester("", "Не удалось открыть COM порт!")
EndIf

Автор:  eqltv [ Чт ноя 18, 2010 19:22:32 ]
Заголовок сообщения:  Re: Linux и COM-порт

Yftul писал(а):
Заинтересовал меня данный вопрос. Не могли бы Вы подробнее описать свое устройство?

Мое устройство - это 6 цифровых индикаторов и датчик TSOP (для приема команд с ИК пульта). По ком-порту устройству передаются команды, управляющие индикатором, а компьютеру от устройства - коды с пульта. Я хочу сделать нечто вроде проигрывателя - компьютер с музыкой, колонки и эта штучка.
Сейчас у меня команда инициализации выглядит так:
Код:
stty -F /dev/ttyS0 ispeed $sp ospeed $sp -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke ignbrk -brkint -icrnl -imaxbel

Я не стал разбираться в этих параметрах, а просто взял те, которые установил minicom.
Скрипты все, наверное, тоже напишу на перле, но инициализацию порта имеет смысл делать один раз при старте системы.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/