Полная версия этой страницы:
Wiznet vs Altera
lons83
Apr 18 2013, 15:19
Здравсвуйте, очень надеюсь что кто-нибудь сможет подсказать.
Заранее хочу извиниться если тема повторялась..
уже третий день не могу понять в чем проблема(((((
Есть Циклон 4 + Визнет w5300.
пытаюсь настроить Визнет.
частота 100 мгц.
делаю все как по даташиту.
Код
void sbros() // функция сброса reset
{
IOWR_ALTERA_AVALON_PIO_DATA(PIO_MANAG_BASE, 0x07); // сброс reset
for (i=0; i<23; i++){} // пауза 4 мкс
IOWR_ALTERA_AVALON_PIO_DATA(PIO_MANAG_BASE, 0x0F); // настройка PLL
for (i=0; i<45000; i++){} // пауза 20мс
}
void write_wiz(unsigned short adr, unsigned short data) // функция записи
{
IOWR_ALTERA_AVALON_PIO_DATA(PIO_ADR_BASE, adr);
IOWR_ALTERA_AVALON_PIO_DATA(PIO_DATA_BASE, data);
IOWR_ALTERA_AVALON_PIO_DATA(PIO_MANAG_BASE, 0x0E); // установка cs
IOWR_ALTERA_AVALON_PIO_DATA(PIO_MANAG_BASE, 0x0A); // установка wr
IOWR_ALTERA_AVALON_PIO_DATA(PIO_MANAG_BASE, 0x0E); // снятие wr
IOWR_ALTERA_AVALON_PIO_DATA(PIO_MANAG_BASE, 0x0F); // снятие cs
}
void read_wiz(unsigned short adr) // функция чтения
{
unsigned short data;
IOWR_ALTERA_AVALON_PIO_DATA(PIO_ADR_BASE, adr); // выставлzем адресс
IOWR_ALTERA_AVALON_PIO_DATA(PIO_MANAG_BASE, 0x0E); // установка cs
IOWR_ALTERA_AVALON_PIO_DATA(PIO_MANAG_BASE, 0x0C); // установка rd
data=IORD_ALTERA_AVALON_PIO_DATA(PIO_ADR_BASE);
IOWR_ALTERA_AVALON_PIO_DATA(PIO_MANAG_BASE, 0x0E); // сн€тие rd
IOWR_ALTERA_AVALON_PIO_DATA(PIO_MANAG_BASE, 0x0F); // сн€тие cs
printf("%X %X\n",adr,data); // вывод адреса и данных
}
int main()
{
IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_DATA_BASE, 0xFFFF); // тристабильные ножки данных на выход
IOWR_ALTERA_AVALON_PIO_DATA(PIO_MANAG_BASE, 0x0F); // управляющие в единицы
sbros();
write_wiz(0x000,0xB800); // запись MR -- прямая адрессация
write_wiz(0x008,0x0000); // установка MAC
write_wiz(0x00A,0x0000);
write_wiz(0x00C,0x0014);
IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_DATA_BASE, 0x0000); // тристабильные ножки данных на вход
read_wiz(0x000); // чтение данных по адресам
read_wiz(0x008);
read_wiz(0x00A);
read_wiz(0x00C);
while(1){}
return 0;
}
Результат: чтобы я не записывал читается во всех регистрах 0xB800.
И комп не видит MAC-адрес....
Может кто-нибудь скажет в чем ошибка.
Заранее спасибо)))
Копейкин
Apr 18 2013, 16:31
По моему, вы не соблюли временные интервалы для управляющих сигналов.
100МГц соответствует 10нС на такт,
а по даташиту на W5300 мин Trd, Tcs = 65нС.
Сделайте, для начала, сигналы заведомо длиннее, чем заявленые.
Читайте данные также не ранее чем Tdata_setup = 42 нС.
А вообще, можно было создать собственный компонент Avalon-MM,
где и задать необходимые временные интервалы.
lons83
Apr 18 2013, 17:14
Сигналы и так длинные.
Промежуток между операциями, к примеру:запись в порт (две подряд идущие операции), равен 320 нс.
Код
IOWR_ALTERA_AVALON_PIO_DATA(PIO_MANAG_BASE, 0x0A); // установка wr
IOWR_ALTERA_AVALON_PIO_DATA(PIO_MANAG_BASE, 0x0E); // снятие wr
Цитата(Копейкин @ Apr 18 2013, 20:31)

А вообще, можно было создать собственный компонент Avalon-MM,
где и задать необходимые временные интервалы.
А как его сделать собственный компонент? читал что-то про это. Но где он в SOPC находиться и как настраивается не нашел(((
Golikov A.
Apr 18 2013, 17:51
руками пишется блок на верилоге- вхдл...
Скажи лучше этот W5300 - нормальная штука, или так заплатка для ленивых? Типа модулей USB от FTDI когда по быстрому надо сделать что-то, а на нормальные разбиралки сил и времени нет?
Копейкин
Apr 18 2013, 20:11
В SOPC builder, New component, в графическом интерфейсе ввести нужный набор сигналов и прописать временные параметры. Визард сгенерирует tcl-скрипт и Verilig или VHDL шаблон компонента. Дальше правка вручную под свои нужды.
Касательно W5300, у меня обеспечивает поток ~45мбит UDP.
Аппаратная поддержка TCP/IP, UDP.
А что вы от него хотите?
Golikov A.
Apr 19 2013, 04:56
Цитата(Копейкин @ Apr 19 2013, 00:11)

Касательно W5300, у меня обеспечивает поток ~45мбит UDP.
Аппаратная поддержка TCP/IP, UDP.
А что вы от него хотите?
TCP и DHCP если есть возможность. Ну и настоящий ТСР, а не урезанный с кучей ограничений, то есть чтобы не выяснилось в середине работы что втыкание этого устройства возможно только в определенные виды сетей, а любая не регламентированная активность в сети валит его или он валит сеть насмерть. Или что он не может работать с пакетами произвольной длинны, или что он дохнет от коротких пакетов.
правильно я понимаю что вы в него пихаете данные, он их пакует в ТСП пакет и пускает дальше, а все что пришло обратно с его айпишником или широковещательно с правильным мак адресом, он распаковывает и отдает вам как тело пакета, с отрезанными заголовками и прочей сервисной надстройкой?
lons83
Apr 19 2013, 05:17
Цитата(Копейкин @ Apr 18 2013, 20:31)

100МГц соответствует 10нС
Такой вопрос. у меня на вход подается 50 Мгц.
я через PLL разгоняю до 100Мгц и подаяю на вход своего МК.
В SOPC стоит источник частоты - External со 100 Мгц...
Я все правильно делаю?
Просто я тут задумался... как я уже сказал между снять сигнал и выставить сигнал проходит 320нс...
или это уже особенность компилятора?
Копейкин
Apr 19 2013, 08:08
Так, по пунктам.
1)
TCP и DHCP есть такая возможность.
Можно даже посмотреть как это делают, скачав на сайте wiznet wirmware для EVB-B1 демо-платы.
Там "С" исходники для Atmel AVR.
Про ограничение сетей - 10\100 Мбит сети.
Я в большую сеть не втыкал, но 3-4 устройства у меня на столе жили исправно, кстати на коротких пакетах.
Передаёт пакеты не больше стандартной длины. Содержимое буфера сам делит на пакеты.
Приходящим, отрезает заголовки Ethernet, оставляет TCP и UDP.
В режиме MACRAW, позволяет оставить все заголовки на месте и разбирать вручную.
2) lons83, скриншот из СОПЦбилдера можно?
И как сгенерированая система дальше подключается тоже...
Если вы тактируете систему 100МГц, то между 2 соседними операциями вывода в порт 320нс - это много.
Чем измеряете?
PLL правильно сконфигурирована?
Тактовая частота одна, для всех компонентов Nios, GPIO ?
Golikov A.
Apr 19 2013, 08:46
Спасибо, надо будет попробовать.
Сейчас подымаю изернет на ПЛИС+Марвел+LwIP, но что-то мне это все меньше и меньше нравится

... Главное что все равно больше 50 МБит на софтварных процах в плисе фиг получишь, а свой ТСП стэк в железе я пока еще не готов...
alexPec
Apr 19 2013, 20:44
Цитата(Копейкин @ Apr 19 2013, 00:11)

Касательно W5300
О! Интересно узнать, w5300 также греется как w5100? И как она по ЭМС, на помехах мощных не зависает, не отваливается?
Есть опыть с 5100, греется зараза как печка, выше определенной температуры (летом) без радиатора глючит напрочь. И на мощные помехи (типа пускатели на 75кВт рядом выключаются, ну как рядом - в соседнем шкафу) реагирует - отваливается TCP коннект, иногда просто виснет и не работает пока заножку ресета не дернешь.
В W5300 это исправлено?
Сейчас поднял TCP/IP/UDP на опенкоровском эзернете - в лабораторных условиях работает, скоро проверю девайс в суровых условиях - частотники, пускатели, разрядники. Если все ок - забываю про визнет и пользую только опенсорсы. Так хоть поправить можно если что, все под контролем.
Цитата
Скажи лучше этот W5300 - нормальная штука, или так заплатка для ленивых? Типа модулей USB от FTDI когда по быстрому надо сделать что-то, а на нормальные разбиралки сил и времени нет?
По мне так больше для ленивых

Год с лишним мучился с 5100 - отваливался коннект - через 2 года увидел свежую эрату - там моя проблема и написано что решения нет! Ресетьте мол чип и все заново. Ну это я и без них выяснил...
Golikov A.
Apr 20 2013, 04:38
спасибо ценная информация.
В опенсорсах все хорошо. кроме то го что они для комфорта просят памяти им отжать, а у этого своей 128 килов на борту...
Я хотел ДДР монопольно юзать, теперь предеться менеджмент памяти делать, часть стэку отдавать...
Копейкин
Apr 20 2013, 05:52
Подтверждаю- W5300 греется, довольно сильно.
Но у меня короткие периоды работы, поэтому до сбоев не дошло, наверное.
Мощных источников помех рядом тоже нет.
Но буду иметь в виду. Спасибо за информацию.
vadimuzzz
Apr 20 2013, 14:50
Цитата(Golikov A. @ Apr 19 2013, 15:46)

Главное что все равно больше 50 МБит на софтварных процах в плисе фиг получишь, а свой ТСП стэк в железе я пока еще не готов...
а есть смысл за скоростью гнаться именно в TCP? имхо, если нужна скорость - UDP с аппаратным ускорением, а для надежных соединений - TCP, тут программно
Golikov A.
Apr 20 2013, 18:39
Вот и я так говорил, но компьютерные собратья меня не поддержали

Им со стороны компьютера удобнее в прибор по ТСР лезть, меньше надстроек, по UDP еще же протокол надо навесить свой, контроль целостности передачи, подтверждение приема и прочее...
lons83
Apr 22 2013, 04:33
Цитата(Копейкин @ Apr 19 2013, 12:08)

2) lons83, скриншот из СОПЦбилдера можно?
И как сгенерированая система дальше подключается тоже...
Если вы тактируете систему 100МГц, то между 2 соседними операциями вывода в порт 320нс - это много.
Чем измеряете?
PLL правильно сконфигурирована?
Тактовая частота одна, для всех компонентов Nios, GPIO ?
Выкладываю скрины.
Измеряю осциллографом.
PLL. ну вроде по стандарту. Режим Нормал. 18 Мгц на входе 100 Мгц ны выходе.
P.S. Если просто создать PLL. Подать на вход частоту и на выходе смотреть осциллографом то будет 100Мгц. и 10 нс
а если через NIOS (то есть на вход 100Мгц и смотреть соседние операции вкл и выкл то будет 320 нс)
Копейкин
Apr 22 2013, 12:40
Тогда остаётся только предположить, что вы используете экономный вариант ядра Nios.
Он действительно очень медленый, может лучше стандартный взять?
Далее, посмотрите эпюры ваших сигналов с помощью SignalTap.
Это очень полезный инструмент, стоит освоить.
Мне всё-таки не нравится в вашем коде, что чтение данных идёт непосредственно после установки сигнала RD для W5300.
Попробуйте вставить задержку на 4 пустых (nop) инструкции и посмотрите, измениться ли читаемое значение.
И потом, почему, в вашем коде, вы читаете данные из порта адреса (PIO_ADR_BASE), а не данных (PIO_DATA_BASE).
Может в этом причина?
lons83
Apr 23 2013, 10:57
Цитата(Копейкин @ Apr 22 2013, 16:40)

Тогда остаётся только предположить, что вы используете экономный вариант ядра Nios.
Он действительно очень медленый, может лучше стандартный взять?
Далее, посмотрите эпюры ваших сигналов с помощью SignalTap.
Это очень полезный инструмент, стоит освоить.
Мне всё-таки не нравится в вашем коде, что чтение данных идёт непосредственно после установки сигнала RD для W5300.
Попробуйте вставить задержку на 4 пустых (nop) инструкции и посмотрите, измениться ли читаемое значение.
И потом, почему, в вашем коде, вы читаете данные из порта адреса (PIO_ADR_BASE), а не данных (PIO_DATA_BASE).
Может в этом причина?
Да. я забыл упомянуть что использую самый слабый проц.
Я поставил в WEB версии самый сильный проц. и залил в режиме Run AS, предварительно увеличев задержки между операциями. (хотя по данным осциллгрофа и даташит на визнет времени мне хватало)
Результат.
Я наконец прочитал то что записывал, поставив между КАЖДОЙ операцией задержку вида : for (i=0;i<2000;i++

;
Но компьютер по прежнему не видит плату с Визнет(((((((
P.S. да виноват c PIO_DATA_BASE и PIO_ADR_BASE просто опечатка вышла))))
Копейкин
Apr 23 2013, 12:33
Скажите, а каким осциллографом вы наблюдаете 100МГц сигналы?
Советую настоятельно освоить SignalTap (внутрикристалльный многоканальный логический анализатор).
Компьютер не видит Wiznet, в смысле не пингается?
Без корректной настройки собственного IP и MAC и не будет пингаться...
Возьмите готовый
пример Для предыдущей версии (W3150), станет понятно, как работать с микросхемой.
alexPec
Apr 23 2013, 21:28
Цитата(lons83 @ Apr 23 2013, 14:57)

Но компьютер по прежнему не видит плату с Визнет(((((((
Ну так стандартно по порядку:
питание проверить, аналоговое и цифровое, аналоговое должно идти через ферриты (хотя у меня и с перемычками работало)
подключение трансформатора (кстати, линк-то светится на визнете?), сам трансформатор правильный (т.е. 1:1)?
Средние точки по рефренс дизайну?
Резисторы на 50 ом на трансформаторе правильные висят?
Генератор генерит? (хотя вроде без генератора не читается то что запишешь)
MAC, subnet mask, ip записали - прочитали. Совпадает?
У компа которым пингуете подсеть та же?
Включить лучше через свитч какой-нибудь. Напрямую был случай не пинговался визнет пока не выставил принудительно 100 Мбит на компе. В остальных режимах (авто, 10 мбит) визнет молчал. Через свитч - пинговался всяко.
Ну и тупо замыкания между ногами в аналоговой части посмотрите
Если все ОК обязано работать
lons83
Apr 24 2013, 05:39
Цитата(Копейкин @ Apr 23 2013, 16:33)

Скажите, а каким осциллографом вы наблюдаете 100МГц сигналы?
Советую настоятельно освоить SignalTap (внутрикристалльный многоканальный логический анализатор).
Компьютер не видит Wiznet, в смысле не пингается?
Без корректной настройки собственного IP и MAC и не будет пингаться...
Возьмите готовый
пример Для предыдущей версии (W3150), станет понятно, как работать с микросхемой.
Textronix модель не помню 500 Mhz.
Начал осваивать)))
Даже соединения не видит с компом . Нет сети и все. Хотя в компе все настроено.
Сейчас буду схему смотреть. Есть подозрение что кварц как-то не так работает или вообще не работает((((
Цитата(alexPec @ Apr 24 2013, 01:28)

Ну так стандартно по порядку:
питание проверить, аналоговое и цифровое, аналоговое должно идти через ферриты (хотя у меня и с перемычками работало)
подключение трансформатора (кстати, линк-то светится на визнете?), сам трансформатор правильный (т.е. 1:1)?
Средние точки по рефренс дизайну?
Резисторы на 50 ом на трансформаторе правильные висят?
Генератор генерит? (хотя вроде без генератора не читается то что запишешь)
MAC, subnet mask, ip записали - прочитали. Совпадает?
У компа которым пингуете подсеть та же?
Включить лучше через свитч какой-нибудь. Напрямую был случай не пинговался визнет пока не выставил принудительно 100 Мбит на компе. В остальных режимах (авто, 10 мбит) визнет молчал. Через свитч - пинговался всяко.
Ну и тупо замыкания между ногами в аналоговой части посмотрите
Если все ОК обязано работать
Сейчас буду проверять все то что Вы написали.
с генератором не понятно... то ли не генерит,то ли генерит но не так как надо.
Да записываю MAC, subnet mask, ip - читает если выставлять большие задержки. Если выставлять как согласно дата шиту из все регистров читается только 0xB800... с увелечением задержек появляются другие значения уже (такое ощущение что информация на выходах DATA просто не успевает меняться)
Не то что не пингуется так и не видет соединения - нет сети и все(((
У ALTER'ы входные PIO с подтягивающим резистором или нет? то есть нужно ли на соединении Wiznet (DATA) - Cyclone (PIO - biddirection) вешать подтягивающий резистор?
alexPec
Apr 24 2013, 06:48
Цитата(lons83 @ Apr 24 2013, 09:39)

Не то что не пингуется так и не видет соединения - нет сети и все(((
У ALTER'ы входные PIO с подтягивающим резистором или нет? то есть нужно ли на соединении Wiznet (DATA) - Cyclone (PIO - biddirection) вешать подтягивающий резистор?
У циклона есть пул-апы если надо.
Если линка нет то в первую очередь генератор. Линк по-моему должен быть дже если не конфигурировать регистры, после сброса. А вообще сброс-то правильный? Может в состоянии сброса находится (активный уровень на ресете)?
На кварце висит 1М резистор? Без него генератор не заводится, и такое было.
На RSET (1 нога) резистор правильный?
Test mode на земле должны быть, проверьте.
lons83
Apr 24 2013, 07:51
Цитата(alexPec @ Apr 24 2013, 10:48)

У циклона есть пул-апы если надо.
Если линка нет то в первую очередь генератор. Линк по-моему должен быть дже если не конфигурировать регистры, после сброса. А вообще сброс-то правильный? Может в состоянии сброса находится (активный уровень на ресете)?
На кварце висит 1М резистор? Без него генератор не заводится, и такое было.
На RSET (1 нога) резистор правильный?
Test mode на земле должны быть, проверьте.
Сброс правильный. ну как правильный - время чуть больше чем в даташите,
подаю 0 - примерно 4 мкс на ресет потом в 1. жду 20 мс пока встанет PLL.
и начинаю зашивать mac, ip и т.д.
на кварце 2.5 мегома. Кстати не могу найти обвязку кварца. в даташите6 ее нет.
на RSET правильно. 1 резистор 12,3ком
TEST MODE на земле.
нога LINKED в 1 все время.
P.S. а как установить пул-апы? не нашел функции.
Golikov A.
Apr 24 2013, 09:46
народ обсуждал что если делать кварц по даташиту то про 1 МОм резистор нет ни слова и не работает, в тестовых платах резистор есть, ставили и начинало работать...
lons83
Apr 24 2013, 10:06
Цитата(Golikov A. @ Apr 24 2013, 13:46)

народ обсуждал что если делать кварц по даташиту то про 1 МОм резистор нет ни слова и не работает, в тестовых платах резистор есть, ставили и начинало работать...
Простите не очень понял. То есть должен быть кварц четко на 1 Мом ?
Golikov A.
Apr 24 2013, 11:29
нет, там должен быть 1 мегоомный резистор, кажется в параллель кварцу... поищите где то тема была, что-то найти не могу.
По памяти смысл такой что есть отладочные платы от них, и надо делать как на платах, там этот резистор добавлен, если делать как в даташите то не работает...
lons83
Apr 24 2013, 11:41
Цитата(Golikov A. @ Apr 24 2013, 15:29)

нет, там должен быть 1 мегоомный резистор, кажется в параллель кварцу... поищите где то тема была, что-то найти не могу.
По памяти смысл такой что есть отладочные платы от них, и надо делать как на платах, там этот резистор добавлен, если делать как в даташите то не работает...
В даташите нет вообще этой обвязки касательно кварца.
Но, я на сайте, только что нашел в разделе визнет 5300 схему подключения - там есть резистор 1 Мом. Да и он в параллель.
alexPec
Apr 24 2013, 12:13
Так и надо делать, у меня без резистора ни один чип не работал. С резистором про кварц даже не задумывался (про его параметры) - всегда работало. Девайсов на нем сделано уже штук 50-70
ivanoffer
Apr 24 2013, 13:46
TC, недавно запустил W5300, в памяти еще осталась информация что и как делал. Для нормального диалога желательно иметь фрагмент
включения кристалла (разговор один в один из pdf не пройдет). Возможно, смогу дать толковый совет.
lons83
Apr 27 2013, 06:18
Генератор нормально заработал. комп видит сеть. Запись и чтение проходят нормально.
Однако пинга так и нет((((
Настройка в компе:
IP 192.168.0.2
MASK 255.255.255.0
Основной шлюз 192,168,0,1
может что-то не так записываю.
Запись в визнет - write_wiz( адресс, данные):
Код
write_wiz(0x000,0xB800); // запись MR прямая адресация
write_wiz(0x008,0x0000); // Запись MAC 0.0.0.0.0.14
write_wiz(0x00A,0x0000);
write_wiz(0x00C,0x0014);
write_wiz(0x010,0xC0A8); // запись IP (то что в компе называется Основной шлюз) 192,168,0,1
write_wiz(0x012,0x0001);
write_wiz(0x014,0xFFFF); // запись MASK 255,255,255,0
write_wiz(0x016,0xFF00);
write_wiz(0x018,0xC0A8); // Запись IP самого Визнета 192,168,0,14
write_wiz(0x01A,0x0014);
Подключение пряиое (копм - визнет)
Пробовал через хаб тоже не помогло(((((((((
lons83
Apr 27 2013, 12:18
Всем спасибо. Все заработало.
Проблема была в не работающем кварце. И моей не которой не внимательности ))))
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.