|
Организация сетевого обмена на 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.: также было высказано "требование-пожелание" - программы должны быть написаны на ассемблере (это несколько огорчило...  ).
|
|
|
|
|
 |
Ответов
(15 - 29)
|
Jun 3 2008, 11:11
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(Kuzmi4 @ Jun 3 2008, 13:56)  2 Dog Pawlowa - с его проводом занятости просто надо чтоб дЫвайсы рандомное кол-во времени ждали(на таймер чтоли какой нить повесить или чтото такого), но это дополнительные провода , своя логика, есчё какие либо качели непредвиденные... Так то-то и оно. Если по коллизии запускать случайный таймер, то на зачем тогда специальный сигнал? Уж проще тогда маркером делить время. Короче, не изучено все, что накопило человечество. Даже книжки не прочитаны. Но как 1/4 доцента думаю - а может и лучше предложить что-то ошибочное, чем скачать стандартное
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Jun 3 2008, 11:35
|
Участник

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

|
Цитата(Kuzmi4 @ Jun 3 2008, 14:56)  2 nelord - зачем вам заново изобретать велосипед ? Хотел как проще, а получилось ли... не знаю. Да, при возникновении коллизий аля Ethernet - думал, что их CRC16 отловит. Цитата(Kuzmi4 @ Jun 3 2008, 14:56)  2 nelord - зачем вам заново изобретать велосипед ? Хотел как проще, а получилось ли... не знаю. Да, при возникновении коллизий аля Ethernet - думал, что их CRC16 отловит.
|
|
|
|
|
Jun 3 2008, 11:35
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(Dog Pawlowa @ Jun 3 2008, 14:46)  Послушайте. Тысячи людей, поумнее чем Вы и я, во всем мире, лет сорок уже, работали над созданием локальных сетей. И кое-что придумали. Например CAN, где проблеммы мультимастерности решены способом очень похожим на то, что предложил 'nelord'. 2 'nelord'. Если вам эта тема действительно интересна. В смысле не как курсач сдать, а как хобби что-ли, то рекомендую сделать следующее: использовать вместо приёмопередатчиков RS485 приёмопередатчики CAN (или LIN). У них есть рецессивный и доминантный уровень, и если 100 передатчиков передают рецессивный (1), а один доминантный уровень (0) на линии будет доминантный уровень (0). И если передатчик будет слушать свою передачу, то он сможет распознать коллизию (в отличие от использования приёмопередатчиков RS485). В это случае линия BUSY не будет нужна. А вообще почитайте и про CAN и про LIN. Я сделал мультимастерную сеть на базе USART с приёмопередатчиками CAN - всё замечательно работало. По крайней мере гораздо эффективнее MODBAS. Единственный недостаток - нестандартность.
|
|
|
|
|
Jun 3 2008, 12:01
|
Участник

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

|
Цитата(Kuzmi4 @ Jun 3 2008, 14:56)  2 nelord - зачем вам заново изобретать велосипед ? Хотел как проще, а получилось ли... не знаю. Да, при возникновении коллизий аля Ethernet - думал, что их CRC16 отловит.
|
|
|
|
|
Jun 3 2008, 12:13
|

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

|
Цитата(nelord @ Jun 3 2008, 15:01)  Хотел как проще, а получилось ли... не знаю. Да, при возникновении коллизий аля Ethernet - думал, что их CRC16 отловит. Отловит, но уже поздно - несколько фреймов может быть потеряно и нескольким девайсам надо делать перепосылку, тобиш "разрулить" ситуацию по CRC16 - сложно и накладно для линии. В Ethernet'е используется преамбула фрейма скважностью 2. В момент посылки преамбулы прослушивается линия, и если скважность импульсов в линии будет отличаться от 2 - посылка фрейма откладывается, т.е. конфликт обнаруживается до отправки фрейма, а не после как в случае с CRC.
|
|
|
|
|
Jun 3 2008, 12:20
|
Участник

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

|
Спасибо большое за помощь. С этим я разобрался, но на досуге надо будет почитать про Can и подобное ему. PS: Описанное ранее я попытался сконструировать основываясь на методах борьбы с перегрузкой буферов портов в коммутаторах и технологией CSMA/CA. PPS: был бы крайне признателен, если бы кто-нибудь поделился материалом по подключению цифро-алфавитного LCD индикатора, а именно программой на ассемблере. Понимаю, что это не пишут на ассемблере, на С уже есть все готовое, однако в задании именно АССЕМБЛЕР. 2 defunct, спасибо, это я полагал тоже учесть, если посмотреть ранний пост. Цитата(nelord @ Jun 2 2008, 17:20)  Полагаю использовать преамбулу в 2 байта + 2 байта, определяющие тип передачи, +данные+ 2 байта CRC16.
|
|
|
|
|
Jun 3 2008, 12:45
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(defunct @ Jun 3 2008, 16:00)  Нисколько непохожи. В CAN нет никаких доп линий "занятности" канала. Конфликт разрешается "отвалом" группы мастеров-лузеров с рецессивным уровнем сигнала. Т.о. возможна ситуация когда опеределенный мастер вообще никогда не получит шанса "пообщаться". Идея CAN'a - это I2C с PHY пригодным для подключения на большие расстояния. Я имел ввиду, что похоже не по физической реализации, а по методологии. Конечно в CAN нет никакой доп. линии, но имеется РАВНОПРАВНАЯ мультимастерность (в отличие от I2C с его адресами устройств). А ситуация, когда мастер не сможет пообщатся в CAN невозможна (при физической исправности). Возможна только ситуация, когда определённый мастер не сможет никогда отправить сообщение с НИЗКИМ приоритетом. Но никто не мешает ему в случае таймаута этот приоритет поднять - сеть-то совершенно равноправная. 2 'Dog Pawlowa'. Вообще то это я предложил 'nelord' использовать драйвера CAN. Примерно год назад это обсуждали. Это первая моя тема на этом форуме была.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|