Перейти к содержанию

Есть ли в W5500 клиент DHCP?

Обновлено Редакция GAW

W5500 держит стек TCP/IP в самой микросхеме, поэтому кажется, что и адрес она получит сама. Но в даташите среди «аппаратных» протоколов DHCP нет: W5500 умеет TCP, UDP, ICMP, IPv4, ARP, IGMP и PPPoE и даёт 8 независимых сокетов. DHCP — протокол поверх UDP, и его клиент работает в программе микроконтроллера: программа открывает UDP-сокет, обменивается сообщениями с сервером DHCP и записывает результат в общие регистры (наш вывод из списка протоколов и карты регистров).

Что записывает программа

РегистрАдресЧто хранитПосле сброса
SHAR0x0009–0x000EMAC-адрес, 6 байтнули
SIPR0x000F–0x0012свой IP-адреснули
SUBR0x0005–0x0008маска подсетинули
GAR0x0001–0x0004шлюзнули

Октеты пишутся в порядке записи адреса: 192.168.0.1 в GAR — это 0xC0, 0xA8, 0x00, 0x01. Пока в SIPR, SUBR и GAR нули, у W5500 нет адреса для обычного обмена — клиент DHCP или программа со статическими настройками как раз и заполняет их; MAC в SHAR записывают в любом случае (наш вывод).

Порядок запуска

  1. Проверить связь по SPI — регистр версии читается правильно: ответ «Как проверить, что W5500 отвечает по SPI».
  2. Записать MAC-адрес в SHAR.
  3. Дождаться физической связи (бит LNK регистра PHYCFGR).
  4. Запустить клиент DHCP библиотеки или записать статические адрес, маску и шлюз.

Если адрес получить не удалось, программа должна это заметить: компьютер в такой ситуации назначил бы себе 169.254.x.x по RFC 3927, а W5500 останется с тем, что записано в регистрах. Адрес, маску и шлюз для статической настройки подберёт калькулятор подсетей; выводы и параметры микросхемы — на странице W5500.

Похожие вопросы

Почему DHCP на W5500 не получает адрес?

Частые причины: не записан MAC-адрес — регистр SHAR после сброса нулевой; нет физической связи — бит LNK регистра PHYCFGR равен 0; в сети нет сервера DHCP, например при прямом подключении к компьютеру; все сокеты заняты, и программе не на чем открыть UDP. Проверяйте по порядку — от связи к программе.

Какой MAC-адрес задать W5500?

Уникальный в вашей сети: регистр SHAR после сброса нулевой, и программа обязана его записать. Две платы с одинаковым MAC в одной сети будут мешать друг другу. Где взять адрес и как устроен MAC, объясняет словарная статья «MAC-адрес Ethernet».

Можно ли обойтись без DHCP?

Да: запишите в SIPR, SUBR и GAR статический адрес, маску и шлюз из подсети вашей сети — W5500 начнёт работать сразу. Адрес выбирайте вне пула DHCP роутера, иначе он может достаться другому устройству.

Источники

  1. WIZnet. W5500 Datasheet v1.1.0, 2022 — с. 1: аппаратный стек TCP/IP — TCP, UDP, ICMP, IPv4, ARP, IGMP, PPPoE; 8 независимых сокетов; разд. 4.1, общие регистры: GAR 0x0001–0x0004 (шлюз), SUBR 0x0005–0x0008 (маска), SHAR 0x0009–0x000E (MAC), SIPR 0x000F–0x0012 (свой IP), значение после сброса 0x00
  2. IETF. RFC 3927: Dynamic Configuration of IPv4 Link-Local Addresses, 2005 — префикс 169.254/16 — адреса, которые узел назначает себе без DHCP; действуют только внутри канала

Нашли ошибку?