обслуживание нескольких TCP соединений на W5500 или подобном
- Войдите на сайт для отправки комментариев
Чт, 18/03/2021 - 16:19
Есть задача сделать с помощью модуля ethernet w5500 TCP сервер к которому можно было бы обращаться по 3-4 портам. Знает кто нить как это сделать с помощью доступных библиотек в ардуино IDE ?
Хорошо бы еще и клиента ТСР поднимать иногда.
Технически то модуль может поддерживать несколько одновременных коннектов , но не уверен что Ethernet библиотека умеет так работать. Посоветуйте .
Это примерно как подвал под домом копать детским совочком.
Это примерно как подвал под домом копать детским совочком.
Ну, граф Монте-Кристо что-то подобное проделывал :-)
Мне кажется, что со штатной библиотекой шанс есть, но небольшой. В ней сервер не умеет подниматься на конкретном сокете, а "путешествует" по всем подряд. Насколько я вижу - в библиотеке от IDE 1.8.9 в LISTEN переводится первый попавшийся в цикле CLOSED-сокет. Т.е. вполне может случиться так, что при большом кол-ве коннектов экземпляры EthernetServer будут обламываться с переводом сокета в LISTEN на своём порту, что наврядли можно считать признаком нормальной работы.
Посоветуйте .
пишите самостоятельно работу с модулем через регистры, там нет ничего сложного
вот пример простенький
http://arduino.ru/forum/otvlechennye-temy/programmirovanie-32-kh-razryadnykh-mk?page=21#comment-575919
Update: в стандартной библиотеке WizNET для работы с модулем W5500 есть уже готовые функции работы с регистрами, т е чтоб не писать свой велосипед работы через SPI, просто используйте их, но конечно всю логику придется рисовать заново.
Да, я это и имел в виду - ( у модуля есть возможность поддерживать до 8 по-моему сокетов) Вопрос сводится только к разделению общего буфера на сколько нужно частей (По умолчанию весь буфер принадлежит одному сокету.) на этапе конфигурации модуля и работы с ними потом вручную). Вот этого то я и надеялся избежать, думал мож есть уже чего готовое, чтоб побыстрому сделать. А почему ключиком подвал копать? У меня обмен то. не интенсивный ( по 100 байт раз в две секунды), просто несколько сервисов разных вот и нужно было по разным сокетам их распределить.
Да и главная проблема что я чел в общем далекий от программирования контроллеров. В теории понимаю что нужна делать , но опыта практического 0 ( потому и искал что нить ардуинообразное ). Сейчас я пользую чужой контроллер который обеспечивает работу с несколькими портами и перегон TCP в usart - я на него подвесился ардуинкой и логику делаю на ней. Но. контроллер большой и сильно избыточный под мою задачу , хочу покомпактнее и попроще.
Вот кстати нашел интересную ссылку - https://eax.me/stm32-w5500/
Ссылка, что вы нашли - та же самая стандартная библиотека что и под arduino, а вам надо самостоятельно все программировать. Т е пути два: или изучать или заказывать.
Два пути есть только из безвыходной ситуации)) А ТС может пересмотреть вопрос железа и решить свою задачу малой кровью
Вопрос сводится только к разделению общего буфера на сколько нужно частей (По умолчанию весь буфер принадлежит одному сокету.) на этапе конфигурации модуля и работы с ними потом вручную).
Это поверхностное представление. Разделить буфер на 8 частей - это самое начало.
Далее будет необходимо выстраивать обслуживание сокетов, самое важно здесь - это закрепить за группой сокетов один порт. Т.е. конфигурировать сокеты 1 и 5, например, на порт 10500. Либо не открывать на LISTEN порта 10500 более двух закрытых сокетов. Либо как-то иначе.
Штатная библиотека делит буфер, но дальше все сокеты конфигурируются на вход под один порт. Всегда.
"Попроще" тут не получится. Лично я таких библиотек, что вам нужно, для Arduino я не встречал. Только самописание.