Reception delays

Добрый день
Обнаружил неприятное поведение W5100.

На W5100 поднял TCP-client. На другом устройстве (под Linux) поднял TCP-server. Сервер, по таймеру, раз в 100 мс отправляет пакет в 20 байт.
Если подключиться к серверу telnet-ом, то видно на глаз, примерно 10 раз в секунду появляются данные.
Если подключиться микросхемой W5100, то она тоже получает эти данные. Но, почему то она получает примерно раз в секунду 200 байт.
Т.е. микроконтроллер непрерывно проверяет выход INT микросхемы W5100, как только появляется прерывание, то микроконтроллер вычитывает статусные регистры, вычитывает размер полученных байт и вычитывает все байты. Так вот… я ожидаю, что микроконтроллер 10 раз в секунду обнаружит INT и 10 раз в секунду вычитает по 20 байт. Но W5100 не выдает INT сразу по приёму, а выдает INT примерно раз в секунду.
Я грешил на задержки и склеивание пакетов в локальной сети, то telnet нормально, т.е. раздельно получает 10 пакетов в секунду.

Может такая “склейка” данных - это особенность микросхемы W5100? Может микросхема без задержек выставлять INT по приёму данных?

Бит ND/MC в каком состоянии?

Был в “0”. Поставил в “1” - стало без задержек. СПАСИБО!!!

1 Like

juvf
не могли бы поделится кодом TCP клиента?
чет сервер работает без вопросов с первой моей реализации по мануалу, а вот клиент не хочет.

Мой код не поможет - он на ассемблере. Лучше озвучьте список проблем.

Что такое S0 и S1? Номер сокета?
Если тот же код работает для 0 и не работает для 1, то проблема или в адресации (неправильно определены адреса регистров или буферов), или сокет 1 неправильно сконфигурирован по размерам буферов.

S это сокеты. S0 работает как сервер отлично, мне нужно добавить еще клиента на S1
Логика такая: утройство слушает порт и отвечает по запросу, но должно и самостоятельно слать инфу на сервер.
По мануалу все сделал, но клиент не работает. Тут добрый человек подсказал:
1)общий инит W5100
2) даю команду в W5100 OPEN
3)запись в регистры сокета ip адреса и порта удаленного сервера, к
которому хочу подключиться
4) даю команду CONNECT

поробую так. По мануалу другая последовательность.