Перейти к содержанию

    

Коммутатор по UART

Уважаемые коллеги, помогите советом какую базу выбрать:

Встала задача разработать коммутатор на интерфейсах UART. Под коммутатором я понимаю, аналог Ethernet свитча, только без адресации.

В устройстве предполагается всего 3 порта, два для построения общей локальной сетки (либо простая цепочка, либо двунаправленное кольцо) и один порт идет непосредственно на терминал. Терминал умный сам пойёмет, что если пакет предназначен ему, то ответит на него. Таким образом Мастер сделает запрос,он пройдет по всем слейвам, и нужный ответит ему.

Вот теперь вопрос на чём всё это собирать.

1. Вариант 1 брать МК с 3-мя железными портами и городить на нём кольцевой буфер.

2. Вариант 2 брать разветвитель, что то типа tl16c754 и городить к нему HOST контроллер, который будет прогонять дату через себя.

И сразу доп вопросы. Если кто склоняется к первому вариант, где можно почитать грамотную реализацию кольцевого буфера?

Ну и по второму варианту, возможно ли сделать режим где host только конфигурирует расширитель, а тот сам уже организует кольцевой буфер по внутренней шине?

А также может есть третий вариант (кроме ПЛИС)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Уважаемые коллеги, помогите советом какую базу выбрать:

Встала задача разработать коммутатор на интерфейсах UART. Под коммутатором я понимаю, аналог Ethernet свитча, только без адресации.

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

Лучше всего с самого начала определить стандаартный тип сети, протокол потом под него выбрать железо.

Ведь ничего не сказано о длине линий и скорости.

Есть же микроконтроллеры у которых по 4-6 UART..

А есть микроконтроллеры с LIN. А есть CAN... Зачем что-то придумывать особое?

Это то, что касается железа. А есть еще и протокол. Сначала слепите "коммутатор", потом вспомните, что надо данные отличать от команд. А потом выяснится, что кто-то полез в сеть и пакеты побились... И про передачу эстафеты.... И т.д.

А на самом деле, все эти проблемы давно решены для стандартных железок. И порты и интерфейсы и софт давно выложены и проверены...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Вот когда задача "встает", то лучший способ это не добавлять не пойми что к "тому что было"... Потому как дальше идут слова "от этого я долго руки мыла"...

Лучше всего с самого начала определить стандаартный тип сети, протокол потом под него выбрать железо.

Ведь ничего не сказано о длине линий и скорости.

Есть же микроконтроллеры у которых по 4-6 UART..

А есть микроконтроллеры с LIN. А есть CAN... Зачем что-то придумывать особое?

Это то, что касается железа. А есть еще и протокол. Сначала слепите "коммутатор", потом вспомните, что надо данные отличать от команд. А потом выяснится, что кто-то полез в сеть и пакеты побились... И про передачу эстафеты.... И т.д.

А на самом деле, все эти проблемы давно решены для стандартных железок. И порты и интерфейсы и софт давно выложены и проверены...

А с чего ВЫ взяли, что сеть на UART не стандартная? под него и выбираем железо. Протокол MODBUS

Вы бы прежде чем давать советы, сначала спросили уточняющую информацию, если конечно у вас были намерения помочь, а не так ...

Скорость, да забыл указать до 115.2 Kbps. Длина линии не важно, условно "на столе" так как есть ретрансляторы. Сопряжение по уровням тоже отдельная задача.

При чём тут LIN и CAN как вы на них одновременно построите и соединение "по цепочке" и "двойное двунаправленное кольцо", если вдруг я выражаюсь непонятными терминами? то картинки во вложении.

Далее, я не утверждал, что нет МК с 3-мя и более железными UART, я их как раз и рассматривал в первом варианте.

Вы в себе обнаружили телепатические способности предвидеть мои потребности, или делитесь своим опытом того чего "слепили" ранее?

post-23894-1517817674_thumb.png

post-23894-1517818986_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
А с чего ВЫ взяли, что сеть на UART не стандартная? под него и выбираем железо. Протокол MODBUS

А в чём тогда проблема? Протокол Вы знаете, как принять/передать кадр в этом протоколе - знаете, в чем тогда вопрос?

Берёте МК с необходимым кол-вом UART и пишете.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
А с чего ВЫ взяли, что сеть на UART не стандартная? под него и выбираем железо. Протокол MODBUS

Вы бы прежде чем давать советы, сначала спросили уточняющую информацию, если конечно у вас были намерения помочь, а не так ...

 

Далее, я не утверждал, что нет МК с 3-мя и более железными UART, я их как раз и рассматривал в первом варианте.

Вы в себе обнаружили телепатические способности предвидеть мои потребности, или делитесь своим опытом того чего "слепили" ранее?

Не надо передергивать. Каков был вопрос - "коммутатор, аналог Ethernet свитча". Коммутатор подразумевает радиальное подключение абонентов к коммутатору и общение "каждый с каждым" одновременно или через буфер. А что у Вас на картинках - обычное кольцо. А это никак не "коммутатор". Ибо тут можно напрямую общаться только с соседом...

И не надо вот этого - "сначала спросили уточняющую информацию"... А пишите сразу так, чтобы Вас понимали однозначно. А если бы у меня не было "намерения помочь", то я бы и писать Вам не стал...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
А с чего ВЫ взяли, что сеть на UART не стандартная? под него и выбираем железо. Протокол MODBUS

UART - точка точка. При соединении кольцом каждое устройство должно понимать что если информация не для нее то надо передать дальше, по стандарту MODBUS все времена описаны и каждому устройству придется ждать приема посылки (хотя можно и передавать сразу не дожидаясь разбора пакета) и сколько в итоге набежит времени простоя?

 

Делайте как и все на RS485 там и UART будет и все что изображено на второй картинке (только отключить от мастера второй конец линии)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
UART - точка точка. При соединении кольцом каждое устройство должно понимать что если информация не для нее то надо передать дальше, по стандарту MODBUS все времена описаны и каждому устройству придется ждать приема посылки (хотя можно и передавать сразу не дожидаясь разбора пакета) и сколько в итоге набежит времени простоя?

Ну и что? Принимающий МК может разобрать Modbus-кадр? Может. Значит может передать его дальше. А уже время ответа на этот кадр - это несколько другое время, чем интервалы между Modbus-кадрами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно Вас неправильно информировала первая картинка, так как я забыл там убрать "Device" из квадрата. А вместо земли стоит как раз оконечный терминальное устройство для которого и посылаются данные. Поэтому речь всё таки идет о коммутаторе. Так как в он стоит в каждом узле и "раскидывает" поток данных с одного порта в два других. Причём он эти данные не анализирует, и не знает ,что к его портам подключено, оконечное устройство или такой же коммутатор. Если уж совсем "на пальцах" мне нужно устройство с тремя равнозначными UART портами и буфером.

 

To jcxz

Так вот я и прошу помощи в рекомендации выбора железа и литературы по алгоритму.

 

Погодите, зачем коммутатору разбирать пакет, я надеялся получить что то типа циркулятора.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Поэтому речь всё таки идет о коммутаторе. Так как в он стоит в каждом узле и "раскидывает" поток данных с одного порта в два других. Причём он эти данные не анализирует, и не знает ,что к его портам подключено, оконечное устройство или такой же коммутатор. Если уж совсем "на пальцах" мне нужно устройство с тремя равнозначными UART портами и буфером.

Вот только сейчас ваша мысль становится понятной :)

 

Хаб с тремя равнозначными UART, имхо, построить не удастся. Порты все равно будут различными по функционалу, если хотите дуплекс. Как вы коллизии разгребать будете?

Если достаточно полудуплекса, то проще всего делать так, как все делают, т.е. возле всех мастеров/слейвов по преобразователю UART/RS-485, и дальше одна общая шина.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Вот только сейчас ваша мысль становится понятной :)

 

Хаб с тремя равнозначными UART, имхо, построить не удастся. Порты все равно будут различными по функционалу, если хотите дуплекс. Как вы коллизии разгребать будете?

Если достаточно полудуплекса, то проще всего делать так, как все делают, т.е. возле всех мастеров/слейвов по преобразователю UART/RS-485, и дальше одна общая шина.

Ну понятно, что порты не совсем будут равнозначные. Всё равно в алгоритме мы как минимум должны выбрать в какой первый порт выкидываем из буфера, а в какой во вторую очередь, после чего очищаем буфер.

Те порты которые будут в первоочередными будут использованы в построение линии связи, а те,что второстепенные будут отданы оконечным устройствам.

С линией я к сожалению сделать ничего не могу, это UART и точка.

К тому же схема построена по разделенному во времени опросу оконечных устройств: Мастер запросил данные с определённого оконечника, тот ему ответил. Через 100мс опрос другого устройства.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
...коммутатор на интерфейсах UART. Под коммутатором я понимаю, аналог Ethernet свитча, только без адресации. ...

Терминал умный сам пойёмет,...,он пройдет по всем слейвам, и нужный ответит ему.

1. Вариант ...

 

3 Вариант 3

(Если на хостах софт готов сам разгребать адресацию. то это = не свитч а хабик.)

Делается всё на элементарной логике типа 155 серии пару корпусов(для 8 лучей). топология звезда. просто до безобразия - каждый слышит всех, кроме себя. если нужны преобразователи уровней -

плюс у каждого луча по преобразователю.

 

решение придумано, создано и проработало годы.. когда изернет и аркнет был в диковинку, а перекачивать винты(ну и игры шли на ура типа ф19) надо было :)

 

удачи вам

(круглый)

ЗЫ

Но если хочется МК заюзать или ПЛИСИНу - то думаю можно. Ещё и бабло попилить повод к тому-же...

От задач зависит короче говоря...

:biggrin:

Изменено пользователем kolobok0

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 Вариант 3

(Если на хостах софт готов сам разгребать адресацию. то это = не свитч а хабик.)

Делается всё на элементарной логике типа 155 серии пару корпусов(для 8 лучей). топология звезда. просто до безобразия - каждый слышит всех, кроме себя. если нужны преобразователи уровней -

плюс у каждого луча по преобразователю.

 

решение придумано, создано и проработало годы.. когда изернет и аркнет был в диковинку, а перекачивать винты(ну и игры шли на ура типа ф19) надо было :)

 

удачи вам

(круглый)

ЗЫ

Но если хочется МК заюзать или ПЛИСИНу - то думаю можно. Ещё и бабло попилить повод к тому-же...

От задач зависит короче говоря...

:biggrin:

Точно свитч без адресации, это хабик :)

Про логику интересно, но я не понял, что Вы имели в виду.

 

Не, у меня полностью коммерческий проект, тут пилить нечего, надо как можно меньше себестоимость делать. Но конечно не в ущерб функционалу. А мигающие светодиодики заказчику нравятся (видно что прибор работает), вот и надо ставить МК :)

Поделиться сообщением


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

плюс у каждого луча по преобразователю.

Точно! Дожили, что простейшие аппаратные решения без МК уже в голову не приходят :biggrin:

 

Для желаемого ТС хаба на три равнозначных RS-232 нужно только три MAX232 для преобразования RS-232 / UART и одна 74HC08 (4 х 2И).

 

Для красоты можно поставить три светодиода на выходы UART-ов, при проходе пакета будут мигать попарно.

 

А коллизии при отправке одновременно двух пакетов по разным входам определять программно по несовпадению контрольных сумм и вообще по порче посылок.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Для желаемого ТС хаба на три равнозначных RS-232 нужно только три MAX232 для преобразования RS-232 / UART и одна 74HC08 (4 х 2И).

Вот только у меня нет RS-232, у меня чистый UART (Rx-TX). Или Вы имели ввиду по уровням преобразование?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
...Про логику интересно, но я не понял, что Вы имели в виду...

 

Ниже приведён пример такой логики работы на 155 серии. вопросы скорострельности, RS232 - сотавляем за скобками(схему чуток нужно изменить конечно-же)..

у каждого UART есть пин на передачу и пин на приём.

предположим у хабика 3 порта.

у каждого порта есть входы(с точки зрения хаба).

In1, In2, In3

и выходы(с точки зрения хаба)

Out1, Out2, Out3

Берём 3 элемента двух входовой AND логики (например К155ЛИ1)

DD1, DD2, DD3

 

In1 соединяем с входами двух элементов = к 1 входу DD2 и к 1 входу DD3.

In2 соединяем с входами двух элементов = к 1 входу DD1 и к 2 входу DD3.

In3 соединяем с входами двух элементов = к 2 входу DD1 и к 2 входу DD2.

Выход DD1 будет Out2

Выход DD2 будет Out2

Выход DD3 будет Out3

 

Т.к. активный у UART "0", а без сигнала "1"

то по приходу по In1 активного нуля он поступает всем, кроме себя т.е. на Out2 и Out3

всё то же самое для In2 и In3...

 

схема по принципу звезда. может наращивать энное кол-во лучей (учитывать распространение сигнала на ваших скоростях только надо будет).

один из минусов схемы - питание хабика.

грамотное питалово и развязки под RS232(в случае полноценного соединения с писюками) вызывают больше задумчивости чем сама логика описанная выше.

 

если далее софтово мы хотим разрулить адресацию, то сделать аля сеть = два пальца об асфальт...(конечно же до определённых скоростей)...

 

 

с уважением

(круглый)

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация