реклама на сайте
подробности

 
 
7 страниц V  « < 2 3 4 5 6 > »   
Reply to this topicStart new topic
> Работа с ENC28J60
dimka76
сообщение Mar 12 2009, 08:23
Сообщение #46


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(WHALE @ Mar 11 2009, 19:18) *
у меня сейчас практически ваша ситуация.В качестве основы использовал стекGuido Socher ,переточенный на работу по прерываниям.Выход прерываний у ENC-шки устанавливаются в 0 и выйти из этого положения никак не удается.Даташит на эту тему вроде курил,ничего не нашел.Виснет стабильно,если в нее фигачить любыми не отфильтрованными пакетми(ARP,ICMP,UDP) c интевалом менее 5ms.Кстати,зачем "махать" флагом разрешения прерывания меги,я не понял.Чип вам говорит,что у него пакет в буфере лежит,а вы его отказываетесь обрабатывать?ИМХО,так еще хуже.Тут похоже,что наоборот не успеваю забирать.Да,SPI у меня на максимуме(4MHz при 3V).Сейчас проблему решил лобовым способом-по таймеру периодически поллю вход прерывания,и если он в 0 больше определенного интевала,то ENC получает ломом по балде-хард-ресет и инит по новой.Но это,мягко говоря неспортивно...
Вам удалось как-то решить эту проблему?


У меня такая же фигня.
Только висяк появляется в момент включения питания, когда комп видя что подключился кабель начинает ENC посылками забрасывать (секунд 10-20 бросает и успокаивается), вот в процессе этого ENC и виснет.
Выхожу из положения так же. Далее все стабильно, правда я работаю в режиме медленного диалога с компом )


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
WHALE
сообщение Mar 12 2009, 13:18
Сообщение #47


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



я рад,что нас уже трое biggrin.gif Можно выпить за погибель микрочипа cranky.gif
Если работать в режиме медленного диалога с компом,то не вещается вообще(по крайней мере 8 часов точно.Я и обнаружил-то зависание обмена только на живой сети вначале.У нас тут типичный пионернет,и временами прилетает с десяток ARP-запросов с интервалом,если верить снифферу,равным 0.И все-девайс отвалился.Стал экспериментировать напрямую и выяснил-виснет,если приходит несколько все-равно каких пакетов,вызывающих прерывание с интервалом меньше 5ms.
По совету rolleyes.gif zltigo "медленно и печально" просмотрел весь софт приема.Слегка убыстрил алгоритм,теперь вешается если пакеты слать с интервалом менее 3ms.Даташит читал,эррату использовал.У меня пятая ревизия чипа.
Пока отложу,на той неделе продолжу игры дальше...


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 12 2009, 16:01
Сообщение #48


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(WHALE @ Mar 12 2009, 16:18) *
Слегка убыстрил алгоритм,теперь вешается если пакеты слать с интервалом менее 3ms.

Ну для начала пакеты банально буферизируются чипом, если, конечно на это память есть. Это у Вас постоянный поток пакетов? Какого размера? Или достаточно, как и у коллег уже двух подряд?
У меня гарантированно при запуске системы вываливаются в сеть до нескольких десятков бродкастовских пакетов стык в стык. Их вынуждено глотают том числе и железяки на ENC - проблем нет. Короткие (60-300 байт)пакеты сыпятся уже конкретно на ENC в совершенно произвольном темпе в том числе и, как минимум, попарно, но средняя нагрузка гарантированно не приводит к перегрузке приемного буфера ENC. В экстремально-аварийных случаях на переходных режимах в сети прересылается с бродкастовским MAC до 4 мегабайт пакетами по килобайту с гарантированными паузами между пакетами в 2ms (но при этом могут и другие пакеты проскакивать изрежка). Довольно много свитчей такого потока broadcast просто не выдерживают sad.gif - теряют пачками по 128-256 пакетов. ENC выживает без зависаний. В процессе написания софта проводились и "лабораторные работы" над ENC c иммитацией разнообразных нагрузок - с прерываниями проблем нет.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 12 2009, 16:32
Сообщение #49


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Довольно много свитчей такого потока broadcast просто не выдерживают - теряют пачками по 128-256 пакетов.


Есть мнение, что это срабатывает Broadcast Storm Control. Например, классический представитель RTL8309 имеет данную функцию (кстати, она почти во всех свичах есть, кроме самых старых, которых уже выбросили давно):

Цитата
8.3.10. Broadcast Storm Control
After 64 consecutive broadcast packets (DID=FFFF-FFFF-FFFF) have been received by a particular port, any following
incoming broadcast packets will be discarded by this port for approximately 800ms. Any non-broadcast packet can reset the time window and broadcast counter such that the scheme restarts.
Note: Trigger condition is consecutive 64 DID = FFFF-FFFF-FFFF packets. Release condition: receive non-broadcast packet on or after 800ms.


Обычно, разрешение/запрещение данной функции выполняется bootstrap-ножкой (помимо EEPROM и других способов) и производители свичей подключают их так, чтобы получить включенный по умолчанию Broadcast Storm Control.

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

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


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 12 2009, 16:54
Сообщение #50


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Rst7 @ Mar 12 2009, 19:32) *
Но в общем случае, тут проблема не в каких-то глюках ядер свичей, а именно в выбранных производителем режимах работы по умолчанию.

Похоже, ибо уж больно ровные пачки пакетов теряются - обычно ровно 128, но ситуевина такая, что ложатся простентькие пластмасски на 5-8 портов. Солидные - живут, посему особых хлопот это не доставляет. Потроха не исследовал - не до этого. Есть два варианта обхода эффекта, нежели таки попадется на обьекте....


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 12 2009, 17:06
Сообщение #51


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
что ложатся простентькие пластмасски на 5-8 портов. Солидные - живут


Если солидные - это управляемые свичи, то там уж как руками наконфигурили. И, кстати, всегда переконфигурить можно. А мыльницы - они, в основном, все шторм дропают по умолчанию. Там либо резистор бутстрепа перепаивать, либо припаивать EEPROM'ку с необходимой конфигурацией. Лично я припаиванием епромки пользуюсь без зазрения совести, конечно, не для банального отключения штормконтрола wink.gif


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 12 2009, 17:37
Сообщение #52


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Rst7 @ Mar 12 2009, 20:06) *
Если солидные - это управляемые свичи, то там уж как руками наконфигурили.

Ну не настолько. Обычно smile.gif достаточным smile.gif является наличие просто металлического корпуса smile.gif smile.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 12 2009, 17:52
Сообщение #53


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
является наличие просто металлического корпуса


Ну как сказать. Вот у меня два Векторовских свича. Оба в железяке, один на вышеупомянутом реалтеке, другой на инфинеоновском ADM6999. Первый забутсреплен на включение штормконтрола. Второй, на ADM, не имеет бутстрепного пина (только в EEPROM включается) и по умолчанию выключен.

А что, в Вашем проекте было так необходимо пролить такой объем броадкаста? Или тонкости поведения свичей выяснились, когда уже было поздно что-либо менять? wink.gif


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 12 2009, 17:59
Сообщение #54


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Rst7 @ Mar 12 2009, 20:52) *
А что, в Вашем проекте было так необходимо пролить такой объем броадкаста?

Удобно было и есть, для ввода в работу резерва железно-тупо кидаться бродкастом, потом уже после разбираться с конфигурацией и подниматься.
Цитата
ADM6999

С ADM самодельные железки пользуем.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 12 2009, 18:07
Сообщение #55


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Удобно было и есть, для ввода в работу резерва железно-тупо кидаться бродкастом


Надо было мультикаст зашарашить smile.gif

Цитата
С ADM самодельные железки пользуем.


Которые себе такого не позволяют по умолчанию smile.gif Вопросов больше не имею smile.gif


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 12 2009, 18:10
Сообщение #56


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Rst7 @ Mar 12 2009, 21:07) *
Надо было мультикаст зашарашить smile.gif

Неудобно sad.gif, но в качестве второго варианта обхода возможной проблемы так и сделано.
Цитата
Которые себе такого не позволяют по умолчанию

Не для этой задачи, а для TDM<->Ethernet


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
WHALE
сообщение Mar 17 2009, 09:44
Сообщение #57


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Итак,гуру пообщались о своем о "гуровском",теперь можно и нам простым смертным о наших делишках покалякать.
Вроде победил я этого ежика,2 часа сыплю в него чем не попадя, зависаний нет.
Должен сразу извиниться перед zhevak,пришлось все-таки "махать"флагом разрешения прерывания Меги.Это по времени и стабильности работы оказалось выгодней,чем как рекомендует мелкочип,при входе в обработчик запрещать выдачу прерываний на пин INT ENC,а при выходе разрешать.Больно медленно-4 транзакции SPI на установку банка регистов и 2 на сброс EIE.INTIE.И вдобавок временами все-таки висло.
У меня сделано следующим образом-вход внешнего прерывания меги настроен на работу по низкому уровню,а не как рекомендует мелкочип по падающему.В обработчике запрещаю прерывания и устанавливаю флаг наличия данных в буфере ENC.SPI тоже работает по прерываниям,т.к поллинг SPI с его многочисленными while(!(SPSR&(1<<SPIF))) на 8Мгц Меги жрет ну очень много времени.
В главном цикле подбираю флаг и запускаю процедуру чтения буфера.Если нет ошибок-анализ,чего там прилетело.Если что-то нужное(ARP,пинг или запрос сервера)-отвечаю.Если нет никаких операций с ENC-разрешаю внешнее прерывание от ENC.Если пин стоит в 0,значит есть еще пакеты и все повторяется.Если пакеты летят быстрее,чем успеваем их забирать,то при достижении EPKTCNT==255 ENC начинает их дропать. Как-то так...
А вообще конечно медленный чип,чтобы забрать пакет и подготовиться к приему следующего надо сделать кучу телодвижений.И даташит полное г-но или рассчитан на телепатов,весьма мутно изложено и на все про все на все режимы работы с пяток примеров в несколько строк на псевдокоде.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 17 2009, 10:07
Сообщение #58


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



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

Типа, например такого (писано несколько лет назад для SLIP, но идея должна быть ясна)
CODE
__task IPreciver(void)
{
INT_TASK_HEADER(iprx_task,8,40);
char ip_pos;
char ip_hlen;
char prtc;
char c;
unsigned int ip_len;
unsigned long rip;

//Ожидаем начало пакета
do
{
TRM_CHAR=_sliprx();
}
while(!EOP);
L_SLIP_START:
ip_pos=0;
ip_hlen=0;
do
{
c=_sliprx();
if (EOP) goto L_SLIP_START;
switch(ip_pos)
{
case 0: ip_hlen=c<<2&0x3F; break;
case 7: if © goto L_SLIP_END; break;
case 2: ip_len=c<<8; break;
case 3: ip_len|=c; break;
case 9: prtc=c; break;
case 12: rip=(unsigned long)c<<24; break;
case 13: rip|=(unsigned long)c<<16; break;
case 14: rip|=(unsigned long)c<<8; break;
case 15: rip|=c; break;
case 16: if (c!=MIP0) goto L_SLIP_END; break;
case 17: if (c!=MIP1) goto L_SLIP_END; break;
case 18: if (c!=MIP2) goto L_SLIP_END; break;
case 19: if (c!=MIP3) goto L_SLIP_END; break;
}
ip_pos++;
}
while(ip_pos!=ip_hlen);
if (testrxcrc()) goto L_SLIP_END; //Не совпала контрольная сумма
ip_len-=ip_hlen; //Длинна IP данных
switch(prtc)
{
case 1:
ICMPrx_jmp(rip,ip_len);
break;
case 6:
TCPrx_jmp(rip,ip_len);
break;
}
L_SLIP_END:
do
{
_sliprx();
}
while(!EOP);
goto L_SLIP_START;

}


Кстати, _sliprx сразу и контрольную сумму IP считает на ходу.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
WHALE
сообщение Mar 17 2009, 11:47
Сообщение #59


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Идея понятна.Действительно,можно будет время приема сократить прилично-избавиться от внешней функции разбора пакета.Спасибо.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 17 2009, 12:25
Сообщение #60


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Если пакеты летят быстрее,чем успеваем их забирать,то при достижении EPKTCNT==255 ENC начинает их дропать


Кстати, я бы на Вашем месте озадачился правильной обработкой Flow-Control'а.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post

7 страниц V  « < 2 3 4 5 6 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th June 2025 - 05:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.01512 секунд с 7
ELECTRONIX ©2004-2016