0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 483
1

USB на много UART, или как связать одноплатник с периферией

18.09.2013, 21:02. Показов 11246. Ответов 14
Метки нет (Все метки)

На один уарт полно всяких разных (на ибее, например). Но есть ли в природе переходники на 4 и более уартов? Не хочется костылять через USB-хаб + много переходников.

Зачем этоХочу сделать из Raspberry Pi мини-сервер домашний, работающий 24/7 и выполняющий какую то служебную работу (мониторинг температуры, датчиков, веб-камера, SMS управление, раздача часов по NRF24 и т.д.). Задача: связать все эти расширения (метеостанция, датчики, GSM телефон...) с одноплатником. Не придумал ничего лучше, как сделать это по посл. интерфейсу (ТТЛ уровни, ибо хочу соединять напрямую, без max232). Но уарт -- не шина, поэтому для каждого расширения надо свой порт. Поэтому мне нужно из USB сделать много уартов.

Если это тупо, прошу пояснить, как надо делать.

Был вариант задействовать шину I2C, которая имеется на Raspberry Pi и которой легко рулить из под линухи. Но есть проблемы: (1) каждый модуль расширения должен быть I2C slave, а это может быть накладно для МК (уарт-то намного проще и даже без аппаратной поддержки можно спокойно работать ногодрыгом); (2) я предполагаю вместо одного большого и неуклюжего демона, рулящего всеми расширениями, сделать по маленькому демону, для каждого свой (а-ля umyx way): демон, мониторящий температуру, демоны для датчиков, демон для GSM телефона и т.д. И вот, думаю, будет трудновато (или, по крайней мере, костыльно) всем демонам сразу рулить одной шиной. Придётся какую-нибудь очередь организовывать со специальными демоном, с мьютексами и кучей костылей. С уартами же такой проблемы нет: каждый демон работает на своём ком-порте.

Если кто-то считает, что я что-то делаю неправильно, прошу высказаться. Я новичок совсем.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.09.2013, 21:02
Ответы с готовыми решениями:

Работа с USB периферией как с файлом
Добрый день) На плюсах есть такие структуры которые по гуиду находят устройства которые...

UART или USB?
Добрый день! Разрабатываю устройство диагностики фотовидеокамеры в качестве дипломного проекта. ...

usb - uart CP2102 или CP2104
Доброе всем утро. Хочу купить преобразователь usb-uart на али. Остановился на тех, что на базе...

слишком много аргументов в вызове функции или как создать много файлов на рабочем столе
Мне нужно создать на рабочем столе очень много файлов вот команда для создания 1 файла wchar_t...

14
0 / 0 / 0
Регистрация: 13.05.2011
Сообщений: 401
18.09.2013, 21:31 2
Вот, например: http://www.ftdichip.som/Products/ICs/FT4232H.htm
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
18.09.2013, 21:34 3
usb в 4 уарта есть много различных переходников, cp2108, ft4232h, TL16C754C, но так как такое обычно никому не надо, то стоить они будут как распберри.
хаб + много переходников будет гораздо дешевле и проще достать.

уарт не шина, потому что уарт это вообще не тип физического уровня, а лишь способ синхронизации передаваемых данных, соответственно какой физический уровень к нему будет прикручен (rs232, rs485, lvds, ... или даже просто TTL, через диодное "ИЛИ" / либо с открытым коллектором) и будет определять возможную топологию подключения, устройств точка-точка или шина.
0
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 483
18.09.2013, 21:41 4
Меня ещё интересуют, как нормальные люди решают такую проблему. В смысле как связать с одноплатником много различной внешней переферии. Предполагаем, что переферия самодельная и её интерфейс я могу выбирать сам.

С шинами я уже написал, что меня беспокоит -- это будет разделяемый ресурс: куча демонов будет хотеть использовать её для себя. Придётся это разруливать. Я не вижу более простого способа, как специальный демон, который обрабатывает входящие запросы на обращение к шине и организует очередь.

------------

Заметил, что usb на rs232 (db-9) более распространены и дешевле. Может лучше их + max232. Заодно увеличим дальность и переферию можно проводами дальше от одноплатника отводить.
0
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,379
18.09.2013, 21:52 5
485 шину можно использовать. Собственно, именно для таких ситуаций она и была в свое время придумана.

Это если датчики далеко. Если близко, то I2C, никаких проблем с конкурентным доступом к шине не будет, все разруливается на уровне драйвера. Что касается I2C Slave, то никакой заметной нагрузки на МК он не дает, если сделан аппаратно. Тем более что многие датчики и без того имеют I2C.

Можно еще 1-Wire использовать. Этот протокол легко сделать и программно, хоть на хосте, хоть на модулях датчиков.

А вот вариант с кучей UART выглядит чудовищно. Особенно если понадобится расширение.
0
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,233
18.09.2013, 21:59 6
поставить 485й конвертер и нет проблем.

костыльный же вариант с кучей уартов можно замутить с использованием плисины - хоть на все ноги уарты вешай (ну, усб можно в мк заюзать каком-нить простеньком).
Цитата Сообщение от soxop
Я не вижу более простого способа, как специальный демон, который обрабатывает входящие запросы на обращение к шине и организует очередь.
так и делать.
0
0 / 0 / 0
Регистрация: 28.01.2010
Сообщений: 569
18.09.2013, 22:10 7
Цитата Сообщение от _pv
usb в 4 уарта есть много различных переходников, cp2108, ft4232h, TL16C754C, но так как такое обычно никому не надо, то стоить они будут как распберри.
Да не особо дорого, микросхемы в смысле. FT4232H в местной лавке $12, CP2108 пока нет, но можно достать по 5-6 (в течение месяца-двух притащат с диджикея или маузера). Ну там ещё обвеска, себестоимость получится в районе $30.
4-портовые переходники от Moxa, которые можно купить прямо здесь и сразу, стоят отнюдь не как распберри, а как неплохой системный блок персоналки - около 400 баксов... потому и поставил в план выпуск дешёвого аналога, ограниченным тиражом. Параллельно два варианта - на FT4232H и на CP2108. На данный момент схемы составлены, идёт процесс разводки. Там будет 3 шт. полных RS-232 + 1 шт. RS-485 + UART с трехвольтовыми уровнями (в схеме с CP2108 возможно до 5 В), совмещённый с одним из 232-х. Если кто-то закажет хотя бы сотню - переделаю под другие требования.
0
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 483
18.09.2013, 22:27 8
Цитата Сообщение от okotimiv
Если близко, то I2C, никаких проблем с конкурентным доступом к шине не будет, все разруливается на уровне драйвера.
Ааа.. То есть я в каждом демоне могу открывать y2s адаптер (/div/y2s-*) и спокойно читать, писать через него, как будто я один с шиной работаю? Если так, то это просто замечтательно.

По поводу I2C slave. Да, аппаратная поддержка есть (я работаю на AVR и MSP430). Опыт работы есть только в режиме мастера на AVR (и это было очень легко). Но просто слышал от многих, что слейв это жутко сложно и занимает кучу ресурсвов контроллера. Отложилось в памяти. Пойду AVR-овские даташиты изучать, может не всё так плохо.
0
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,379
18.09.2013, 23:01 9
Да что сложного в I2C Slave? И ресурсов никаких он не занимает, кроме самого I2C контроллера. Узнал свой адрес - выдал прерывание, а дальше нехитрый КА. Никакой принципиальной разницы с UART.

В аппноутах полно примеров.

Если будете делать - берите SMBus в качестве протокола - с ним из Pi будет гораздо легче работать, чем с голым I2C.

В Linux, если устройство занято, то оно у вас просто не откроется. Так что в демоне поллинг, и все.
0
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 483
18.09.2013, 23:12 10
Цитата Сообщение от okotimiv
Если будете делать - берите SMBus в качестве протокола - с ним из Pi будет гораздо легче работать, чем с голым I2C.
А в чём разница?

Цитата Сообщение от okotimiv
В Linux, если устройство занято, то оно у вас просто не откроется. Так что в демоне поллинг, и все.
То есть в демонах будет типа так:
Код
while (1) {
fd = open("/div/y2s-0", O_RDWR);
пишем и читаем
close(fd)
sleep(x)
}
Если шина занята, open заблокируется, пока шина не освободится (= пока другой демон не закроет устройство). Так?
0
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,379
18.09.2013, 23:22 11
Разница в том, что в драйверах I2C для малины нет рестарта. А если пользоваться SMBus функциями, то все нормально. Тем более что SMBus вообще-то стандарт, и скорее всего даже если вы начнете делать что-то свое, получится примерно то же самое. Так нафига огород городить?

И я думаю, что вы без труда найдете готовую реализацию SMBus Slave для любого МК.

Попытка открыть занятое устройство скорее всего приведет не к блокировке, а к ошибке. Но это лучше проверить, я сейчас не помню, а посмотреть дома не на чем - малины все в офисе.

Ну и имейте в виду, что скорость I2C у вас всегда будет 100 килогерц, насколько я помню, другие скорости малина не поддерживает, во всяком случае на уровне драйверов. Это нужно учитывать при разработке модулей датчиков (они должны успевать).
0
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 483
18.09.2013, 23:36 12
Цитата Сообщение от okotimiv
Разница в том, что в драйверах I2C для малины нет рестарта.
тут написано, что через ioctl можно. Правда, может в малине это не реализовано. Не знаете, где можно найти доки по драйверу y2s в малине? Я может плохо гуглил, но мне вечно какие-то тутуриалы с готовыми либами для питона и руби попадаются...

А в чем вообще разница между y2s и smb. Я погуглил, нашёл только "физические" отличия (скорости, уровни, подтяжки и т.д.)...
0
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,379
19.09.2013, 01:05 13
SMBus - протокол обмена данными поверх I2C. Ну и с параметрами среды у SMBus есть определенные стандарты, впрочем их придерживаться необязательно.

Через ioctl можно работать на малине, точно так же, как и на других таких платках. Но с рестартом там жопа. Есть извратные способы, но вообще-то надо ядро патчить.

Другое дело что если SMBus, то все эти сложности ни к чему. Пользуешься стандартной библиотекой SMBus, и все. Почти на любом языке можно.

Так что просто реализуйте SMBus, и не будет у вас проблем. I2C контроллер у малины как раз на это и заточен, от железки до драйверов. Тем более что SMBus сам по себе проще пареной репы, там вообще никаких сложностей нет.
0
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 483
19.09.2013, 21:26 14
Код
 Пользуешься стандартной библиотекой SMBus
А что это за стандартная библиотека?
0
Днитрий Бривикав
01.02.2017, 19:58 15
Цитата Сообщение от soxop
На один уарт полно всяких разных (на ибее, например). Но есть ли в природе переходники на 4 и более уартов? Не хочется костылять через USB-хаб + много переходников.

Зачем это
Хочу сделать из Raspberry Pi мини-сервер домашний, работающий 24/7 и выполняющий какую то служебную работу (мониторинг температуры, датчиков, веб-камера, SMS управление, раздача часов по NRF24 и т.д.). Задача: связать все эти расширения (метеостанция, датчики, GSM телефон...) с одноплатником. Не придумал ничего лучше, как сделать это по посл. интерфейсу (ТТЛ уровни, ибо хочу соединять напрямую, без max232). Но уарт -- не шина, поэтому для каждого расширения надо свой порт. Поэтому мне нужно из USB сделать много уартов.

Если это тупо, прошу пояснить, как надо делать.

Был вариант задействовать шину I2C, которая имеется на Raspberry Pi и которой легко рулить из под линухи. Но есть проблемы: (1) каждый модуль расширения должен быть I2C slave, а это может быть накладно для МК (уарт-то намного проще и даже без аппаратной поддержки можно спокойно работать ногодрыгом); (2) я предполагаю вместо одного большого и неуклюжего демона, рулящего всеми расширениями, сделать по маленькому демону, для каждого свой (а-ля umyx way): демон, мониторящий температуру, демоны для датчиков, демон для GSM телефона и т.д. И вот, думаю, будет трудновато (или, по крайней мере, костыльно) всем демонам сразу рулить одной шиной. Придётся какую-нибудь очередь организовывать со специальными демоном, с мьютексами и кучей костылей. С уартами же такой проблемы нет: каждый демон работает на своём ком-порте.

Если кто-то считает, что я что-то делаю неправильно, прошу высказаться. Я новичок совсем.

Если вдруг Вам еще актуально, то у меня есть переходник USB на 16 UART. Скорость до 12 Мбит/с. Линии RX, TX и GND.
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.02.2017, 19:58

Генератор всей информации на много Yetabayte или много битный счетчик или ЗУ с неограниченным размером
Вопрос как получить всю информацию все изображения и.т.д ? Ответ прост весь код файла это номер...

Связать несколько микроконтроллеров по UART
Всем печенек! Собственно, САБЖ. Есть три ПИКа. Каждый выполняет свою функцию, но результаты от...

Как заставить грузится одноплатник с флешки?
Есть интересный прибор, под названием "Устройство концентрации данных", с предустановленным...

UART To USB
Что значит преобразователь UART to USB Например этот http://www.getchip.net/posts/040-uartrs ......


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.