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

STM32F4 + W5100

Привет.

 

Кто-то работал с этой микрухой?

Я нашёл на офф сайте драйвер и пример реализации DHCP. Переписал под F4 (поправив некоторые ошибки на мой взгляд) - не работает. Не может получить IP-адрес. Роутер показывает, что он увидел какое-то устройство, но MAC совсем не тот, который я посылаю.

 

Когда я задаю микросхеме статический IP, пинг с компа на неё проходит. Но это ж "некошерно".

У кого-нибудь есть примерчик поделиться?

 

Спасибо.

 

PS.

Сейчас буду пробовать простенький сервер набабахать хоть на статическом IP.

 

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


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

Мудохался с ним целый день.

DHCP пока убрал, задал статический адрес, слал на комп UDP пакеты. Смотрю Wirashark-ом

 

Пакеты приходят, адреса (и MAC, и IP) в них нормальные (те, что я задал), а в области данных (13 байт) бред собачий ...

 

Кста.

Нарыл тему про проблемы с UDP - http://electronix.ru/forum/index.php?showtopic=62111 Народ там ничего путного не придумал.

Сокет закрываю-открываю на каждую отправку.

 

Попробую TCP, пишут, там этих проблем нет. Лично мне UDP на фиг не нужен, но DHCP накрывается медным тазом, а без него как-то некошерно :( .

 

 

 

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


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

На TCP чего-то после передачи не взводится бит завершения передачи SEND_OK в IR ....

Сервер на компе ничего не ловит, Wireshark ничего не показывает.

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


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

Зачем вы вообще к STM32F4 цепляете W5100.

Надо было по человечи делать через MII и PHY

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


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

Кто-то работал с этой микрухой?
Работал. Писал все с нуля читая даташит. Правильно сказали, если у вас STM32 - цепляйте внешний phy и используйте программный стек. Эта микросхема хорошо работает порка вы запускаете на ней примеры производителя. Шаг вправо, шаг влево - и понимаете, что в ее стеке просто не реализована нужная вам функция. Не считая описанных в errata ошибок. То есть чтобы сделать то, что нужно именно вам, нужно будет опуститься на MAC-уровень. То есть сделать то же самое, что и с обычным phy. Так зачем цеплять большую дорогую микросхему?

 

Навскидку из того, на что нарвался я:

- работаю по UDP. Устройство шлет сообщения на фиксированный адрес. Получатель находится за маршрутизатором (gateway). Включили, все работает. Через несколько месяцев провайдер по какой-то причине заменил маршрутизатор. А W5100 при первой посылке сделала ARP-запрос и все остальные посылки тупо долбит на MAC-адрес почившего маршрутизатора. Команды "обновить таблицу ARP", которую я мог бы послать при пропадании ответных посылок, у нее нет. Приходится в такой ситуации посылать фиктивную посылку на несуществующий адрес. Поскольку у микросхемы таблица ровно на один адрес, она при смене адреса назначения генерит новый ARP-запрос.

- тот же UDP. Устройство часто шлет короткие сообщения из одного сокета на один или по очереди на несколько разных адресов. Поскольку у микросхемы ARP-таблица ровно на один адрес, то перед каждым сообщением микросхема посылает ARP-запрос и ждет ответа. Итог - если получателей больше одного, то катастрофическое падение скорости.

- тот же UDP. Бага, описанная в эррате в 2012 году. А у меня устройство выпускается с 2006г и я все это время не мог понять, какого черта оно при некоторых условиях работает криво. А сколько там еще неописанных?

 

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

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


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

Мудохался с ним целый день.

DHCP пока убрал, задал статический адрес, слал на комп UDP пакеты. Смотрю Wirashark-ом

 

Пакеты приходят, адреса (и MAC, и IP) в них нормальные (те, что я задал), а в области данных (13 байт) бред собачий ...

 

Не работал с 5100, но помудохался со стеком для ENC28J для AVR выложенный на we.easyelectronics. Плотно работал с wireshark и сильно полопатил код. Основные проблемы были с big-little endian и нумерацией пакетов. Причем это не у всех было...

Посмотрите в эту сторону. Может поможет.

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


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

uriy, W5100 был выбран человеком, которому я помогаю. Как наиболее простой способ добавить LAN в уже имеющееся у него устройство.

 

С ENC28 я проуродовался 2 недели, но так и не смог добиться от него ни одного байта в ответ. Даже номер ревизии чипа ... Не говоря уж о каких-то более серъёзных вещах. Плюнул на неё.

Я не думаю, что проблема в little/big-endian. Иначе б пакеты вообще не доходили бы ... Порченная только область данных. Может я где-то с перекачкой данных в проге намутил..

Да и если б у меня были попарно байты данных переставлены я бы это глазом в Wireshark увидел бы.

 

Сергей Борщ, спасибо. Передам тому человеку. Вообще, пока планируется ставить это по одну сторону от роутера.

 

TCP завёлся, коннектится нормально, проблема только в порче области данных. Вчера я тупо забыл дать микрухе команду CONNECT :biggrin:

Может у меня где-то одни и те же грабли и в UDP и в TCP. Буду разбираться.

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


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

Наверное я что-то с буферами сокетов намутил.

Вычислил, что 1-й байт данных передаётся правильно, остальные - бред.

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


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

Всё, заработала шарманка :)

TCP, UDP клиенты и DHCP заработали.

 

Косяк был в том, что перед посылкой любой четвёрки "атомарных" байт - 0x0F/0xF0, 2 байта адреса, байт данных (0xFF для чтения) неоходимо делать nCS:=0, а после их отправки ОБЯЗАТЕЛЬНО возвращать в 1.

Я же при отправке данных (массив байт) решил немного "пооптимизировать" и опускал/поднимал nCS до и после всего цикла отправки данных.

Видимо, входной буфер микросхемы использует перепад nCS 0->1 для пропихивания данных куда-то дальше в недра микросхемы, а т.к. я этого не обеспечил, он находился в некоем "ступоре" и не воспринимал все остальные данные.

 

Теперь приступаю к главному - TCP-сервер на проце.

 

Всем спасибо.

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


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

А в каком формате приходят данные через spi в мк?

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


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

Не понял вопроса.

Вот это:

 

uint16_t wiz_read_buf ( uint16_t addr, uint8_t* buf, uint16_t len )
{
uint16_t idx = 0;

for ( idx=0; idx<len; idx ++ )
   {
	buf [ idx ] = IINCHIP_READ ( addr );
	addr ++;
} // for

return len;
} // wiz_read_buf

 

нормально забивает указанный буфер указанным кол-вом байт из W5100.

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


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

Не совсем корректно написал вопрос. Имею ввиду например несколько пк подключились к w5100 и шлют данные на разные порты что будет на выходе spi как отличать что от кого пришло.

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


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

В микросхеме 4 двунаправленных сокета. Поэтому максимум 4 клиента.

У каждого сокета свои флажки типа "данные пришли" и прочее. По ним и различать. Все 4 сокета независимы. Вы можете читать/писать любой сокет. Естественно, по очереди.

Каждый сокет, так сказать, однопоточный. Пока к нему кто-то подключён, другой уже не подключится.

 

По крайней мере, на данном этапе своего развития, я так всё это понимаю.

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


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

hd44780 У вас есть вот эти исходники? Wiznet.rar

Там есть исходники веб сервера. Это готовый TCP сервер для вас.

На их основе я когда-то тоже делал веб сервер.

Столкнулся с такой проблемой:

Браузер в запросе на сервер всегда дает кучу информации.

Обычно это прядка килобайта.

Но почему-то explorer дает инфу заметно больше (больше размера MTU).

В итоге на wiznet от explorer приходило два фрагментированных пакета.

Вторая часть пакета куда-то терялась, я так и не смог ее достать из wiznet.

В итоге клиентам не рекомендовали пользоваться explorer'ом.

 

По поводу ENC28 она тоже нормально работает. Сам не применял,

но дома использую IP телефон siemens C470IP.

Она там стоит, был очень удивлен найдя там эту микросхему у немцев.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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