Форум программистов, компьютерный форум, киберфорум
Наши страницы
Цифровая обработка сигналов
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.65/17: Рейтинг темы: голосов - 17, средняя оценка - 4.65
Vodym
0 / 0 / 0
Регистрация: 02.10.2009
Сообщений: 19
1

Обнаружение новых устройств на последовательной шине

09.04.2017, 19:51. Просмотров 3169. Ответов 15
Метки нет (Все метки)

Доброго времени суток, форумчане.
Есть некоторая система, состоящая из ведущих и ведомых устройств. Общение между нимим происходит на основе кастомного протокола (так сложилось исторически), чем-то похожего на Modbus over RS-485. У каждого ведомого девайса должен быть свой уникальный адрес, чтобы ведущий мог обратиться к нему. Нету уникального адреса - устройства будут конфликтовать. В даный момент идентификаторы устройств захардкожены в прошивку, что меня не очень устраивает. Хотелось бы модифицировать протокол обмена так, чтобы получить что-то типа plug-omd-play: все слэйвы одинаковые, прошиты одни и тем же софтом, а адреса(идентификаторы) им назначаются мастером. Может кто сталкивался с чем-нибудь подобным или может указать на готовые решения?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2017, 19:51
Ответы с готовыми решениями:

Несколько устройств на шине I2C
У меня есть акселерометр и гироскоп.Первый должен подключаться через родтягивающие резисторы 10к,...

Почему количество устройств на шине RS485 ограниченно???
Почему количество устройств на шине RS485 ограниченно??? Я понимаю, что возможно есть разумные...

JMF обнаружение устройств
Доброго времени суток. Возникла нужда-кросплатформенно вывести изображение с вебкамеры во фрейм....

Обнаружение устройств usb
Нужно сделать так, чтобы при подключении любого устройства по usb выполнялся код. Пытался найти...

Обнаружение новых строк
Добрый Всем день. Есть Table1 , в ней три строки а,б,в.В какой то момент появляются строки г,д....

15
symi_x
0 / 0 / 0
Регистрация: 06.04.2017
Сообщений: 37
09.04.2017, 20:02 2
Ну скажем если нет необходимости сразу инициализировать несколько слейвов , а подключать их поочередно, то тогда использовать адрес по умолчанию к которому в условном режиме сканирования будет обращаться мастер и соответственно дальше назначать ему нужный адрес. Если инициализировать сразу несколько устройств, то у них хотя бы должны быть какие-нибудь уникальные идентификаторы, например как MAC адреса у Ethernet-a на основе который далее тот же DHCP назначает IP адрес.
0
pitrpts
0 / 0 / 0
Регистрация: 30.04.2015
Сообщений: 721
09.04.2017, 20:50 3
А как предполагается кто будет себе присваивать первым адрес ?
На устройствах в таких случаях ставят DIP-переключатели задания адреса, либо через иной интерфейс (usb/панель оператора) персонально записывают адрес в его епромку24
у них хотя бы должны быть какие-нибудь уникальные идентификаторы, например как MAC адреса
у некоторых процессоров есть зашитый на заводе серийный номер, по трём последним цифрам которого можно формировать программный адрес.
0
YTYOUT
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
09.04.2017, 21:50 4
Т.е это заново создать всё , что кто-то написал до тебя.
Индефикаторы зашиты не только в МАСТЕР , но и во все устройства которые у тебя уже есть . Так, что изменяя систему , нужно изменить не только мастер , но и все СЛЕЙВ. Готов?
Они должны получать свои номера от мастера , мастер должен распознавать и различать их по типу.
Возьми "Война и Мир" - почитай. Года 2 уйдёт. Полегчает
0
09.04.2017, 21:50
oomomstir
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,864
10.04.2017, 02:39 5
А ведомые девайсы на чём? К примеру, в stm32 afaik есть unique id, этого достаточно, чтобы enumerate все девайсы, как в pnp (идём по битам и велим откликаться только тем, у кого первые n бит uid имеют заданное значение).
Альтернатива - иметь хоть какой-то источник случайных данных (например, за счёт разброса частоты rc-генераторов или мусор с висящих в воздухе pins). Собственно, с источником шума задача сводится к предыдущей ;-)
0
Vodym
0 / 0 / 0
Регистрация: 02.10.2009
Сообщений: 19
10.04.2017, 12:27 6
Цитата Сообщение от YTYOUT
Индефикаторы зашиты не только в МАСТЕР , но и во все устройства которые у тебя уже есть . Так, что изменяя систему , нужно изменить не только мастер , но и все СЛЕЙВ. Готов?
Именно это мне и нужно сделать, модифицировать как ведомого, так и ведущего, чтобы они все соответствовали новому протоколу.
Цитата Сообщение от symi_x
Если инициализировать сразу несколько устройств, то у них хотя бы должны быть какие-нибудь уникальные идентификаторы,
.
Довольно неплохой вариант, но в даной ревизии взять уникальные идентификаторы попросту неоткуда.
Цитата Сообщение от oomomstir
А ведомые девайсы на чём?
Всё собрано на АТМегах. В ведущем 64, в слэйвах - 328. Так что ни о каких уникальных идентификаторах внутри чипа речь не идёт, возможно ставить дополнительную микру типа ЕЕПРОМа, чтобы внутри был уникальный идентификатор, однако хотелось бы сделать без изменения железа.
Цитата Сообщение от oomomstir
Альтернатива - иметь хоть какой-то источник случайных данных (например, за счёт разброса частоты rc-генераторов или мусор с висящих в воздухе pins).
Можно тыкнуть мордой в ссылку на какие-нибудь HOW-TO по этой теме
0
MostirOtixiy
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
10.04.2017, 14:12 7
Цитата Сообщение от Vodym
Всё собрано на АТМегах. В ведущем 64, в слэйвах - 328. Так что ни о каких уникальных идентификаторах внутри чипа речь не идёт, возможно ставить дополнительную микру типа ЕЕПРОМа, чтобы внутри был уникальный идентификатор, однако хотелось бы сделать без изменения железа.
АТМеги уже идут со встроенной ЕЕПРОМ. Менять железо не надо.
По протоколу -
1 - броадкаст - начинаем перекличку
- все девайсы сбросили свои старые адреса и слушают шину
2 - кто тут
- все отвечают, кто то да прорвется с ответом к мастеру (можно встроить рандомную задержку перед ответом), в пакете должен быть серийный нормер девайса
3 - вот тот с серийником OBS получает адрес N и молчит
4 - N = N + 1
5 - повторяем с пункта 2, пока не перестанут отвечать.

Все.
0
stt
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
10.04.2017, 14:17 8
Цитата Сообщение от Vodym
адреса(идентификаторы) им назначаются мастером
Выведите на слейвах кнопку "прописки". Нажатие кнопки инициируете запрос. Мастер в ответ отправляет «свободный номер», который и будет адресом нового слейва. В мозгах мастера следующий «свободный номер» увеличивается на единицу.
0
pitrpts
0 / 0 / 0
Регистрация: 30.04.2015
Сообщений: 721
10.04.2017, 14:29 9
все отвечают, кто то да прорвется с ответом к мастеру
интересно узнать кто прорвётся на RS485 и как этот прорыв выглядит на осциллограмме.
Если методология идентификации устройств работает десятилетиями, то в чём смысл создания проблем на следующие недели ?
0
Vodym
0 / 0 / 0
Регистрация: 02.10.2009
Сообщений: 19
10.04.2017, 14:42 10
Цитата Сообщение от MostirOtyxiy
1 - броадкаст - начинаем перекличку
- все девайсы сбросили свои старые адреса и слушают шину
2 - кто тут
- все отвечают, кто то да прорвется с ответом к мастеру (можно встроить рандомную задержку перед ответом), в пакете должен быть серийный нормер девайса
3 - вот тот с серийником OBS получает адрес N и молчит
4 - N = N + 1
5 - повторяем с пункта 2, пока не перестанут отвечать.
Неплохой вариант, можно над ним подумать, тем более что метод с псевдослучайными задержками перед передачей - вроде как практика CSMA/CD. Одно плохо - внутри слэйвов нет никаких серийников. А внешний ЕЕПРОМ как раз предлагал для того, чтобы брать уникальный идентификатор, в некоторых микрах ЕЕПРОМ вроде как есть уникальные идентификаторы (иногда даже EUI).
Цитата Сообщение от STT
Выведите на слейвах кнопку "прописки"
В одном корпусе может быть несколько слэйв-плат, да и устройство потребительськое - не хотелось бы вытаскивать кнопку, которую юзер должен тыкать десяток раз за жизнь устройства. Ищу решение типа "втыкнул провода" - заработало.
0
MostirOtixiy
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
10.04.2017, 15:36 11
Цитата Сообщение от Vodym
Неплохой вариант, можно над ним подумать,
Такой вариант работает уже не один десяток лет в некоторых (во многих, я бы сказал) устройствах, и вполне себя зарекомендовал.

Цитата Сообщение от Vodym
Одно плохо - внутри слэйвов нет никаких серийников. А внешний ЕЕПРОМ как раз предлагал для того, чтобы брать уникальный идентификатор, в некоторых микрах ЕЕПРОМ вроде как есть уникальные идентификаторы (иногда даже EUI).
Ах вон оно что.
Но если такого нет, то при производстве все равно надо как-то будет уметь прописывать серийник в платку устройства. Еще не видел ниодного серийного устройства без серийного номера. Вам же потом будет удобнее отслеживать их все.
Обязательно продумайте этот момент с прописыванием серийника в железку до того, как она выйдет из производства.
Это первое.
Второе - без такого серийника или какого либо другого уникального идентификатора работать такая, или аналогичная, схема не будет. Нужно обязательно уметь точно идентифицировать устройство на шине.
0
Sovo
0 / 0 / 0
Регистрация: 05.10.2007
Сообщений: 498
11.04.2017, 11:03 12
Могу предложить обратный вариант:
- Новая плата ждёт паузы в шине и выдаёт запрос: Есть кто с адресом N?
- если есть, плате приходит ответ от центрального блока или от периферийного (как сделаете).
Номер увеличивается и запрос повторяется, пока ответа не будет.
Этот адрес и присваивается плате.
Достаточно по очереди включить питание блоков.
Я так делал автоконфигурирование по протоколу INARP в локальной сетке.
0
MostirOtixiy
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
11.04.2017, 11:22 13
Цитата Сообщение от SOVO
Достаточно по очереди включить питание блоков.
Это очень сложно сделать без удорожания схемы. Тут будет задержка в районе микросекунды, двух, максимум (у нас как раз так 8 железок включаются последовательно - и там как раз такой вариант включения, и больше, чем 2 микро секунды - пока не получается сделать на чистом хардваре).
У вас МК стартует дольше и скорость старта менее предсказуема (разные емкости, разное время старта PLLов).

Цитата Сообщение от SOVO
Могу предложить обратный вариант:
- Новая плата ждёт паузы в шине и выдаёт запрос: Есть кто с адресом N?
- если есть, плате приходит ответ от центрального блока или от периферийного (как сделаете).
Номер увеличивается и запрос повторяется, пока ответа не будет.
Этот адрес и присваивается плате.

Я так делал автоконфигурирование по протоколу INARP в локальной сетке.
Этот вариант не прокатит, если :
1 есть области зарезервированных адресов, которые не всем можно раздавать.
2 если при каждом сбросе питания все адреса теряются (в некоторых автомобилях так реализовано - при каждом старте все адреса заново раздаются, но там каждая железка имеет свой серийник и в нем закодирована функция - стеклоподъемники, обогреватели и т.д.). И при каждом старте будет большой хаос и долгий старт.
3 если много девайсов, то как в п. 2 - долгий старт и хаос на старте

Такая схема прокатит, если только вся сеть уже сконфигурирована, адреса не теряются, и очень редко добавляются новые устройства без выключения всей системы
0
яверт
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
11.04.2017, 11:56 14
Цитата Сообщение от Vodym
тем более что метод с псевдослучайными задержками перед передачей - вроде как практика CSMA/CD.
Практика, но для мк которые стартуют практически синхронно и имеют одинаковую прошивку просто псевдослучайных задержек мало, надо инициализировать PRNG случайным seed`ом. К вариантам озвученным oomomstir можно добавить использование шума младших бит АЦП, измерять при этом можно как висящую в воздухе ногу, так и встроенный ИОН или датчик температуры.

Цитата Сообщение от Vodym
Одно плохо - внутри слэйвов нет никаких серийников. А внешний ЕЕПРОМ как раз предлагал для того, чтобы брать уникальный идентификатор, в некоторых микрах ЕЕПРОМ вроде как есть уникальные идентификаторы (иногда даже EUI)
Серийник можно прошивать во внутреннюю eeprom "на заводе" при первой заливке прошивки.
0
MostirOtixiy
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
11.04.2017, 12:04 15
Цитата Сообщение от яверт
Серийник можно нужно прошивать во внутреннюю eeprom "на заводе" при первой заливке прошивки.
0
KoS
0 / 0 / 0
Регистрация: 24.08.2009
Сообщений: 3
13.04.2017, 12:40 16
Цитата Сообщение от MostirOtyxiy
Цитата Сообщение от яверт
Серийник можно нужно прошивать во внутреннюю eeprom "на заводе" при первой заливке прошивки.
Тем более некоторые программаторы это умет делать изменять некий счетчик автоматически
0
13.04.2017, 12:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2017, 12:40

работа с потоками и обнаружение устройств
добрый день, господа. 1) При разработке программы морда стала немного притормаживать на пк. В ней...

Обнаружение компьютеров и устройств подключенных по сети
Как реализовать обнаружение компьютеров и устройств подключенных по сети? просто выдать список...

Обнаружение USB устройств с последующим их безопасным извлечением
Интересует вопрос об обнаружении съёмных накопителей (usb-flash), с последующим копированием на них...


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

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

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