W5100 does not work, TCP client mode
Ethernet Chips
No replies yet. Be the first to reply.
Join the discussion.
Ethernet Chips
No replies yet. Be the first to reply.
Join the discussion.
Share projects and connect with makers.
Joined before the site update? first.
New to WIZnet Makers?
We sent a verification link to your address. Open it to activate your account, then log in.
Accounts from this email provider are reviewed by an administrator after verification. Approval usually takes one business day.
Already have an account?
Enter your email address. If it belongs to an account, we'll send a link to set a new password. Members who joined before the site update use this to set their password.
If an account uses that address, we sent a link to set a new password. The link works once and expires in 30 minutes.
Know your password?
Need an account?
RE: W5100 does not work, TCP client mode
by Eugeny ·
На первой картинке, как видно, всё работает? Пятый сто десятому, а тот отвечает, и делее обмен пустыми пакетами, чтобы поддерживать связь. Однако мне не понятно значение размера буфера - 8К.
На второй удаленный интерфейс просто ничего не отвечает. Маски сети совпадают? Напомню, что ru.wikipedia.org/wiki/Link-local_address
То есть маска должна быть 255.255.0.0, а не как тут
Далее
Номер порта не совпадает с первой картинкой.
Далее, код
for(int i = 0; i < 10; i++) { readW5100(W5100, array, 1, W51_S1_SR); Task_sleep(1000); if(array[0] == W51_SR_SOCK_INIT) break; }подразумевает, что независимо от того, открылся ли сокет через 10 секунд, происходит выполнение последующего кода. Читайте раздел 5 даташита, а также диаграмму состояний на стр. 28.
Далее,
writeW5100(W5100, (uint32_t)0, W51_SUBR);//сброс маски сети в 0 readW5100(W5100, &byte, 1, W51_S1_SR);это зачем? Зачем сбрасывать сетку так, чтобы выпасть из сетки 169.254.1.0 по 169.254.254.255? И зачем читать статус, если он не используется?
Далее,
while(1) { readW5100(W5100, &byte, 1, W51_S1_CR); if(byte == 0) break; }таким образом проверяется завершение команды, но совсем не факт, что она завершилась соединением.
И последнее,
тоже не понятно (и маска, сорее всего, неправильная).
Как надо делать -
RE: W5100 does not work, TCP client mode
by juvf ·
Добрый день, спасибо за быстрый ответ и рекомендации.
нашел у себя ошибку.
только вот 0xc0fec205 - это 192.254.194.5. Это и wireshark показал, просмотрел. Сорри за беспокойство.
Однако… остался вопрос по поводу сброса маски подсети. В еррате пишется, что есть аппаратный глюк w5100 и рекомендации по обходу его.
Глюк в следующем: при коннекте w5100 посылает ARP запрос не на дистанейшин ip а на gateway ip. Чтобы обойти этот глюк нужно маску сбросить в 0,0,0,0. Перед коннектом установить валидную маску, а после коннекта опять сбросить в 0.
На ЭФО есть библиотека W5100_driver_v1_6. В ней тоже этот сброс маски в 0 используется.
Хотелось бы от первого лица узнать об этом. Действительно ли есть этот глюк и нужно ли делать подобные финты с маской?
ps Отдельное СПАСИБО за поддержку на русском языке!!!
RE: W5100 does not work, TCP client mode
by Eugeny ·
Я до этого не читал эту эррату, наверное был не прав. Рассмотрим каждый случай -
Думаю, что все эти случаи исключительные, на грабли которых мне не удалось наступить
Но я вам благодарен за то, что я о них узнал.
Теперь по тексту, как обычно написанному на коренглише.
Данное значение, FF.FF.FF.xx, это не то значение, которое надо установить. Надо установить значение, соответствующее подсетке. Ответ находится в коде
то есть “установите правильную маску подсети ЕСЛИ подсеть 255.255.255.0”. В вашем случае подсетка 255.255.0.0, и ее значение нужно вернуть в то же состояние.
RE: W5100 does not work, TCP client mode
by juvf ·
Добрый день.
Перестал работать Client mode. Не конектиться к серверу. Сделал в коде loop в которо в дебаге смотрю все регистры чипа.
Дебагом останавливаюсь в while и правлю адрес регистра и данные. Общие регитры прописываються нормально. Сокетные регистры… Socket n Mode Register - для сокета 0 и 1 пишеться и читается. Регситры Destination IP Address и Destination Port для 0 и 1 сокетов не пишется.
Пишу в регистр с адресом 0x0510 значение 0х55, читаю 0х00. Проверил на двух платах - картина одинаковая. Не могу прописать адрес и порт удаленного узла в регистры сокета. Почему? Может они прописываются, но не читаются?
RE: RE: W5100 does not work, TCP client mode
by Eugeny ·
Значения некоторых регистров “появляются” только после определенных действий. 0x510 это Sn_DPORT, попробуйте подконнектиться к какому-нибудь ресурсу, а потом прочитать.
А что говорит Wireshark? Может проблема в сети или в сервере?
RE: W5100 does not work, TCP client mode
by juvf ·
Решил проблему. Sn_DPORT также как и Sn_DiP будет изменяться только после того, как порт откроется. Для клиента сначала нужно открыть порт, потом задать задать Sn_DPORT и Sn_DiP - тольк опотом эти регистры будут меняться. А потом нужно делать коннект.
Я что-то поправил стал делать сначала запсь Sn_DPORT и Sn_DiP, а потом опен и коннект, поэтому перестало работать.