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

Организация сетевого обмена на AT90S8515

Здравствуйте!

Подскажите как лучше реализовать сетевой обмен между МК, если имеется следующие требования:

- обмен по последовательному каналу (планирую использовать 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.: также было высказано "требование-пожелание" - программы должны быть написаны на ассемблере (это несколько огорчило... :smile3009: ).

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


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

Здравствуйте!

Подскажите как лучше реализовать сетевой обмен между МК, если имеется следующие требования:

...

MAX232 (как и RS232 вообще) не предназначена для построения сетей. ИМХО Ваш выбор - RS485 и что-то типа max483.

AT90S8515 - странный выбор,контроллер не производится лет 5.

Про Протеус лучше забыть, в нем хорошо только игрушки отлаживать.

Линий кроме RXD и TXD у AVR нет. Если нужны следует выбрать другой контроллер, например AT91SAM7S128.

Протоколов много стандартных - MODBUS, WAKE, или на их основе изобретайте свое.

Курсовик? :)

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


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

Именно, курсовик. Свой уже сдал, попросили сделать за небольшую премию)).

 

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

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


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

Линий кроме RXD и TXD у AVR нет. Если нужны следует выбрать другой контроллер, например AT91SAM7S128.

Зачем? Берем любые GPIO и называем их так как надо.

 

Какой из предложенных протоколов лучше выбрать: MODBUS или WAKE?

Я бы выбрал modbus.

 

следует ли на этой плате ставить дополнительную ИМС памяти (для приемного буфера), если да, то какого объема лучше?

Я бы ставил 8-32kB (корпуса/сигналы одинаковые), но "не для приемного буфера", а для комфортной работы. Т.е. подключить эту память по шине и использовать также как и внутреннюю - если надо под стек, под переменные и проч.

Чип m162 или m128 (с внешней шиной и с JTAG'ом для отладки).

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


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

Зачем? Берем любые 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, как я понял почитав по следующим ссылкам:

он отличается только в передаче по дифференциальной паре, то есть лучше применим для сетей с удаленными абонентами + лучше помехозащищен.

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


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

Разумеется, что можно использовать любой I/O вывод, вопрос был относительно поддержки физической коммутации этих выводом с разъемом DB-9M на плате STK500, в документации для указанной коммутации есть только "RS232 SPARE", то есть TxD/RxD + GND

Дык в чем вопрос? Подведите требуемые линии к разъему.

Всяко проще чем переходить к совсем другим платформам.

 

Также вопрос: почему RS-485 лучше, чем RS-232, как я понял почитав по следующим ссылкам:

он отличается только в передаче по дифференциальной паре, то есть лучше применим для сетей с удаленными абонентами + лучше помехозащищен.

1. 2.5км дальность сегмента.

2. можно подключать до 32-х устройств к одной шине из двух проводов.

 

Он не лучше применим, он создан для сетевых решений, в то время как 232-й это соединение точка-точка и к сетевым решениям не применим вообще.

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


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

... 232-й это соединение точка-точка и к сетевым решениям не применим вообще.

 

Согласен, что соединение - точка-точка, что же мешает соединить всех абонентов следующим образом: TxD(n-1)-RxD(n), n=1, ... N-1; TxD(N-1)-RxD(0). Организовав таким образом кольцо связями точка-точка.

 

Сейчас у меня остался вопрос, как организовать доступ к каналу, если не обходимо поддерживать горячее подключение. Поясню - имеется активный монитор (при чем как отдавать предпочтение одному абоненту не очевидно), возможно что включат новых абонентов, несконфигурированных для работы в сети, или же выключат станцию-монитора. То есть нужно организовать что-то вроде MAC (Media Access Control) канального уровня модели OSI.

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


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

Согласен, что соединение - точка-точка, что же мешает соединить всех абонентов следующим образом: TxD(n-1)-RxD(n), n=1, ... N-1; TxD(N-1)-RxD(0). Организовав таким образом кольцо связями точка-точка.

1. Мазохизм 2. Потеря быстродействия. 3. Потеря надежности.

 

Сейчас у меня остался вопрос, как организовать доступ к каналу, если не обходимо поддерживать горячее подключение. Поясню - имеется активный монитор (при чем как отдавать предпочтение одному абоненту не очевидно), возможно что включат новых абонентов, несконфигурированных для работы в сети, или же выключат станцию-монитора. То есть нужно организовать что-то вроде MAC (Media Access Control) канального уровня модели OSI.

Сессия скоро, что, MAC в задании записан?

Даже если записан, пишем, что объединяем этот уровень со следующим и вводим адресацию на перемычках. Хочешь подключиться - сконфигурируй перемычки.

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


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

Согласен, что соединение - точка-точка, что же мешает соединить всех абонентов следующим образом: TxD(n-1)-RxD(n), n=1, ... N-1; TxD(N-1)-RxD(0). Организовав таким образом кольцо связями точка-точка.

 

Кольцо прекрасно делается на RS485 c применением репитеров. При этом все устройства слушают мастера одновременно. Реализовыется любой одномастерный протокол, MODBUS например. А ваш вариант - кольцо с односторонним движением информации, со всеми вытекающими. Я бы не называл это сетью вообще.

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


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

MAC в задании записан?

 

Нет, MAC я просто привел для примера. Вопрос относительно MAC был связан с тем, что как организовать доступ к каналу. Была мысль ввести дополнительную линию занят/свободен, но тогда один абонент может полностью занять канал на продолжительное время, если же в передачу вклинится другой абонент, то это может быть воспринято, как нарушение timeout.

Адекватно ли будет ввести паузу установки занят/свободен 3х видов: передаю кадр, ждите (минимум); хочу начать передачу (средне); только что передал, если кому канал нужен, занимайте (максимум). При приеме любого передаваемого байта сбрасывать соответствующие таймеры. Таким образом, думаю, что пакет будет полностью передан без вклиниваний других станций и передающая станция не займет весь канал.

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


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

...

Адекватно ли будет ввести паузу установки занят/свободен 3х видов:

...

Куда, простите, Вы собираетесь вводить эту паузу?

 

Есть два основных варианта -

1) логика Ethernet (все слушают и пытаются вклиниться, если коллизия произошла, повтор по правилам)

2) организация сети Master-Slaves - коллизии исключаются, но Мастер должен опрашивать всех.

ну и там разные еще токен ринги на любителей извращений.

 

Хотите придумать что-то свое?

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


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

Куда, простите, Вы собираетесь вводить эту паузу?

Хотите придумать что-то свое?

 

Хочу ввести дополнительную линию: свободен или занят канал (busy).

При доступе к этой линии будет использоваться задержка 3х видов (задержка после приема последнего байта информации или сброса счетчиков). В принципе это аналог Ethernet, только прослушивается перед выходом в сеть не канал передачи, а линия busy. Если кто-то начал передавать данные, то он должен передать все без вмешательства в передачу других абонентов (то есть минимальная задержка установки линии busy). Если канал свободен - то его может захватить любой абонент (средняя задержка установки линии busy). Если абонент только что передал данные - то он ждет перед отправкой новых данных время, большее, чем в предыдущем случае (больше средней задержки).

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


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

Хочу ввести дополнительную линию: свободен или занят канал (busy).

При доступе к этой линии будет использоваться задержка 3х видов (задержка после приема последнего байта информации или сброса счетчиков). В принципе это аналог Ethernet, только прослушивается перед выходом в сеть не канал передачи, а линия busy.

Послушайте.

Тысячи людей, поумнее чем Вы и я, во всем мире, лет сорок уже, работали над созданием локальных сетей. И кое-что придумали. И тут приходите ВЫ! :07:

В Вашей идее с ходу видны элементарные логические дыры.

1) Например, двум узлам есть передавать, они дожидаются, пока освободится канал. И оба одновременно занимают его! И оба начинают передавать. А уж при более подробном рассмотрении дыр найдется гораздо больше.

2) Каким приемопередатчиком Вы будете формировать сигнал Busy? Что-то уникальное закажете?

 

Если препод лох, то он, конечно, проглотит. Дерзайте.

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


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

2 Dog Pawlowa - с его проводом занятости просто надо чтоб дЫвайсы рандомное кол-во времени ждали(на таймер чтоли какой нить повесить или чтото такого), но это дополнительные провода , своя логика, есчё какие либо качели непредвиденные...

 

2 nelord - зачем вам заново изобретать велосипед ?

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


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

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...