На 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 по приёму данных?
Что такое S0 и S1? Номер сокета?
Если тот же код работает для 0 и не работает для 1, то проблема или в адресации (неправильно определены адреса регистров или буферов), или сокет 1 неправильно сконфигурирован по размерам буферов.
S это сокеты. S0 работает как сервер отлично, мне нужно добавить еще клиента на S1
Логика такая: утройство слушает порт и отвечает по запросу, но должно и самостоятельно слать инфу на сервер.
По мануалу все сделал, но клиент не работает. Тут добрый человек подсказал:
1)общий инит W5100
2) даю команду в W5100 OPEN
3)запись в регистры сокета ip адреса и порта удаленного сервера, к
которому хочу подключиться
4) даю команду CONNECT
поробую так. По мануалу другая последовательность.