Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IRDA: есть ли где исходники для embedded системы
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
Evgeny_CD
Надо: подключение моего девайса по IRDA, IrCOMM хватит за глаза, SIR 115200.

Что есть:

* готовые чипы от Microchip.

-- MCP2140 - дешево (1.5$ Mouser.com), но 9600 only - не пойдет.
Девайс работает хорошо - я как-то экспериментировал с ним.
-- MCP215(0|5) - хорошо, но стоят 5$ Mouser.com, у нас 9-10. Дорого!

* софты:
-- замечательный проект FreeIrDA
http://freeirda.sourceforge.net/
но дальше первой страницы дело не пошло

-- Pico-IrDA
http://blaulogic.com/pico_irda.shtml
хорошая штука, но непонятно, как с развитием и качеством стека

-- Linux. Посмотрел я в исходники ядра 2.4 - 600к С исходников (без
папок irlan и irnet). Наверное, можно это все перехачить, но
выдрать корни, идущие в ядро Линуха, будет непросто. Большая работа.

Может, кто знает, где взять нормальный IRDA стек, чтобы в какой-нибудь
ARM SAM64 влез?
Pavel_I
Из личного опыта.

Pico-IrDA удалось срастить с uCOS, который крутился в ARM части TMS320VC5470 (в нем
имеется аппаратная поддержка IRDA).

Это потребовало порядка 2-х недель, включая изучение спецификации на сам протокол.

Но Pico-IrDA - это только так сказать slave. Master посложнее будет.
Evgeny_CD
Цитата(Pavel_I @ Mar 1 2006, 18:39) *
Из личного опыта.

Pico-IrDA удалось срастить с uCOS, который крутился в ARM части TMS320VC5470 (в нем
имеется аппаратная поддержка IRDA).

Это потребовало порядка 2-х недель, включая изучение спецификации на сам протокол.

Но Pico-IrDA - это только так сказать slave. Master посложнее будет.
a14.gif Мне только slave и нужен. Master - это стандартный стек (WinXP | WinCE). Насколько у Вас все безглючно получилось? Т.е. винды нормально с таким девайсом работают в режиме эмуляции COM порта?
rezident
А зачем весь стек IrDA писать, если использоваться будет только как IR-порт? Достаточно IR-кодека с обеих сторон.
Evgeny_CD
Цитата(rezident @ Mar 1 2006, 19:04) *
А зачем весь стек IrDA писать, если использоваться будет только как IR-порт? Достаточно IR-кодека с обеих сторон.
Мне надо, чтобы мой девайс подцепился к (виндам | линуху) посредством IRDA. Как без стека blink.gif
rezident
Дык, а физического уровня не хватит что ли? Прицепили на COM-порт и/или UART МК IR-codec из перечисленных вами и работайте как с обычным COM-портом. IR будет в качестве "удлинителя" линии связи.
Может я что-то весьма наивное предлагаю? Поясните.

P.S. еще непонятно зачем постить одни и те же вопросы в нескольких форумах одинаковой направленности? Кросспостинг это не есть хорошо!
Evgeny_CD
Цитата(rezident @ Mar 1 2006, 20:28) *
Дык, а физического уровня не хватит что ли? Прицепили на COM-порт и/или UART МК IR-codec из перечисленных вами и работайте как с обычным COM-портом. IR будет в качестве "удлинителя" линии связи.
Может я что-то весьма наивное предлагаю? Поясните.
1. Вхождение в связь / разрыв связи. Надо, чтобы винды понимали, что устройство есть.
2. Ошибки. Канал не идеален, надо их отлавливать.
3. Flow Control. Надо выдавать сигналы управления потоком с двух сторон - основная трудность.
Цитата(rezident @ Mar 1 2006, 20:28) *
P.S. еще непонятно зачем постить одни и те же вопросы в нескольких форумах одинаковой направленности? Кросспостинг это не есть хорошо!
В разных форумах, пусть и одинаковой направленности, разные люди тусуются. Вот если бы я запостил это сообщение во всех коммуникационных подфорумах на этом сайте - это было бы западло. А так на сахаре и тут народ взаимно дополняет друг друга, как правило.
rezident
Цитата(Evgeny_CD @ Mar 1 2006, 22:36) *
1. Вхождение в связь / разрыв связи. Надо, чтобы винды понимали, что устройство есть.

Ну если Plug&Play нужен, то понятно.
Цитата(Evgeny_CD @ Mar 1 2006, 22:36) *
2. Ошибки. Канал не идеален, надо их отлавливать.

Контроль CRC на уровне пакетов недостаточен?
Цитата(Evgeny_CD @ Mar 1 2006, 22:36) *
3. Flow Control. Надо выдавать сигналы управления потоком с двух сторон - основная трудность.

Дык обмен может инициироваться с обеих сторон? Или все-таки PC - мастер, а устройство - слейв? Если да, то обмен типа запрос-ответ недостаточен будет?
Я понимаю, что IrDA это стандарт и Винда его поддерживает. Но все же бродит мысль, а нельзя ли в простых случаях ограничиться только PHY? smile.gif

Насчет кросспостинга. Я, например, читаю три форума. И отвечаю на всех трех. А вот такие обрывки диалогов зачастую вносят путаницу не только для самих пищущих, но и для тех кто читает эти посты.
Evgeny_CD
Цитата(rezident @ Mar 1 2006, 21:07) *
Дык обмен может инициироваться с обеих сторон? Или все-таки PC - мастер, а устройство - слейв? Если да, то обмен типа запрос-ответ недостаточен будет?
Я понимаю, что IrDA это стандарт и Винда его поддерживает. Но все же бродит мысль, а нельзя ли в простых случаях ограничиться только PHY? smile.gif
Для простых случаев и MCP2140 хватит biggrin.gif

Мне скорость нужна, чем больше - тем лучше. Так что без протокольных "фишек" не обойтись. Простоколы для того и придумывают, чтобы выжать все из канала связи.
rezident
Дык скорость все равно ограничена. Вы же SIR 115200 применяете. Неужели стек даст бОльшую скорость, чем "прямое" использование канала связи?
Evgeny_CD
Цитата(rezident @ Mar 1 2006, 21:28) *
Дык скорость все равно ограничена. Вы же SIR 115200 применяете. Неужели стек даст бОльшую скорость, чем "прямое" использование канала связи?
Периодически мне надо тормозить оба девайса, когда другая сторона захлебывается. Удобнее всего это сделать стандартным flow control. Можно, конечно, родить свой собственный стек протокола, который будет работать поверх чистого PHY, но заечем? Для начала мне придется делать 4 версии стека - для WinXP, WinCE, Linux и моего девайса. На фоне такой перспективы я лучше Pico-IrDA "прохачу".

Судя по всему, будет сделано проще. biggrin.gif IRDA нужна на этапе конфигурирования и для сброса логов. Посему будет сделан dongle на MCP215(0|5), который и будет подключаться к устройству на время работы. Один dongle на десяток-другой устройств самое то.

Ну а потом, if проект пойдет в большую серию, можно бужет выделить ресурсов на "разборки" с софтовым стеком.
Pavel_I
Цитата(Evgeny_CD @ Mar 1 2006, 18:47) *
Цитата(Pavel_I @ Mar 1 2006, 18:39) *
Из личного опыта.

Pico-IrDA удалось срастить с uCOS, который крутился в ARM части TMS320VC5470 (в нем
имеется аппаратная поддержка IRDA).

Это потребовало порядка 2-х недель, включая изучение спецификации на сам протокол.

Но Pico-IrDA - это только так сказать slave. Master посложнее будет.
a14.gif Мне только slave и нужен. Master - это стандартный стек (WinXP | WinCE). Насколько у Вас все безглючно получилось? Т.е. винды нормально с таким девайсом работают в режиме эмуляции COM порта?


Глюков замечено не было.
Со стороны виндов я работаю с IrDA через сокеты. Это более универсальный вариант, чем СОМ порт.
Если нужен СОМ порт, то необходим драйвер виртуального СОМ порта. В стандартную поставку
Win2000 не входит. Да и в XP кажется тоже.
Я пользовался вот этим - http://www.ircomm2k.de/
VslavX
Если хотите сделать попроще, то я бы Вам посоветовал завязываться не на IrCOMM, а сделать свой именованный сервис на базе IrLMP. Этим Вы избежите написания собственно IrCOMM и TinyTP. Да и аттрибутов в IAS придется поменьше вписывать. TinyTP сам по себе несложный, но может потребовать дополнительной памяти под буфера. IrDA сокеты под Windows вполне переключаются в LMP моду и позволяют законнектиться с любым именованным сервисом.
PicoIrDA мне не понравился, все равно пришлось изучать стандарт, а когда разобрался для начала в IrLAP, то понял что под мою задачу лучше все переписать. Вообще - писателей стандарта надо ставить к стенке - месяц-полтора был затрачен на продирание сквозь их идиотские многоуровневые диаграммы. На самом деле - из них 90% для простого устройства не нужно.
Работать без IrDA стека (напрямую с адаптером как с COM) можно обычно для внешних адаптеров, присобачиваемых на RS-232, не устанавливая на них IrDA драйверов. С внутренними адаптерами такой фокус иногда проходил года до 98-го, до появления ACPI. После танцев с бубнами вокруг реестра удавалось убедить Win9X что это не IrDA а обычный COM. Потом пошли навороченные адаптеры на 1.15 и 4 мегабита и прочие извращения в виде неотключаемого ACPI, и этот способ совсем помер.
Evgeny_CD
Цитата(Pavel_I @ Mar 1 2006, 22:05) *
Со стороны виндов я работаю с IrDA через сокеты. Это более универсальный вариант, чем СОМ порт.
Через сокеты - это OBEX?

В моем понимании COM порт важен по следующей причине. Если у меня конфигуратор - это Python + Tkinter (или + WxWidgets), по при использоании модуля Pyserial софтина пойдет с мнимальными переделками под Win, Lin, MacOS. Говорят, что и под CE пойдет. Это при условии, что IrDA=COM порт.

В случае с сокетами, в моем понимании (возможно, неправильном), такой красоты не получится.
Цитата(Pavel_I @ Mar 1 2006, 22:05) *
Если нужен СОМ порт, то необходим драйвер виртуального СОМ порта. В стандартную поставку
Win2000 не входит. Да и в XP кажется тоже.
Я пользовался вот этим - http://www.ircomm2k.de/
Когда я экспериментировал с MCP2140, то ноут с XP опознавал девайс четко, в Hyperterminal можно было открыть новый COM порт. Так что в XP, вероятно, такой драйвер есть. В аноутах на MCP2140 упоминалось, что он работает и с CE, но с некоторыми версиями CE есть глюки.
Evgeny_CD
Цитата(VslavX @ Mar 2 2006, 00:05) *
IrDA сокеты под Windows вполне переключаются в LMP моду и позволяют законнектиться с любым именованным сервисом.
Интересно, а как с этим под линухом?
Цитата(VslavX @ Mar 2 2006, 00:05) *
Работать без IrDA стека (напрямую с адаптером как с COM) можно обычно для внешних адаптеров, присобачиваемых на RS-232, не устанавливая на них IrDA драйверов. С внутренними адаптерами такой фокус иногда проходил года до 98-го, до появления ACPI. После танцев с бубнами вокруг реестра удавалось убедить Win9X что это не IrDA а обычный COM. Потом пошли навороченные адаптеры на 1.15 и 4 мегабита и прочие извращения в виде неотключаемого ACPI, и этот способ совсем помер.
Вы просто заинтриговали меня. Я, откровенно говоря, никогда не изучал вопрос работы напрямую через PHY. Мне казалось IRDA=стек.

Жаль, COM порты уходят, а с ними и простые адаптеры. Сейчас КПК с чистым COM портом уже не встретишь (если только какой-нибудь промышленный за 2k$ blink.gif )

Интересно, сколько еще проживет IRDA? Вроде как в КПК самые последние его ставят, в сотики тоже. Но причине массового психоза на почве Bluetooth и WiFi возьмут мелкомягкие и выкинут стек в Vista. Обидно будет. Для конфигурирования embedded устройств интерфейс самое то! А в полевых условиях цены нет - взял КПК, залили / считал конфиг файл, и никакая статика и разность потенциалов между землями тебе не страшна просто по определению.

Может, я тормоз, но у меня нет ни одного Bluetooth или WiFi девайса - и я ничуть не грущу поэтому поводу.
VslavX
Про линукс сказать ничего не могу, дела пока не имел.
OBEX - это сервис для обмена произвольными объектами. IrCOMM, IrLPT - тоже сервисы.
Сокеты - это обычные Win32 сокеты или Winsock2 - набор функций - WSAConnect(), WSARecv(), WSASend() и прочие.
Цитата
Вы просто заинтриговали меня. Я, откровенно говоря, никогда не изучал вопрос работы напрямую через PHY. Мне казалось IRDA=стек.

Но адаптер должен быть совсем тупой - преобразователь IR<->RS-232 + малюсенький микроконтроллер для автоопределения скорости обмена и выработки x8/x16 синхроклока. Ну и разобраться как него правильно питание подавать через линии DTR/RTS. Кстати - MS не рекомендует использование IrCOMM - это в MSDN написано. Честно говоря - в Win32 с сокетами работать проще чем с COM, ИМХО. Оверлаппед I/O на сокетах простой и без этих дурацких тайм-аутов SetCommTimeouts().
Цитата
Интересно, сколько еще проживет IRDA? Вроде как в КПК самые последние его ставят, в сотики тоже.

Не переживайте - меня с 2000-года смертью IrDA пугают, и все никак оно не помрет, болезное smile.gif
Но вот все больше становиться скоростных адаптеров, их уже на RS-232 не прицепишь. Да и для связи с КПК тоже стек нужен, так что деваться некуда.
Evgeny_CD
Ахтунг! По информации от человека с ником 50002 MCP2150 содержит ошибку в стеке!
====
Доп: mcp2150 - отстой с ошибкой реализации стека irda.(+)

приходится править и linux kernel modules и виндовый стек,
чтобы работало нормально.

и с некоторыми kpk не дружит

избегайте!
===
Так что MPC2150 "фтопку".
Pavel_I
Цитата(Evgeny_CD @ Mar 2 2006, 00:24) *
Цитата(Pavel_I @ Mar 1 2006, 22:05) *
Со стороны виндов я работаю с IrDA через сокеты. Это более универсальный вариант, чем СОМ порт.
Через сокеты - это OBEX?


Просто создаю сокет с адресом AF_IRDA. С помощью setsockopt говорю, что хочу работать
через сервис IrDA:IrCOMM. Делаю connect. И дальше передаю/принимаю данные с помощью
send/recv.
sapID
На http://electronix.ru/forum/index.php?showtopic=2739&hl=# я уже писал про свой опыт прикручивания IRDA к SAM7:

Цитата(sapID @ Apr 26 2005, 08:41) *
На http://blaulogic.com/pico_irda.shtml есть исходники реализации IRDA для атмеловского контроллера.
Оно, конечно, там с ошибками, но мне прикрутить в свою железку удалось.
На компе работаю через обычные сокеты - то есть никаких драйверов и пр. ерунды не надо.
IRCOMM использовать не рекомендуется, так как он больше не поддерживается в Win2K, winXP и далее (см. MSDN)

Пока не удалось победить:
- скорость только на 9600
- какой-то затык время-от-времени - требуется reconnect
- затык, если несколько IRDA устройств одновременно
- в XP не светится иконка связи в трее
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.