Easyelectronics.ru • Просмотр темы - Работа с W5500

Easyelectronics.ru

Электроника для всех
Текущее время: 15 авг 2018, 09:41

Часовой пояс: UTC + 5 часов



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 24 ] 
Автор Сообщение
 Заголовок сообщения: Работа с W5500
СообщениеДобавлено: 03 мар 2016, 16:44 
Старожил
Аватара пользователя

Зарегистрирован: 28 сен 2012, 22:11
Сообщения: 328
Откуда: г.Таганрог/г.Геленджик/г.Одесса
Доброго времени суток.
Пытаюсь запустить Ethernet микруху W5500. Настройки работают, IP и порт настроил, запустил Сокет 0. Теперь хочу передать данные, Записываю 500 "!" в передающий буфер 0 сокета начиная с нулевого адреса и шлю ему команду SEND. Передача идет, но передается нечто странное. Во-первых передается данных гораздо больше, чем размер буфера, а во-вторых передаются какая-то чушь типа такого:

Show

Никак не пойму, в чем проблема. При чем передается рандомное количество байт. Может кто работал с данной микрухой?

_________________
Количество полученного опыта прямо пропорционально выведенному из строя оборудованию....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с W5500
СообщениеДобавлено: 03 мар 2016, 18:02 
Старожил
Аватара пользователя

Зарегистрирован: 28 сен 2012, 22:11
Сообщения: 328
Откуда: г.Таганрог/г.Геленджик/г.Одесса
И повторная посылка команды SEND не вызывает передачу, передает только после реинита w5500 и только один раз.

_________________
Количество полученного опыта прямо пропорционально выведенному из строя оборудованию....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с W5500
СообщениеДобавлено: 03 мар 2016, 21:32 
Заглядывает иногда

Зарегистрирован: 03 фев 2015, 15:21
Сообщения: 31
Может стоит попробовать поработать через визнетовский драйвер, с ним все прекрасно отправляется/принимается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с W5500
СообщениеДобавлено: 04 мар 2016, 13:47 
Старожил
Аватара пользователя

Зарегистрирован: 28 сен 2012, 22:11
Сообщения: 328
Откуда: г.Таганрог/г.Геленджик/г.Одесса
Это который на сайте? Так там только базовые функции записи/чтения. Ни алгоритмов работы, ничего нет. Судя по даташиту я должен вычитать указатель передающего буфера, записать буфер, увеличить указатель буфера и записать его обратно. Но не хочет работать

_________________
Количество полученного опыта прямо пропорционально выведенному из строя оборудованию....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с W5500
СообщениеДобавлено: 05 мар 2016, 01:19 
Заглядывает иногда

Зарегистрирован: 03 фев 2015, 15:21
Сообщения: 31
Да, тот самый. В нем есть все основные функции, установка соединения, прием/отправка пакетов, работа с регистрами т.д. Опять же в нем можно посмотреть как происходит запись в буфер и отправка.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с W5500
СообщениеДобавлено: 24 июн 2017, 01:10 
Старожил

Зарегистрирован: 21 мар 2012, 14:33
Сообщения: 532
Начал осваивать W5500, возникли следующие вопросы:
1) почему в файле w5500.h закомментированы строчки с двумяконстантами?
Код:
//#define SOCK_IPRAW                   0x32     /**< IP raw mode socket */
//#define Sn_MR_IPRAW                  0x03     /**< IP LAYER RAW SOCK */

данные константы используются в socket.c, чтобы скомпилировалось я разкомментировал эти две строчки.

2) кто-нибудь использует прерывания от W5500? Я подключил эту ногу, но потом выяснил что по умолчанию маски прерываний все нулевые. Какое прерывание самое ходовое, чтобы его проверить?

Update: попробовал сделать прерывание wizchip_setinterruptmask(IK_SOCK_0); Работает. Не понял, нужно ли сбрасывать прерывания, чтобы работали следующие прерывания, например вот так:
Код:
ctlwizchip(CW_CLR_INTERRUPT, (void *)IK_SOCK_0);

почему работает без обнуления?

Как сделать прерывание по приходу байтов? По TCP либо по UDP.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с W5500
СообщениеДобавлено: 24 июн 2017, 15:02 
Старожил
Аватара пользователя

Зарегистрирован: 28 сен 2012, 22:11
Сообщения: 328
Откуда: г.Таганрог/г.Геленджик/г.Одесса
tmtlib писал(а):
кто-нибудь использует прерывания от W5500?

Я использую, и довольно успешно. Сама микруха работает как часы. Библиотеку сам писал.

tmtlib писал(а):
Как сделать прерывание по приходу байтов? По TCP либо по UDP.

Прочесть даташит.

_________________
Количество полученного опыта прямо пропорционально выведенному из строя оборудованию....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с W5500
СообщениеДобавлено: 25 июн 2017, 08:35 
Старожил

Зарегистрирован: 21 мар 2012, 14:33
Сообщения: 532
Сделал прерывания, в прерывании только устанавливаю флаг, никаких отправок по SPI. Сделал так, чтобы SPI не вклинилось в какой-нибудь текущий обмен из главного цикла (альтернативно можно было бы временно выключать прерывание exti) Столкнулся с проблемой обмена на сокетах. Recv всегда работает, а Send срабатывает только первый раз. На форуме Радиокот видел похожую проблему, но как там автор решил проблему неизвестно. Send постоянно возвращает ноль и программа зацикливается. Ошибку пока не нашел. Чипом очень доволен, буквально за два дня во многом разобрался. Минус в том, что все примеры без прерываний.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с W5500
СообщениеДобавлено: 25 июн 2017, 10:09 
Старожил
Аватара пользователя

Зарегистрирован: 28 сен 2012, 22:11
Сообщения: 328
Откуда: г.Таганрог/г.Геленджик/г.Одесса
А буфер каждый раз заполняешь перед отправкой? Там хитрая система, прежде чем писать в буфер сокета надо прочесть его текущий адрес, затем по этому адресу записать данные, после чего надо записать новый адрес с учётом длины записанных данных.

_________________
Количество полученного опыта прямо пропорционально выведенному из строя оборудованию....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с W5500
СообщениеДобавлено: 26 июн 2017, 09:15 
Старожил

Зарегистрирован: 21 мар 2012, 14:33
Сообщения: 532
Нашел ошибку. В функции Send обрабатываются регистры прерываний, и оно потом вечно ждёт SEND_OK, т.к. я его уже снаружи сбросил в своём обработчике. Написал свою функцию Send, теперь всё работает. Проверил loopback тест программой AX1.EXE


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с W5500
СообщениеДобавлено: 28 дек 2017, 17:44 
Старожил

Зарегистрирован: 21 мар 2012, 14:33
Сообщения: 532
Поднимаю старый проект с Wiznet W5500, решил исправить глюк. Не определяется отключение от ПК, соответственно невозможно установить соединение заново, т.к. W5500 "висит" в таком состоянии.
Зависание возникает после любого из этих действий:
1. выдергивание провода
2. некорректное завершение программы-клиента на ПК (без закрытия сокетов)
3. включение/выключение WiFi (после этого почему-то теряется связь по LAN).

Sn_Sr(0) постоянно выдает 0x17 "Socket Established", хотя давным давно и программа закрыта, и провод выдернут и вставлен заново. При этом включены все прерывания (аппаратно отслеживаю пин с визнета) и выставлены все маски Interrupt Register и Socket Interrupt Register. Никакие прерывания не приходят, никакие статусы не меняются.

Нашел временное решение: выставить WIZCHIP_WRITE(Sn_KPALVTR(0),1);
1*5 - автоматическая посылка keep alive каждые 5 секунд. Это помогает, приходят нужные прерывания, но в реальности время существенно более 5 секунд, бывает около 20. Также эта штука не будет работать с UDP.

Кто как решил проблему с невозможностью определить потерю подключения?
Может лучше вручную пинговать каким-нибудь своим пакетом и отрубать клиента?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с W5500
СообщениеДобавлено: 29 дек 2017, 15:34 
Заглядывает иногда

Зарегистрирован: 14 сен 2015, 08:50
Сообщения: 190
Откуда: Россия, Ростов-на-Дону
tmtlib писал(а):
Поднимаю старый проект с Wiznet W5500, решил исправить глюк. Не определяется отключение от ПК, соответственно невозможно установить соединение заново, т.к. W5500 "висит" в таком состоянии.
Зависание возникает после любого из этих действий:
1. выдергивание провода
2. некорректное завершение программы-клиента на ПК (без закрытия сокетов)
3. включение/выключение WiFi (после этого почему-то теряется связь по LAN).

Sn_Sr(0) постоянно выдает 0x17 "Socket Established", хотя давным давно и программа закрыта, и провод выдернут и вставлен заново. При этом включены все прерывания (аппаратно отслеживаю пин с визнета) и выставлены все маски Interrupt Register и Socket Interrupt Register. Никакие прерывания не приходят, никакие статусы не меняются.

Нашел временное решение: выставить WIZCHIP_WRITE(Sn_KPALVTR(0),1);
1*5 - автоматическая посылка keep alive каждые 5 секунд. Это помогает, приходят нужные прерывания, но в реальности время существенно более 5 секунд, бывает около 20. Также эта штука не будет работать с UDP.

Кто как решил проблему с невозможностью определить потерю подключения?
Может лучше вручную пинговать каким-нибудь своим пакетом и отрубать клиента?

Писал свою библиотеку по даташиту - проблем с определением различных состояний нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с W5500
СообщениеДобавлено: 30 дек 2017, 07:13 
Старожил

Зарегистрирован: 21 мар 2012, 14:33
Сообщения: 532
Может я резисторы не те запаял, но само-то соединение работает стабильно на максимальных скоростях. Проблема только с некорректным отключением (выдернуть провод, закрыть программу на ПК без закрытия сокета). А ты пробовал провод выдергивать в процессе работы?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с W5500
СообщениеДобавлено: 30 дек 2017, 15:01 
Заглядывает иногда

Зарегистрирован: 14 сен 2015, 08:50
Сообщения: 190
Откуда: Россия, Ростов-на-Дону
tmtlib писал(а):
Может я резисторы не те запаял, но само-то соединение работает стабильно на максимальных скоростях. Проблема только с некорректным отключением (выдернуть провод, закрыть программу на ПК без закрытия сокета). А ты пробовал провод выдергивать в процессе работы?

Я использовал готовый модкль для W5500, поэтому ничего не запаивал. Провод выдергивал, вставлял: модуль коректно отрабатывает отсутствие кабеля, скорость соединения (100 или 10), full/half duplex.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с W5500
СообщениеДобавлено: 02 янв 2018, 17:26 
Старожил

Зарегистрирован: 21 мар 2012, 14:33
Сообщения: 532
А через что определяли отсутствие кабеля?
PHYCFGR он конечно быстро откликается, обнуляется бит LINK_UP
Но я сейчас рассматриваю ситуацию, когда провод быстро вытащили-вставили, если обрыв где-то или когда плохой контакт.
Тогда PHYCFGR показывает норму, а Sn_Sr(0) постоянно выдает 0x17 "Socket Established". Хотя компьютерная программа уже отрубилась.
Я выставил WIZCHIP_WRITE(Sn_KPALVTR(0),1) - посылка keep alive пакета каждые 5 секунд, это решает проблему, но за 30 и более секунд, хотя таких гигантских таймаутов у меня нигде не стоит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с W5500
СообщениеДобавлено: 03 янв 2018, 11:58 
Заглядывает иногда

Зарегистрирован: 14 сен 2015, 08:50
Сообщения: 190
Откуда: Россия, Ростов-на-Дону
tmtlib писал(а):
А через что определяли отсутствие кабеля?
PHYCFGR он конечно быстро откликается, обнуляется бит LINK_UP
Но я сейчас рассматриваю ситуацию, когда провод быстро вытащили-вставили, если обрыв где-то или когда плохой контакт.
Тогда PHYCFGR показывает норму, а Sn_Sr(0) постоянно выдает 0x17 "Socket Established". Хотя компьютерная программа уже отрубилась.
Я выставил WIZCHIP_WRITE(Sn_KPALVTR(0),1) - посылка keep alive пакета каждые 5 секунд, это решает проблему, но за 30 и более секунд, хотя таких гигантских таймаутов у меня нигде не стоит.

Да, статус проверяю через PHYCFGR. Сейчас проверил работу своей тестовой программы - проблем нет. В текущей версии программы (в тестовой программе я проверяю отдельно разные режимы) проверку uplink`а не произвожу. Тем не менее все работает как часы. Проверял в следующей конфигурации: подняты два сокета в режиме TCP-сервер, один TCP-клиент и один UDP. Проверял и на коротком разрыве и на длинном. Всё работает. Сессия TCP конечно рвется, но благополучно автоматически восстанавливается после подключения кабеля.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с W5500
СообщениеДобавлено: 03 янв 2018, 12:00 
Заглядывает иногда

Зарегистрирован: 14 сен 2015, 08:50
Сообщения: 190
Откуда: Россия, Ростов-на-Дону
Так что у Вас проблема, либо из-за библиотеки, либо Вы ещё не разобрались как ей пользоваться. W5500 работает предсказуемо и хорошо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с W5500
СообщениеДобавлено: 05 янв 2018, 21:26 
Старожил

Зарегистрирован: 21 мар 2012, 14:33
Сообщения: 532
Оказывается все правильно работает TCP таймаут по формуле 31с, так примерно и получается (w5500_ds_v107e_160224.pdf страница 39), плюс погуглил tcp timeout formula. Не знал, что там такой расчет идет.
Но у меня остаются небольшие сомнения. Как быстро соединение восстанавливается?

У меня сейчас так:
1. идёт обмен данными
2. выдергиваю провод, статус по прежнему 0x17 "Socket Established"
3. вставляю провод. При этом компьютерная программа-клиент не может достучаться до визнета (примерно 30с до таймаута), т.к. w5500 ещё держит открытым старый сокет.
4. примерно через 30с срабатывает визнетовский таймаут, в прошивке это обрабатывается и делается socket listen
5. компьютерная программа-клиент сразу без проблем подключается

Т.е. при стандартных настройках после выдергивания провода проходит практически 30мс, прежде чем произойдет прерывание таймаута. Оправдан ли такой большой таймаут, по-моему после временного обрыва провода клиент и сервер в любом случае должны переподключать сокет заново, и это желательно сделать побыстрее.

Хотя здесь могу ошибаться, может после временного обрыва LAN линии сокет может сохраниться и использоваться дальше?

Пока что подумываю смотреть за количеством свободных байт в визнетовском буфере на отправку (sn_tx_fsr),
и если там долго стоит ноль, то проверять Link status:link down из PHYCFG и делать принудительный реконнект.

update: а про выдергивание кабеля и был неправ, https://superuser.com/questions/911808/ ... rnet-cable
значит проблема ещё в программе-клиенте, её по идее можно доработать, и связь будет продолжаться даже после временного обрыва кабеля


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с W5500
СообщениеДобавлено: 06 авг 2018, 14:15 
Только пришел

Зарегистрирован: 12 окт 2016, 14:11
Сообщения: 10
Откуда: Брест
Не могу разобраться со строением памяти в w5500. Вроде всё должно быть просто, а по схеме не могу въехать, что к чему. Прикладываю схему из даташыта.
Как может память сначала идти последовательность 7 registr, 7 tx, 7 rx,
а потом (справа) показывается , что все блоки Rx собраны вместе , и блоки TX собраны вместе.
Посередине буфер, если это буфер, то зачем лепить есче один буфер (справа)?
http://nasos.brest.by/files/7c53bd23-2f ... 0b4eb0.jpg


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с W5500
СообщениеДобавлено: 06 авг 2018, 16:09 
Заглядывает иногда

Зарегистрирован: 14 сен 2015, 08:50
Сообщения: 190
Откуда: Россия, Ростов-на-Дону
alecksis писал(а):
Не могу разобраться со строением памяти в w5500. Вроде всё должно быть просто, а по схеме не могу въехать, что к чему. Прикладываю схему из даташыта.
Как может память сначала идти последовательность 7 registr, 7 tx, 7 rx,
а потом (справа) показывается , что все блоки Rx собраны вместе , и блоки TX собраны вместе.
Посередине буфер, если это буфер, то зачем лепить есче один буфер (справа)?
http://nasos.brest.by/files/7c53bd23-2f ... 0b4eb0.jpg

Насколько помню, писал модуль давно, там всё просто: адресация для каждого буфера идет с нуля и запариваться как с w5100 не надо. Просто считай, что у кпждого сокета свои буферы и всё.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с W5500
СообщениеДобавлено: 06 авг 2018, 17:04 
Только пришел

Зарегистрирован: 12 окт 2016, 14:11
Сообщения: 10
Откуда: Брест
вот я разбираюсь дальше, и не могу понять ; там 2 буфера на картинке, когда подаю команду , то в команде вписывать адрес какой? который в среднем буфере или в правом?
тоесть можно , как Вы говорите, делать так:

Код:
перевел сокет в режим сервера
дождался подключения
в команде выбрал TX_buffer и начал писать в него с нуля?
   потом мне нужно опять отправить данные, я буду писать с какого адреса (с 0 или 0+данные), и
   если смещение не обнуляется, то как я должен определить , что я вышел за границу буфера и мне
   нужно писать опять с 0?
закрыл подключение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с W5500
СообщениеДобавлено: 06 авг 2018, 19:56 
Заглядывает иногда

Зарегистрирован: 14 сен 2015, 08:50
Сообщения: 190
Откуда: Россия, Ростов-на-Дону
alecksis писал(а):
вот я разбираюсь дальше, и не могу понять ; там 2 буфера на картинке, когда подаю команду , то в команде вписывать адрес какой? который в среднем буфере или в правом?
тоесть можно , как Вы говорите, делать так:

Код:
перевел сокет в режим сервера
дождался подключения
в команде выбрал TX_buffer и начал писать в него с нуля?
   потом мне нужно опять отправить данные, я буду писать с какого адреса (с 0 или 0+данные), и
   если смещение не обнуляется, то как я должен определить , что я вышел за границу буфера и мне
   нужно писать опять с 0?
закрыл подключение

Алгоритмы следующие:
При передаче:
1. Читаем начальный адрес для записи данных
2. Пишем данные
3. Вычисляем новый адрес начала буфера записи
4. Пишем новый начальный адрес для записи данных
5. Пишем команду завершения передачи
При приеме:
1. Узнаем объем принятых данных
2. Читаем начальный адрес принятых данных
3. Читаем данные
4. Вычисляем новый адрес начала буфера приема
5. Пишем новый начальный адрес для принятия данных
6. Пишем команду завершения приема


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с W5500
СообщениеДобавлено: 06 авг 2018, 21:54 
Только пришел

Зарегистрирован: 12 окт 2016, 14:11
Сообщения: 10
Откуда: Брест
спасибо


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с W5500
СообщениеДобавлено: 06 авг 2018, 22:22 
Заглядывает иногда

Зарегистрирован: 14 сен 2015, 08:50
Сообщения: 190
Откуда: Россия, Ростов-на-Дону
alecksis писал(а):
спасибо

Не за что.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 24 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB