виснет Ethernet Shield W5500

Kirill777
Offline
Зарегистрирован: 07.11.2015

привет всем! помогите советом, не работает seeedовский шилд W5500 вернее работает иногда после ресет 1-2 минуты, причем если включить только его одного к роутеру то работает значительно дольше 5 мин. потом тоже зависает. стоит это чудо верхом на Mega 2560. проект и скетч аНДruino home automation

зависает именно шилд, проподает connect, роутер не видит, на пинги не отвечает, мега продолжает нормально работать.

изначально есть косяк что шилд не запускается если на mega питание только 12В, он начинает работать только при подключенном USB, подключал и одновременно и от разных источников вроде как питание не причем.

В чем может быть причина?

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Греется сильно?

Уверены, что питаете правильно?

На сайте производителя, в описании ничего нету на этот счет?

Программные проблемы исключили?

Kirill777
Offline
Зарегистрирован: 07.11.2015

Спасибо за интерес к моей проблеме!

греется сильно сама микросхема 5500, приклеил на нее радиатор но результат :(

питание сейчас осуществляется от БРП 12В 8А с двумя аккумуляторами по 2,1А от него же понижающий адаптер на 5В для USB в параллель (почему этот пирог не работает только от 12В?) также ситуация не меняется и от питания от компьютера по USB и от стабилизированного БП + компьютер.

у производителя сказано Not supports IP Fragmentation, грешу именно на это т.к. если исключить из сети все компьютеры, ТВ, IP камеры и т.д. работает дольше и стабильнее но в итоге все равно зависает.

Нашел в другой ветке:

[/quote]

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

[/quote]

может это мой случай? готов купить другой Shield но какой?

в программировании я вообще пока не какой :( к сожалению

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Я уверен, что w5500 - это всетаки улучшенная версия w5100/5200, поэтому наверняка все в ней есть и все она поддерживает.

Может для правильной работы этому чипу нужны еще какие-либо телодвижения, кроме тех, которые делает стандартная библиотека Ethernet? Почему не взяли дешевый w5100?

Схема питания осталась для меня загадкой.

Kirill777
Offline
Зарегистрирован: 07.11.2015

У производителя прямо так и сказано в спецификации что она не поддерживает http://www.seeedstudio.com/depot/W5500-Ethernet-Shield-p-2433.html?cPath=19_20

Написал в поддержку разработчику андруино, может подскажет что за движения надо делать. скетч ведь от туда. 

w5100 и не взял из за надежд в улучшенной w5500 в избежании проблем но похоже переплатил напрасно и НЕ скупой тоже будет платить дважды )))

схема питания если как то коротко то - от одного источника запитано и в джек 12В и в usb 5В одновременно, если иначе запитать - только от usb сильно греется а если только от джека то Ethernet-Shield не заводится, на плате диоды загораются а rx tx нет.

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

w5100 вроде прекрасно справлялся со своими обязанностями. Нынче эра беспроводного интернета. Как по мне - туда и нужно инвестировать. А для проводного доступа, как я уже сказал, есть проверенные решения.

Я думаю, что баги, которые вы имеете, можно рещить программно. Вот только не знаю, насколько быстро их решат, ибо - эра беспроводного интернета.

kolobokspb
Offline
Зарегистрирован: 30.05.2014

Тема старая, но отпишусь. 
Есть у меня шилд на чипе W5500. Общаюсь с ним по UDP. Никогда не зависал. http://goo.gl/SSpKWB 
Греется до 45. Эксплуатируется постоянно. Попробуй сменить шилд.

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Вопрос про сброс W5500

На пин Reset можно подавать 5 Вольт?

Пин Reset на этой плате подтянут к +3,3 Вольт 

В даташите нашла только о времени сброса

http://wizwiki.net/wiki/lib/exe/fetch.php/products:w5500:w5500_ds_v109e.pdf

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Если Reset подтянут к +3.3В, то подача +5В ничего не даст. Исходя из этого очевидно, что нужно подавать низкий уровень.

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Я имею ввиду осуществлять сброс с порта ардуино, LOW сброс, HIGH (+5) норма

sadman41
Offline
Зарегистрирован: 19.10.2016

Раз он подтянут к 3.3V, то его нужно садить на землю. pinMode(...,INPUT) - отпускает вход к 3.3V, pinMode(...,OUTPUT)  позволяет притянуть его к земле.

А зачем хардварный Reset? Мне ни разу не потребовался пока что.

Из datasheet: RSTn - Pull-up -  Reset (Active low) RESET should be held low at least 500 us for W5500 reset.

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Поняла. Спасибо.

kolobokspb
Offline
Зарегистрирован: 30.05.2014

По дефолту резет подтянут к 3.3V. Т.е. запущен по умолчанию. Для сброса нужно к земле тянуть. В своё время даже преразвёл его полностью отказавшись от шилда запаивая его прямо на плату без всяких соплей. 

 

kolobokspb
Offline
Зарегистрирован: 30.05.2014

схема не вставляется в виде картинки и так и этак.

https://disk.yandex.ru/i/vg5zBOEoXBMV2Q

P.S. Есть у этого шилда (или библиотеки) есть проблема. Если обмениваться по UDP (про TCP не знаю) и долго шилд не получает данные, то он их может и не получать даже если появится источник. Если нет данных, то я его аппаратно перезагружаю раз в 5 мин. И уже несколько лет с десяток устройств так пашут.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

kolobokspb
Offline
Зарегистрирован: 30.05.2014

в предпросмотре всё ок, а по факту уже фиг

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Del

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

kolobokspb пишет:

схема не вставляется в виде картинки и так и этак.

https://disk.yandex.ru/i/vg5zBOEoXBMV2Q

P.S. Есть у этого шилда (или библиотеки) есть проблема. Если обмениваться по UDP (про TCP не знаю) и долго шилд не получает данные, то он их может и не получать даже если появится источник. Если нет данных, то я его аппаратно перезагружаю раз в 5 мин. И уже несколько лет с десяток устройств так пашут.

Это проверенная схема? Рабочая?

На корпусе не совпадает распиновка по ключу

kolobokspb
Offline
Зарегистрирован: 30.05.2014

Да, это рабочая и проверенная схема. 
у меня не осталось фотки рабочего устройства, но если надо, то могу дать разводку и печатную плату полностью в размерах с китайским шилдом  в easyeda. Все компоненты RLC в корпусе 1206

Не совсем понял о каком ключе речь идёт... SCS

есть картинка разводки, но нет фотки готового изделия:

https://disk.yandex.ru/i/Prg6wpqePUiagQ

есть фотки этой схемы в разводке реальных устройств Mega 2560 + w5500:

с экраном

https://disk.yandex.ru/i/u1MHdmKOb1ZVmg

снят экран, а сетевой разъём на обратной стороне

https://disk.yandex.ru/i/yrzyzX_uKT5CWg

ещё устройство:

https://disk.yandex.ru/i/lH-xm8mCx5evWg

ещё устройство:

https://disk.yandex.ru/i/JpJ4FGBSPDP5wQ

Есть ещё куча устройств, но фотки надо искать.

 

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Я потом увидела, что контакты зеркально просто

SergeiL
SergeiL аватар
Offline
Зарегистрирован: 05.11.2018

kolobokspb пишет:
Есть у этого шилда (или библиотеки) есть проблема. Если обмениваться по UDP (про TCP не знаю) и долго шилд не получает данные, то он их может и не получать даже если появится источник. Если нет данных, то я его аппаратно перезагружаю раз в 5 мин. И уже несколько лет с десяток устройств так пашут.

 А IP адрес статический был или по DHCP получали, когда проблема проявлялась?

У меня несколько Leonardo ETH и Мег с W5500 работают очень давно ни разу не было проблем, но у меня с mqtt, а он по TCP работает.

Если адрес получать по DHCP, нужно обязательно продлевать аренду, а я не видел, что кто-то это делает. Иначе после истечения срока аренды IP адрес может быть отдан другому устройству (если не зафиксирован), и появится второе устройство с таким же IP адресом. Вот тут то и начнутся проблемы.      

  

kolobokspb
Offline
Зарегистрирован: 30.05.2014

Это первое, что было проверено. Информация не приходит даже в том случае если срок аренды Ip не истёк.
Я получаю Ip через DHCP, но Ip зафиксирован. Сейчас не могу вспомнить пингуется или нет устройство после того, как перестаёт принимать пакеты. 

Вообще на китайском шилде убрали или заменили номиналы резисторов: убрали резисторы 33Ом, заменили резисторы 49.9Ом на 51Ом и т.д. Я предполагал, что именно в этом была проблема (убрали согласование и подавление отражённого сигнала), ещё было предположение, что это проблемы с питанием w5500 поэтому всю керамику по питанию я посадил на ноги w5500 и нормальный электролит воткнул (как это и должно быть), но как показали эксперименты это был ложный путь.

SergeiL
SergeiL аватар
Offline
Зарегистрирован: 05.11.2018

Сейчас посмотрел примеры с получением адреса по DHCP, те которые идут с Ethernet - есть продление аренды, а в тех, которые идут с Ethernet2 - нет продления аренды. Я начинал сразу W5500, поэтому разбирался по примерам от Ethernet2, ну и напоролся на эту проблему на работе. 

А по надежности, пока отлаживался с оригинальной Leonardo ETH, замечал, что бывали случаи, когда W5500 впадал в ступор, и помогал либо аппаратный ресет, либо отключение питания. Поэтому на первом устройстве, которое стоит за 70км от города,  сделал аппаратный сторожевой таймер на тиньке. Но за все время с 2017г. он ни разу не сработал. Устройство постоянно мониторится, потерю связи обнаруживал только один раз, когда меняли провода и сел аккумулятор. После этого я отказался от  вотчдогов, и проблем пока не было.       

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Здравствуйте.

У меня в программе несколько видов RJ45 разъёмов на плату.

Посмотрите пожалуйста, верно ли я  его подключила, распиновку.

 

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Вроде правильно сделала

kolobokspb
Offline
Зарегистрирован: 30.05.2014

Вроде норм. 

Но я очень рекомендую проверить сам компонент. Правильно ли у него подключены ноги (распиновка)
Я 2-а раза нарывался на такую фигню. 

сам компонент разъёма делал явно не pro т.к. никто не показывает в разъёмах согласующие трансформаторы. Трансформаторы есть, а пины не подписаны...  ппц. 

R 49.9 можно заменить на 51 без проблем. 

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

К чему эти оскорбления? 

Зайдите в easyeda

Смотрите сколько разновидностей! И обозначения разные! А ещё трансформаторы везде нарисованы.

В чём здесь тупость?

 

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

kolobokspb пишет:

Вроде норм. 

Спасибо.

С TC, RC путаница у меня была.

kolobokspb
Offline
Зарегистрирован: 30.05.2014

Irinka пишет:

К чему эти оскорбления? 

Зайдите в easyeda

Смотрите сколько разновидностей! И обозначения разные! А ещё трансформаторы везде нарисованы.

В чём здесь тупость?

 

1)в этом нет никакой полезной информаци

2)это увеличивает размер схемы сокращая полезное пространство

представьте каждый разработчик начнёт расписывать внутренние кишки своих изделий... 

3)не всё что нарисовано является истиной или делается профессионалами. в 99% могут быть нарисованы трансформаторы , а в 1% нет, но это не значит, что  именно 99% решение нормальное. Более того тут дохрена копируется т.е. один раз нарисовали так и пошло поехало, меняется только название. 

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Здравствуйте. 

#include <SPI.h>
#include <Ethernet.h>
const uint8_t mac[] = {0xDE, 0xAD, 0xBB, 0xEF, 0xFE, 0xED };
const uint8_t ip[] = {192, 168, 1, 12};
const uint8_t gateway[] = {192, 168, 1, 1};
const uint8_t subnet[] = {255, 255, 255, 0};
const uint8_t dns[] = {192, 168, 1, 1};


EthernetClient client;
IPAddress server(192, 168, 1, 10);



void httpRequest() {
  client.stop();
  if (client.connect(server, 80)) {
    Serial.println("Connected");
    client.print(F("GET /script/test.php"));
    client.print(F(" HTTP/1.1"));
    client.println();
    client.println(F("Host: 192.168.1.10"));
    client.println(F("User-Agent: arduino"));
    client.println(F("Connection: close"));
    client.println();
  } else {
    Serial.println("Connection failed");

  }
}



void setup() {
  Ethernet.begin(mac, ip, dns, gateway, subnet);
  Serial.begin(19200);
  Serial.println("Start");
}

void loop() {

  static uint32_t timer;
  if (millis() - timer >= 3000) {
    timer = millis();
    httpRequest();
  }

}

При отключении кабеля или недоступности сервера получаю Connection failed и когда сервер становится доступен или кабель на месте, автоматически подключение к серверу не происходит, сброс W5500 а потом ардуины иногда помогает, но не всегда, полный сброс питания решает проблему.

Как решить проблему?

 
 
sadman41
Offline
Зарегистрирован: 19.10.2016

Делать .stop() в конце сеанса обмена с сервером, а не когда попало.

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

После отправки запроса на сервер?

  if (client.connect(server, 80)) {
    Serial.println("Connected");
    client.print(F("GET /script/reader.php?card=12345"));
    client.print(F(" HTTP/1.1"));
    client.println();
    client.println(F("Host: 192.168.1.42"));
    client.println(F("User-Agent: SKUD_READER"));
    client.println(F("Connection: close"));
    client.println();
    client.stop();
  } else {
    Serial.println("Connection failed");
  }

 

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Или клиент останавливать нужно когда !client.connect(server, 80) т.е .когда Connection failed

sadman41
Offline
Зарегистрирован: 19.10.2016

Давно я этой библиотеке внутрь не залезал. По-моему - если коннект не случился, то и закрывать нечего.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Irinka пишет:

После отправки запроса на сервер?

  if (client.connect(server, 80)) {
    Serial.println("Connected");
    client.print(F("GET /script/reader.php?card=12345"));
    client.print(F(" HTTP/1.1"));
    client.println();
    client.println(F("Host: 192.168.1.42"));
    client.println(F("User-Agent: SKUD_READER"));
    client.println(F("Connection: close"));
    client.println();
    client.stop();
  } else {
    Serial.println("Connection failed");
  }

на ESP делаю именно так, аптайм больше года

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017
#include <SPI.h>
#include <Ethernet.h>
const uint8_t mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
const uint8_t ip[] = {192, 168, 1, 12};
const uint8_t gateway[] = {192, 168, 1, 1};
const uint8_t subnet[] = {255, 255, 255, 0};
const uint8_t dns[] = {192, 168, 1, 1};
const uint8_t server[] = {192, 168, 1, 10};


uint8_t Flag_stop = false;

EthernetClient client;

void httpRequest() {
  if (client.connect(server, 80)) {
    Flag_stop = false;
    Serial.println("Connected");
    client.print(F("GET /script/reader.php"));
    client.print(F(" HTTP/1.1"));
    client.println();
    client.println(F("Host: 192.168.1.10"));
    client.println(F("User-Agent: arduino"));
    client.println(F("Connection: close"));
    client.println();
  } else {
    Serial.println("Connection failed");
  }
}



void setup() {
  Ethernet.begin(mac, ip, dns, gateway, subnet);
  Serial.begin(19200);
  Serial.println("Start");
}

void loop() {

  static uint32_t timer;
  if (millis() - timer >= 1500) {
    timer = millis();
    httpRequest();
  }



  if (!client.connected() && !Flag_stop) {
    Flag_stop = true;
    Serial.println("Disconnecting");
    client.stop();
  }



}

Исходя из примера получается что вот так. Если клиент к серверу не подключен, то стоп

sadman41
Offline
Зарегистрирован: 19.10.2016

Если желаете усложнений, то можно и так.

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Почему усложнений?

Не получится так, что не все данные отправились а я остановила клиент?

sadman41
Offline
Зарегистрирован: 19.10.2016

А вы думаете, что от от 25 -й строки до 52-й прям полчаса пройдёт? Несколько миллисекунд онлайна ситуацию не изменят.

Пробуйте так, как написали. Мне кажется, что на стопе библиотека проверяет состояние сокета и ждёт некоторое время, если в TX-буфере что-то осталось.

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Спасибо. Буду пробовать.

SAB
Offline
Зарегистрирован: 27.12.2016

Почему вы от нас отвернулись на аватарке? :))

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017
Исправила ситуацию ))))))

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Irinka пишет:

Исправила ситуацию ))))))

стройНЯШЕЧКА )))

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017
const uint8_t dns[] = {192, 168, 1, 1};
const uint8_t gateway[] = {192, 168, 1, 1};
const uint8_t subnet[] = {255, 255, 255, 0};

Как я поняла, эти значения ставятся автоматически и указывать их необязательно?

о умолчанию за адрес шлюза принимается IP-адрес устройства, в котором последний октет заменен на 1.

 

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

И ещё

IPAddress server(192, 168, 1, 2);
uint8_t server[] = {192, 168, 1, 2};

Чем отличаются эти два варианта назначения адресов?

И ещё, можно использовать F при отправке данных

 client.print(F("GET /script/connection.php"));

Или это будет сказываться на быстродействие?

MAC адрес произвольный? 

00-6A-80-D1-C0-8A

00-23-F9-8F-A6-4C

00-EF-24-E2-6B-32

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

"В то время, как наши космические корабли бороздят просторы вселенной..."

sadman41
Offline
Зарегистрирован: 19.10.2016

Если готовы полагаться на волю автора библиотеки и не интересует ее переносимость, а так же код не будет далее поддерживаться - можете полностью аргументы функции begin() не писать, оставив дефолтовыми.

F() не снизит производительность драматически.

Произвольно MAC взять можно, но лучше применить "локально администрируемый MAC-адрес".

Два варианта назначения адреса отличаются местом применения, так же как вилка и ложка на столе.

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

С Новым годом =)))))

Вы про эти биты MAC адреса?

А про назначение адреса я не поняла, в библиотеке нашла

virtual uint8_t beginMulticast(IPAddress, uint16_t);

	static void begin(uint8_t *mac, IPAddress ip);
	static void begin(uint8_t *mac, IPAddress ip, IPAddress dns);
	static void begin(uint8_t *mac, IPAddress ip, IPAddress dns, IPAddress gateway);
	static void begin(uint8_t *mac, IPAddress ip, IPAddress dns, IPAddress gateway, IPAddress subnet);

 

 

не поняла...

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

ua6em пишет:

"В то время, как наши космические корабли бороздят просторы вселенной..."

Да да да)))) Есть минутка не сижу без дела)) С Новым годом)

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

По коду из моего #35 поста

При отправке POST Disconnecting не происходит

#include <SPI.h>
#include <Ethernet.h>
const uint8_t mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
const uint8_t ip[] = {192, 168, 1, 12};
const uint8_t gateway[] = {192, 168, 1, 1};
const uint8_t subnet[] = {255, 255, 255, 0};
const uint8_t dns[] = {192, 168, 1, 1};
const uint8_t server[] = {192, 168, 1, 10};


uint8_t Flag_stop = false;

EthernetClient client;

void httpRequest() {
  if (client.connect(server, 80)) {
    Flag_stop = false;
    Serial.println("Connected");
	  client.print("POST /script/cat.php HTTP/1.1\r\n");
      client.print("Host: 192.168.1.10\r\n");
      client.print("Content-Type: application/x-www-form-urlencoded\r\n");
      client.print("Content-Length: 12\r\n");
      client.print("\r\n");
      client.print("cat=12345678");
  } else {
    Serial.println("Connection failed");
  }
}



void setup() {
  Ethernet.begin(mac, ip, dns, gateway, subnet);
  Serial.begin(19200);
  Serial.println("Start");
}

void loop() {

  static uint32_t timer;
  if (millis() - timer >= 1500) {
    timer = millis();
    httpRequest();
  }



  if (!client.connected() && !Flag_stop) {
    Flag_stop = true;
    Serial.println("Disconnecting");
    client.stop();
  }



}
Исходя из примера получается что вот так. Если клиент к серверу не подключен, то стоп

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Irinka пишет:

ua6em пишет:

"В то время, как наши космические корабли бороздят просторы вселенной..."

Да да да)))) Есть минутка не сижу без дела)) С Новым годом)

С Новым годом!

русская гончая отличается нестомчивым характером )))
PS лису может гнать неделю, спокойно

PPS MAC наносят на плату обычно, его и надо прописывать