|
Организация сетевого обмена на AT90S8515, Построение локальной сети микроконтроллеров |
|
|
|
Jun 2 2008, 13:20
|
Участник

Группа: Новичок
Сообщений: 29
Регистрация: 5-11-07
Пользователь №: 32 068

|
Здравствуйте! Подскажите как лучше реализовать сетевой обмен между МК, если имеется следующие требования: - обмен по последовательному каналу (планирую использовать UART + MAX232); - число абонентов от 1 до 16; - возможность горячего подключения/отключения абонентов; - длина передаваемого сообщения данных / команд не более 64 байт. Сетевой обмен будет макетироваться на STK500 и моделироваться в Proteus'е. Есть ряд вопросов по реализации: - следует ли реализовывать некое подобие Ethernet, TokenRing, HDLC? - как следует осуществлять квитирование? (для связи будет использоваться нуль-модемный кабель (RS-232C, COM (DB-9M))) - будут ли программно доступны линии спецификации RS-232C (9-контактов), кроме TxD/RxD/GND? Есть подозрения, что они будут недоступны. Поясню, планировал использовать ряд линий как запрос на конфигурирование сети и быстрый ответ на передачу данных (принято без/с ошибками), без них же будет затруднительно это реализовать. Полагаю использовать преамбулу в 2 байта + 2 байта, определяющие тип передачи, + 2 байта CRC16. Думаю, что имеет смысл реализовать некоторый набор стандартных команд-пакетов, например опрос статуса и т.д. По-началу хотел реализовать детерминированный доступ к каналу - в духе TokenRing, однако сейчас в недоумении, как организовать выбор монитора (резервного монитора) из всех МК, а также организовать обход абонента, которому нечего передавать и/или передача адресована не ему, - это для сокращения временных задержек, связанных с приемом, а затем перепередачей данных. Сейчас же в раздумьях, как это можно сделать, чтобы потом была возможность выполнить макетирование на STK500. Подскажите, пожалуйста, как решить вышеописанные вопросы. Заранее благодарен. В догонку, есть еще одно требование - реализовать "средства (аппаратные и программные), обеспечивающие контроль работы канала связи с помощью пульта оператора в режиме диагностики, предусмотрев централизованное управление всеми транзакциями по командам оператора", следует ли на этой плате ставить дополнительную ИМС памяти (для приемного буфера), если да, то какого объема лучше? Для индикации будет использован цифро-буквенный ЖКИ типа LM041L/LM044L. P.S.: также было высказано "требование-пожелание" - программы должны быть написаны на ассемблере (это несколько огорчило...  ).
|
|
|
|
|
Jun 2 2008, 13:45
|
Местный
  
Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527

|
Цитата(nelord @ Jun 2 2008, 17:20)  Здравствуйте! Подскажите как лучше реализовать сетевой обмен между МК, если имеется следующие требования: ... MAX232 (как и RS232 вообще) не предназначена для построения сетей. ИМХО Ваш выбор - RS485 и что-то типа max483. AT90S8515 - странный выбор,контроллер не производится лет 5. Про Протеус лучше забыть, в нем хорошо только игрушки отлаживать. Линий кроме RXD и TXD у AVR нет. Если нужны следует выбрать другой контроллер, например AT91SAM7S128. Протоколов много стандартных - MODBUS, WAKE, или на их основе изобретайте свое. Курсовик?
|
|
|
|
|
Jun 2 2008, 14:23
|
Участник

Группа: Новичок
Сообщений: 29
Регистрация: 5-11-07
Пользователь №: 32 068

|
Именно, курсовик. Свой уже сдал, попросили сделать за небольшую премию)).
Согласен про AT90S8515, что он уже не выпускается, однако в техническом задании указана как раз эта модель. Какой из предложенных протоколов лучше выбрать: MODBUS или WAKE?
|
|
|
|
|
Jun 2 2008, 15:32
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Qwertty @ Jun 2 2008, 16:45)  Линий кроме RXD и TXD у AVR нет. Если нужны следует выбрать другой контроллер, например AT91SAM7S128. Зачем? Берем любые GPIO и называем их так как надо. Цитата Какой из предложенных протоколов лучше выбрать: MODBUS или WAKE? Я бы выбрал modbus. Цитата следует ли на этой плате ставить дополнительную ИМС памяти (для приемного буфера), если да, то какого объема лучше? Я бы ставил 8-32kB (корпуса/сигналы одинаковые), но "не для приемного буфера", а для комфортной работы. Т.е. подключить эту память по шине и использовать также как и внутреннюю - если надо под стек, под переменные и проч. Чип m162 или m128 (с внешней шиной и с JTAG'ом для отладки).
|
|
|
|
|
Jun 2 2008, 16:20
|
Участник

Группа: Новичок
Сообщений: 29
Регистрация: 5-11-07
Пользователь №: 32 068

|
Цитата(defunct @ Jun 2 2008, 19:32)  Зачем? Берем любые GPIO и называем их так как надо. Я бы выбрал modbus. Я бы ставил 8-32kB (корпуса/сигналы одинаковые), но "не для приемного буфера", а для комфортной работы. Т.е. подключить эту память по шине и использовать также как и внутреннюю - если надо под стек, под переменные и проч. Чип m162 или m128 (с внешней шиной и с JTAG'ом для отладки). Разумеется, что можно использовать любой I/O вывод, вопрос был относительно поддержки физической коммутации этих выводом с разъемом DB-9M на плате STK500, в документации для указанной коммутации есть только "RS232 SPARE", то есть TxD/RxD + GND Описание спецификации modbus нашел следующее, если кому быть может понадобится: http://www.idom.ru/files/Schneider/Info/Ne.../Modbus_Rus.DocТакже вопрос: почему RS-485 лучше, чем RS-232, как я понял почитав по следующим ссылкам: Цитата он отличается только в передаче по дифференциальной паре, то есть лучше применим для сетей с удаленными абонентами + лучше помехозащищен.
|
|
|
|
|
Jun 2 2008, 17:26
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(nelord @ Jun 2 2008, 19:20)  Разумеется, что можно использовать любой I/O вывод, вопрос был относительно поддержки физической коммутации этих выводом с разъемом DB-9M на плате STK500, в документации для указанной коммутации есть только "RS232 SPARE", то есть TxD/RxD + GND Дык в чем вопрос? Подведите требуемые линии к разъему. Всяко проще чем переходить к совсем другим платформам. Цитата Также вопрос: почему RS-485 лучше, чем RS-232, как я понял почитав по следующим ссылкам: он отличается только в передаче по дифференциальной паре, то есть лучше применим для сетей с удаленными абонентами + лучше помехозащищен. 1. 2.5км дальность сегмента. 2. можно подключать до 32-х устройств к одной шине из двух проводов. Он не лучше применим, он создан для сетевых решений, в то время как 232-й это соединение точка-точка и к сетевым решениям не применим вообще.
|
|
|
|
|
Jun 3 2008, 06:49
|
Участник

Группа: Новичок
Сообщений: 29
Регистрация: 5-11-07
Пользователь №: 32 068

|
Цитата(defunct @ Jun 2 2008, 21:26)  ... 232-й это соединение точка-точка и к сетевым решениям не применим вообще. Согласен, что соединение - точка-точка, что же мешает соединить всех абонентов следующим образом: TxD(n-1)-RxD(n), n=1, ... N-1; TxD(N-1)-RxD(0). Организовав таким образом кольцо связями точка-точка. Сейчас у меня остался вопрос, как организовать доступ к каналу, если не обходимо поддерживать горячее подключение. Поясню - имеется активный монитор (при чем как отдавать предпочтение одному абоненту не очевидно), возможно что включат новых абонентов, несконфигурированных для работы в сети, или же выключат станцию-монитора. То есть нужно организовать что-то вроде MAC (Media Access Control) канального уровня модели OSI.
|
|
|
|
|
Jun 3 2008, 06:59
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(nelord @ Jun 3 2008, 09:49)  Согласен, что соединение - точка-точка, что же мешает соединить всех абонентов следующим образом: TxD(n-1)-RxD(n), n=1, ... N-1; TxD(N-1)-RxD(0). Организовав таким образом кольцо связями точка-точка. 1. Мазохизм 2. Потеря быстродействия. 3. Потеря надежности. Цитата(nelord @ Jun 3 2008, 09:49)  Сейчас у меня остался вопрос, как организовать доступ к каналу, если не обходимо поддерживать горячее подключение. Поясню - имеется активный монитор (при чем как отдавать предпочтение одному абоненту не очевидно), возможно что включат новых абонентов, несконфигурированных для работы в сети, или же выключат станцию-монитора. То есть нужно организовать что-то вроде MAC (Media Access Control) канального уровня модели OSI. Сессия скоро, что, MAC в задании записан? Даже если записан, пишем, что объединяем этот уровень со следующим и вводим адресацию на перемычках. Хочешь подключиться - сконфигурируй перемычки.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Jun 3 2008, 08:51
|
Участник

Группа: Новичок
Сообщений: 29
Регистрация: 5-11-07
Пользователь №: 32 068

|
Цитата(Dog Pawlowa @ Jun 3 2008, 10:59)  MAC в задании записан? Нет, MAC я просто привел для примера. Вопрос относительно MAC был связан с тем, что как организовать доступ к каналу. Была мысль ввести дополнительную линию занят/свободен, но тогда один абонент может полностью занять канал на продолжительное время, если же в передачу вклинится другой абонент, то это может быть воспринято, как нарушение timeout. Адекватно ли будет ввести паузу установки занят/свободен 3х видов: передаю кадр, ждите (минимум); хочу начать передачу (средне); только что передал, если кому канал нужен, занимайте (максимум). При приеме любого передаваемого байта сбрасывать соответствующие таймеры. Таким образом, думаю, что пакет будет полностью передан без вклиниваний других станций и передающая станция не займет весь канал.
|
|
|
|
|
Jun 3 2008, 09:35
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(nelord @ Jun 3 2008, 11:51)  ... Адекватно ли будет ввести паузу установки занят/свободен 3х видов: ... Куда, простите, Вы собираетесь вводить эту паузу? Есть два основных варианта - 1) логика Ethernet (все слушают и пытаются вклиниться, если коллизия произошла, повтор по правилам) 2) организация сети Master-Slaves - коллизии исключаются, но Мастер должен опрашивать всех. ну и там разные еще токен ринги на любителей извращений. Хотите придумать что-то свое?
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Jun 3 2008, 10:13
|
Участник

Группа: Новичок
Сообщений: 29
Регистрация: 5-11-07
Пользователь №: 32 068

|
Цитата(Dog Pawlowa @ Jun 3 2008, 13:35)  Куда, простите, Вы собираетесь вводить эту паузу? Хотите придумать что-то свое? Хочу ввести дополнительную линию: свободен или занят канал (busy). При доступе к этой линии будет использоваться задержка 3х видов (задержка после приема последнего байта информации или сброса счетчиков). В принципе это аналог Ethernet, только прослушивается перед выходом в сеть не канал передачи, а линия busy. Если кто-то начал передавать данные, то он должен передать все без вмешательства в передачу других абонентов (то есть минимальная задержка установки линии busy). Если канал свободен - то его может захватить любой абонент (средняя задержка установки линии busy). Если абонент только что передал данные - то он ждет перед отправкой новых данных время, большее, чем в предыдущем случае (больше средней задержки).
|
|
|
|
|
Jun 3 2008, 10:46
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(nelord @ Jun 3 2008, 13:13)  Хочу ввести дополнительную линию: свободен или занят канал (busy). При доступе к этой линии будет использоваться задержка 3х видов (задержка после приема последнего байта информации или сброса счетчиков). В принципе это аналог Ethernet, только прослушивается перед выходом в сеть не канал передачи, а линия busy. Послушайте. Тысячи людей, поумнее чем Вы и я, во всем мире, лет сорок уже, работали над созданием локальных сетей. И кое-что придумали. И тут приходите ВЫ! В Вашей идее с ходу видны элементарные логические дыры. 1) Например, двум узлам есть передавать, они дожидаются, пока освободится канал. И оба одновременно занимают его! И оба начинают передавать. А уж при более подробном рассмотрении дыр найдется гораздо больше. 2) Каким приемопередатчиком Вы будете формировать сигнал Busy? Что-то уникальное закажете? Если препод лох, то он, конечно, проглотит. Дерзайте.
--------------------
Уходя, оставьте свет...
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|