Полная версия этой страницы:
Работа с ENC28J60
zorromen
May 15 2007, 04:52
Привет усем ... имею эту микруху ... нада привинтить к 32 меге ... вот тока перед тем как чтото привинтить нада принципиальную схему составить ... и сразу пояилось несколько вопросов ...
1) Можно ли не тактировать мегу от ENC ... типа 16 мегагерц на мегу... и чтобы усе работало ... или усеже надо брать сигнал от нее и тактировать мегу ...
2) Там нада какойта ферит нада ... че это ваще ...
вот погляди схемку модуля от олимекс.
http://www.olimex.com/dev/images/enc28j60-sch.gifТактировать модуль по любому нада. А вот мегу кажись не обязательно тактировать от тогоже кварца.
zorromen
May 15 2007, 06:37
Я имел ввиду надо ли тактировать мегу от ноги CLKOUT ENC ? ...
и еще даже на приведенной вами картинке есть индуктивность L1 ... вот скока надо его взять номинал ...
zltigo
May 15 2007, 06:53
Цитата(zorromen @ May 15 2007, 09:37)

Я имел ввиду надо ли тактировать мегу от ноги CLKOUT ENC ? ...
Ну если хочется, то можно брать клоки контроллера с нее. Естественно это абсолютно не обязательно

По умолчанию, по включению питания там клоки (кажется 1/4) есть.
zorromen
May 15 2007, 07:20
Не ... я просто имею ввиду что если мегу клокать кварцем на 16 мегагерц ... то будет ли нормально он работать с микросхемой? ... то шота краем уха слышал что бля нормальной работы нужно клокать с микросхемы ... вот и спрашиваю ...
zltigo
May 15 2007, 08:56
Цитата(zorromen @ May 15 2007, 10:20)

что бля нормальной работы нужно клокать с микросхемы ..
Нет.
zorromen
May 15 2007, 10:02
Фу ну и очепятка))
Тогда хорошо ... будем питать мегу 5 вольтами ...
А как насчет катушки ... это по идее это ФНЧ ... какой номинал брать нужно, что по току 100 мА понял ...
Сергей Борщ
May 15 2007, 10:44
Цитата(zorromen @ May 15 2007, 13:02)

Тогда хорошо ... будем питать мегу 5 вольтами ...
А разве это мешает тактированию?
Цитата(zorromen @ May 15 2007, 13:02)

А как насчет катушки ... это по идее это ФНЧ ... какой номинал брать нужно, что по току 100 мА понял ...
Это скорее всего не катушка как таковая а ferrite bead (для единичного устройства снимите с дохлого CD-ROM или материнки, по виду конденсатор, но черный и подписан L), а если серия - то у поставщиков он так и называется ferrite bead.
defunct
May 15 2007, 12:42
Цитата
2) Там нада какойта ферит нада ... че это ваще ...
Должно работать и без него.
При питании меги от 5в, а ENC от 3.3в могут возникнуть проблемы с уровнями сигналов SPI , как у меги - она может не понять сигнал с малым размахом от ENC, так и у ENC - если у нее входы не 5v-tolerant, может перегреваться и/или сгореть.
anpilog
May 17 2007, 04:45
Цитата(GDI @ May 17 2007, 11:25)

При питании меги от 5в, а ENC от 3.3в могут возникнуть проблемы с уровнями сигналов SPI , как у меги - она может не понять сигнал с малым размахом от ENC, так и у ENC - если у нее входы не 5v-tolerant, может перегреваться и/или сгореть.
Кхмм...
Можно сделать так:
- от меги к ENC (5В->3В) поставить банальный резистивный делитель
- от ENC к меге: мега прекрасно понимает 3В как логическую единицу 8)
Цитата
от ENC к меге: мега прекрасно понимает 3В как логическую единицу 8)
В даташите на мега32 написано минимально Vin лог "1" = 0,6Vcc = 0.6*5 = 3
В даташите на ENC минимально Vout лог "1" = Vdd-0,7 = 3.3-0.7 = 2.6
т.е. судя по даташитам - гарантированно не поймет, реально может и заработает, а может нет.
по входу ENC совместима с 5в сигналами - делители не нужны, а вот на SO надо уровень поднимать например через 74HC1G125, запитав его от 5в или через любой другой логический элемент который понимает на входе ТТЛ уровни, а на выходе дает КМОП уровни с питанием этого элемента от 5в.
zorromen
May 17 2007, 11:47
Да спасибо ... будет мне урок ... то ваще разленился, несмотрю даташиты ваше ...

Тока в даташите на Мегу 32 если посмотреть, то на 5 вольтах читает 1 при менее 2 вольт ... так что должно работать без преобразователей ...
Только тут есть одно замечание..0,6Vcc - это минимальное гарантированное напряжение при котором входной уровень гарантированно определится как лог "1", все остальное может меняться от партии и атмел знает чего еще

в серию я бы такое не пустил.
goodwin
May 17 2007, 22:27
Не забудьте глянуть портянку errata на ENC28J60.
Что-то типа : частота клока SPI должна быть 8 МГц. Если меньше, то у меги и ENC28J60 частоты должны быть синхронизированы.
zorromen
May 18 2007, 05:18
Ну 8 мегагерц можна получить ... на 16 мегагерц меге

... а если питать мегу от 3 вольт то клок брать с микрухи ...
zltigo
May 18 2007, 06:44
Цитата(goodwin @ May 18 2007, 01:27)

Не забудьте глянуть портянку errata на ENC28J60.
Что-то типа : частота клока SPI должна быть 8 МГц. Если меньше, то у меги и ENC28J60 частоты должны быть синхронизированы.
Ну нету там такого безобразия

.
Вообще, польза от синхронности работы хоста и ENC28J60 сомнительна, поскольку синфазность для SPI и тактовой по любому не гарантируется.
goodwin
May 18 2007, 15:32
Цитата(zltigo @ May 18 2007, 09:44)

Ну нету там такого безобразия

.
Вообще, польза от синхронности работы хоста и ENC28J60 сомнительна, поскольку синфазность для SPI и тактовой по любому не гарантируется.
Это как нет?
ENC28J60 Rev. B1 Silicon Errata
первым пунктом:
1. Module: MAC Interface
When the SPI clock from the host microcontroller
is run at frequencies of less than 8 MHz, reading or
writing to the MAC registers may be unreliable.
Work around
Run SPI at frequencies of at least 8 MHz, or use
the same clock source for both ENC28J60 and the
host controller for synchronization.
И пунктов аж 14...
zltigo
May 18 2007, 17:24
Цитата(goodwin @ May 18 2007, 18:32)

Это как нет?
ENC28J60 Rev. B1 Silicon Errata
B1 силикон давно уже почил в бозе. Они где-то за считанные месяцы докатились до B5.
Errata следует обновить

.
В последних исходниках уже встретилось упонинание B6.
zorromen
May 25 2007, 18:21
Вот сварганил плату в иголе ... т.к. выходное напряжение на SO недотягивает до напряжения срабатывания 1 меги на 5 вольт ... то стоить буфер 244 чтобы поднимал до 5 вольт ... короче посмотрите смотехнические ошибки ...
Amper25
May 25 2007, 19:57
Ну незнаю как схема, разбираться надо.
Но плата - просто жесть
zorromen
May 26 2007, 04:26
У спасибо что оценили плату ... я её руками раз 5 перерисовывал ... пока не получилось ... стабилизатор сильно большой ТО-220 ... другого небыло корпуса DPAK искал небыло ...
Я б может тоже оценил, если бы у меня Игл был
zhevak
Jun 27 2007, 12:38
Люди, а здесь есть кто для приема пакетов пользует прерывание, а не полинг флага PKTIF в регистре EIR? Вопрос в следующем -- вы используете прерывание только этого флага или обрабатываете еще и другие флаги?
Я что-то поленился прописывать обработчики TXIRIF и RXERIF (биты TXIRIE и RXERIE не подняты). Наверно, зря. Вобщем-то, мой девайс (mega8 + ENC28J60) работает. И вроде как даже работает длительное время. Как минимум час-два, больше -- не проверял. Но, вот, сегодня я обнаружил один очень неприятный ньюанс: если девайсу слать что-нибудь по UDP и одновременно пингачить его, то ENC-ишка впадает в ступор.
Нагрузка, вроде какбы, не серьезная: UDP -- 60 байт, которые никак не обрабатываются (я уже все поотрубал нахрен! Ничего не осталось!), посылаются примерно 30 раз в секунду; и ICMP -- стандартные 42 байта (из-под Винды, гы-гы! Опять Билл Гейтс виноват!), которые хреначатся раз в секунду.
При такой "нагрузке" девайс работает примерно 1-2 иногда 3 секунды (когда как) и перестает выставлять прерывания. Микроконтроллер, я убедился -- не виснет.
Что-то я не особо догоняю, что делать-то? С одной стороны, совсем не хочется писать расшифровщик прерывании ENC и как-то обрабатывать ошибки (я даже еще не смотрел что там делать-то надо в таких случаях), а с другой -- не соображу, как можно еще вернуть ENC к работе.
Посоветуйте че-нить... Хех! А то, молчание какое-то тут подозрительное нависло. То-ли стругают, понимаш-ли, каждый свой девайс и думают, что выйдут на рынок раньше других и сделают супер-пупер-бизнес, то-ли ENC-сишками вообще мало-кто занимается.
Ау, эмбеддеры!
MSprut
Jun 27 2007, 13:41
Работал с ENC28J60... Ноу камент... Жрет много, куча багов в чипе, последовательный интерфейс пропускную способность режет. Все это конечно мое ИМХО, но я бы советовал перейти на CP2200 от SiLabs. Вещ рульная, параллельный интерфейс, все четко и понятно, обвески минимум. Попробовал и возрадовалсо.
zltigo
Jun 27 2007, 16:11
Цитата(MSprut @ Jun 27 2007, 16:41)

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

Цитата
но я бы советовал перейти на CP2200 от SiLabs. Вещ рульная, параллельный интерфейс, все четко и понятно, обвески минимум
1. Параллельны интерфейс с его дополнительными 16 проводами не есть абсолютный рулез
2. Жестко заданные буфера в 2 и 4K не позволяют радоваться производительности, если только все ресурсы контроллера на обслуживание не бросить. У ENC буфер по крайней мере 8K и его можно делить между приемом и передачей в зависимости от задач. Обвеска практически одинакова, ну а жрать - это точно много жрет.
Цитата(zhevak @ Jun 27 2007, 15:38)

Люди, а здесь есть кто для приема пакетов пользует прерывание, а не полинг флага PKTIF в регистре EIR? Вопрос в следующем -- вы используете прерывание только этого флага или обрабатываете еще и другие флаги?
Я использую только прерывание по приему. По передаче оно бессмысленно без наличия возможности буферизации в контроллере. Ошибки обрабатываются постфактум в процессе приема/передачи.
Работает.
Цитата
... и как-то обрабатывать ошибки (я даже еще не смотрел что там делать-то надо в таких случаях)
А нету у Microchip НИЧЕГО про обработку ошибок
zhevak
Jun 29 2007, 11:36
Все, нафиг!
Забил я на "игру" с флагами разрешения прерываний в регистре INTIE в ENC. Какая-то это темная вещь, то работает, то не работает. Непонятно. Короче, тут бубен нужен. Диаметром 80 см, как минимум. У кого-нибудь, кстати, есть такой девайс? Я, правда, подозреваю, что такое безобразие происходит из-за того что тактовая частота SPI-клоков у меня всего, 3.6 МГц. Может это действительно как-то влияет на ENC-шные мозги? Ведь не зря оне в еррате пишут, что либо >= 8 МГЦ, либо синхронно с ENC-генератором.
Вобщем, сейчас я махаю только флагом внешнего прерывания у меги (регистр GICR) -- разрешить/запретить. Гибкость, конечно же потерялась, но все заработало стабильно. Ху-у!
zltigo
Jun 29 2007, 11:55
Цитата(zhevak @ Jun 29 2007, 14:36)

Забил я на "игру" с флагами разрешения прерываний в регистре INTIE в ENC. Какая-то это темная вещь, то работает, то не работает.
А какого ими вообще 'махать'. Чую, что в системе спроектированной с необходимостью 'махать' и своих проблем достаточно.
Цитата
Я, правда, подозреваю, что такое безобразие происходит из-за того что тактовая частота SPI-клоков у меня всего, 3.6 МГц. Может это действительно как-то влияет на ENC-шные мозги? Ведь не зря оне в еррате пишут, что либо >= 8 МГЦ, либо синхронно с ENC-генератором.
Это для старых B0-B4 а у Вас какой силикон? Причем описанные проблемы относятся далеко не только к регистру прерываний а ко всем.
zhevak
Jun 29 2007, 13:23
Цитата(zltigo @ Jun 29 2007, 17:55)

А какого ими вообще 'махать'. Чую, что в системе спроектированной с необходимостью 'махать' и своих проблем достаточно.
ну-у... типа хватает.

Нужно исполнять парраллельно несколько мелких задач.
Цитата
Это для старых B0-B4 а у Вас какой силикон? Причем описанные проблемы относятся далеко не только к регистру прерываний а ко всем.
ахренегознает! Что принесли, положили на стол, то и спаял. ERVID возвращает 0х02, а физики -- PHID1 и PHID1 -- вообще какую-то чушь гонят. Сверху на корпусе написано 053044Е. Что за код такой -- traceability (44Е)?
Только не надо советовать -- купить нормального таракана. Сам типа знаю. Ты лучше скажи, как в магазине узнать ревизию чипа узнать по трейсэбылыти?
zltigo
Jun 29 2007, 13:41
Цитата(zhevak @ Jun 29 2007, 16:23)

ахренегознает! Что принесли, положили на стол, то и спаял. ERVID возвращает 0х02
Лучше это изделие 2005 года положить в мусорник и припаять тот, который 0х05 возвращает. Проблема только в том, что ~@#$! Микрочип не маркирует ревизию на корпусе. Мне вот тоже приволокли откуда-то партию B4 начала 2006 года. Одно могу сказать, что где-то с 35 недели 2006 года идут B5.
Алексей Непочатов
Jul 26 2007, 07:10
Цитата(zltigo @ Jun 29 2007, 17:41)

Лучше это изделие 2005 года положить в мусорник и припаять тот, который 0х05 возвращает.
При тактировании микроконтроллера непосредственно от ENC, согласовании уровней, использовании последнего Микрочиповского стека и выполнении всех рекомендаций Errata у нас успешно работают все ревизии ENC.
Но правда за год уже обновляли раза три ревизию стека, чтобы от глюков избавиться.
И не факт, что микрочиповцы еще багов в стеке не наловят

Цитата(zorromen @ May 15 2007, 08:52)

2) Там нада какойта ферит нада ... че это ваще ...
Феррит - любой дроссель 0805 типа BLM21PG
zltigo
Jul 27 2007, 07:18
Цитата(Алексей Непочатов @ Jul 26 2007, 10:10)

При тактировании микроконтроллера непосредственно от ENC....
Большое "удобство"

Цитата
использовании последнего Микрочиповского стека....
В котором работа с железом писана по поллингу, левой ногой, практически без обработки ошибок и уж точно без разборок с нештатными ситуациями. Все по принципу - если что контроллер (центральный!) перезагрузим а остальные ошибки TCP вытянет

.
Причем работу с железом в своем стеке они делают все тупеее и тупее, например, в 'новых' выбросили поддержку нескольких буферов передачи. К чему-бы это

.
Цитата
...у нас успешно работают все ревизии ENC.
условия и особено критерии "работы", однако, у всех разные

.
Алексей Непочатов
Jul 27 2007, 08:06
Цитата(zltigo @ Jul 27 2007, 11:18)

Большое "удобство"

Да уж было не до удобства, когда глюки полезли.
Срочно переводили уже готовое устройство на тактирование от ENC.
Цитата(zltigo @ Jul 27 2007, 11:18)

В котором работа с железом писана по поллингу, левой ногой, практически без обработки ошибок и уж точно без разборок с нештатными ситуациями. Все по принципу - если что контроллер (центральный!) перезагрузим а остальные ошибки TCP вытянет

.
Причем работу с железом в своем стеке они делают все тупеее и тупее, например, в 'новых' выбросили поддержку нескольких буферов передачи. К чему-бы это

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

Цитата(zltigo @ Jul 27 2007, 11:18)

условия и особенно критерии "работы", однако, у всех разные

.
Да уж условия - какие есть, а критерии однозначные у всех - чтобы работало годами без перезагрузок
zorromen
Aug 16 2007, 17:59
Есть 2 вопроса ...
1) Чтобы передать команду требуется всегда начинать опусканием CS и заканчиваться поднятием его? или можно опустить и не подымать и передать несколько команд ...
2) Решился взяться переводом dh ... вот мож есть у кого вырезки так сказать уже переведенных кусков ... то все переводить напряг, много времени теряю тока на перевод ... Потом можно все собрать вместе и выдать в сеть ...
zorromen
Jan 23 2008, 16:55
Все. После перевода документов и сборки платы, где я использую АРМ. Написаных функций инициализации, записи и чтения регисторов ENC28J60. Для работы решил использовать полный дуплекс, присоеденил сводиоды как надо на разьеме, чтобы ток втекал, даже резисторы приделал паралельно светодиодам, чтобы при ресете автоматика сама переводила в полный дуплекс. При инициализации сам вручную тоже ставлю этот режим. Тока при соединении кабеля камень его не видет. PHY голову морочит, говорит "нема кабеля". Кабель продсоединяется в свичу, в котором постоянно летают пакеты. Я че думаю, как свитч определяет наличие кабеля? В данном случае моего устройства. А если присоеденить к компу через нуль-кабель , то он просто пишет нема кабеля. Неужели трансформаторы полетели?
Алексей Непочатов
Jan 23 2008, 21:26
Какой трансформатор используете?
zorromen
Jan 24 2008, 05:15
Это разьем с трансформаторами J0026D21BNL. Смотрем росцилографом выходы трансформаторов, глухо.
Алексей Непочатов
Jan 24 2008, 07:47
Схему подключения трансформатора к ENC выложите, может что-нибудь интересное увидим.
zorromen
Jan 24 2008, 16:15
Бугага. Я его запустил. Все оказалось в ферите дело, новый припаял. Теперь работает, тока ток она кушает немалый.
Продолжение следует. Оставайтесь на наших каналах.
Wildcat
Jan 24 2008, 19:54
А можно уточнить какой общий ток потребления ?
Алексей Непочатов
Jan 24 2008, 20:04
У нас вроде все согласно даташиту, больше 250 мА не жрет. Но это прямо скажем немало, и греется при этом заметно.
Цитата(zhevak @ Jun 27 2007, 15:38)

Люди, а здесь есть кто для приема пакетов пользует прерывание, а не полинг флага PKTIF в регистре EIR? Вопрос в следующем -- вы используете прерывание только этого флага или обрабатываете еще и другие флаги?
Я что-то поленился прописывать обработчики TXIRIF и RXERIF (биты TXIRIE и RXERIE не подняты). Наверно, зря. Вобщем-то, мой девайс (mega8 + ENC28J60) работает. И вроде как даже работает длительное время. Как минимум час-два, больше -- не проверял. Но, вот, сегодня я обнаружил один очень неприятный ньюанс: если девайсу слать что-нибудь по UDP и одновременно пингачить его, то ENC-ишка впадает в ступор.
Нагрузка, вроде какбы, не серьезная: UDP -- 60 байт, которые никак не обрабатываются (я уже все поотрубал нахрен! Ничего не осталось!), посылаются примерно 30 раз в секунду; и ICMP -- стандартные 42 байта
При такой "нагрузке" девайс работает примерно 1-2 иногда 3 секунды (когда как) и перестает выставлять прерывания. Микроконтроллер, я убедился -- не виснет.
Что-то я не особо догоняю, что делать-то? С одной стороны, совсем не хочется писать расшифровщик прерывании ENC и как-то обрабатывать ошибки (я даже еще не смотрел что там делать-то надо в таких случаях), а с другой -- не соображу, как можно еще вернуть ENC к работе.
Посоветуйте че-нить... Хех! А то, молчание какое-то тут подозрительное нависло. То-ли стругают, понимаш-ли, каждый свой девайс и думают, что выйдут на рынок раньше других и сделают супер-пупер-бизнес, то-ли ENC-сишками вообще мало-кто занимается.
Ау, эмбеддеры!

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

Виснет стабильно,если в нее фигачить любыми....
Не "виснет". Разбирайтесь медленно и печально с софтом навешанным на нее. Железяка, конечно, в общем-то весьма убогенькая, с богатой errata, из коллизий не выбраться корректно, не смотря на "рецепты" в errata, но с описанными заплатками 4,5 и 7 релизы работают терпимо и уж по крайней мере без "виснет" по вине железа.
Цитата(zltigo @ Mar 11 2009, 19:56)

Не "виснет". Разбирайтесь медленно и печально с софтом навешанным на нее. Железяка, конечно, в общем-то весьма убогенькая, с богатой errata, из коллизий не выбраться корректно, не смотря на "рецепты" в errata, но с описанными заплатками 4,5 и 7 релизы работают терпимо и уж по крайней мере без "виснет" по вине железа.
4,5 и 7 релизы чего?микрочиповского стека или силикона?
zltigo
Mar 12 2009, 07:37
Цитата(WHALE @ Mar 12 2009, 08:33)

4,5 и 7 релизы чего?микрочиповского стека или силикона?
Силикона. Микрочиповский стек не использую совсем, единственно, что работа с собственно железом писалась вприглядку на их enc28j60.c ввиду отсутствия

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

.
P.S.
На данный момент времени использование вещей подобных enc28j60 совершенно не целесообразно. Сам несколько лет назад использовал только по причине того, что в конкретном изделии Ethernet был сугубо опционален. В ближайщее время, при первой-же возможности, это изделие будет переработано уже под контроллер с набортным MAC, благо их сейчас выбор....
dimka76
Mar 12 2009, 08:23
Цитата(WHALE @ Mar 11 2009, 19:18)

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

Можно выпить за погибель микрочипа
Если работать в режиме медленного диалога с компом,то не вещается вообще(по крайней мере 8 часов точно.Я и обнаружил-то зависание обмена только на живой сети вначале.У нас тут типичный пионернет,и временами прилетает с десяток ARP-запросов с интервалом,если верить снифферу,равным 0.И все-девайс отвалился.Стал экспериментировать напрямую и выяснил-виснет,если приходит несколько все-равно каких пакетов,вызывающих прерывание с интервалом меньше 5ms.
По совету
zltigo "медленно и печально" просмотрел весь софт приема.Слегка убыстрил алгоритм,теперь вешается если пакеты слать с интервалом менее 3ms.Даташит читал,эррату использовал.У меня пятая ревизия чипа.
Пока отложу,на той неделе продолжу игры дальше...
zltigo
Mar 12 2009, 16:01
Цитата(WHALE @ Mar 12 2009, 16:18)

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

- теряют пачками по 128-256 пакетов. ENC выживает без зависаний. В процессе написания софта проводились и "лабораторные работы" над ENC c иммитацией разнообразных нагрузок - с прерываниями проблем нет.
Цитата
Довольно много свитчей такого потока 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.
Новые, более умные свичи, могу забанить флудераста и по более хитрым алгоритмам, нежели банальный подсчет броадкастов.
Но в общем случае, тут проблема не в каких-то глюках ядер свичей, а именно в выбранных производителем режимах работы по умолчанию.
zltigo
Mar 12 2009, 16:54
Цитата(Rst7 @ Mar 12 2009, 19:32)

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