Linux и COM-порт

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить
Открыл глаза
Сообщения: 63
Зарегистрирован: Вс янв 31, 2010 17:16:17

Сообщение eqltv »

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

Код: Выделить всё

cat /dev/ttyS0
и

Код: Выделить всё

echo > /dev/ttyS0
делали то, что хочется?
У команды setserial куча каких-то страшных параметров...
Реклама
Открыл глаза
Сообщения: 63
Зарегистрирован: Вс янв 31, 2010 17:16:17

Сообщение eqltv »

А, извините, рано спросил. Решение найдено:

Код: Выделить всё

stty -F /dev/ttyS0 ispeed 115200 ospeed 115200
Всё работает :)
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 540
Зарегистрирован: Пт фев 20, 2009 12:26:26

Сообщение Yftul »

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


В качестве обмена опытом, проводил эксперименты по непосредственной записи из 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 интерфейса с устройством на МК, потому и возник интерес к Вашему посту.

Изображение

Так примерно это все выглядит.
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

На 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
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Сообщения: 63
Зарегистрирован: Вс янв 31, 2010 17:16:17

Сообщение eqltv »

Yftul писал(а):Заинтересовал меня данный вопрос. Не могли бы Вы подробнее описать свое устройство?
Мое устройство - это 6 цифровых индикаторов и датчик TSOP (для приема команд с ИК пульта). По ком-порту устройству передаются команды, управляющие индикатором, а компьютеру от устройства - коды с пульта. Я хочу сделать нечто вроде проигрывателя - компьютер с музыкой, колонки и эта штучка.
Сейчас у меня команда инициализации выглядит так:

Код: Выделить всё

stty -F /dev/ttyS0 ispeed $sp ospeed $sp -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke ignbrk -brkint -icrnl -imaxbel
Я не стал разбираться в этих параметрах, а просто взял те, которые установил minicom.
Скрипты все, наверное, тоже напишу на перле, но инициализацию порта имеет смысл делать один раз при старте системы.
Реклама
Ответить

Вернуться в «Интеграция с ПК»