Есть ли в W5500 клиент DHCP?
Обновлено Редакция GAW
W5500 держит стек TCP/IP в самой микросхеме, поэтому кажется, что и адрес она получит сама. Но в даташите среди «аппаратных» протоколов DHCP нет: W5500 умеет TCP, UDP, ICMP, IPv4, ARP, IGMP и PPPoE и даёт 8 независимых сокетов. DHCP — протокол поверх UDP, и его клиент работает в программе микроконтроллера: программа открывает UDP-сокет, обменивается сообщениями с сервером DHCP и записывает результат в общие регистры (наш вывод из списка протоколов и карты регистров).
Что записывает программа
| Регистр | Адрес | Что хранит | После сброса |
|---|---|---|---|
| SHAR | 0x0009–0x000E | MAC-адрес, 6 байт | нули |
| SIPR | 0x000F–0x0012 | свой IP-адрес | нули |
| SUBR | 0x0005–0x0008 | маска подсети | нули |
| GAR | 0x0001–0x0004 | шлюз | нули |
Октеты пишутся в порядке записи адреса: 192.168.0.1 в GAR — это 0xC0, 0xA8, 0x00, 0x01. Пока в SIPR, SUBR и GAR нули, у W5500 нет адреса для обычного обмена — клиент DHCP или программа со статическими настройками как раз и заполняет их; MAC в SHAR записывают в любом случае (наш вывод).
Порядок запуска
- Проверить связь по SPI — регистр версии читается правильно: ответ «Как проверить, что W5500 отвечает по SPI».
- Записать MAC-адрес в SHAR.
- Дождаться физической связи (бит LNK регистра PHYCFGR).
- Запустить клиент 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 роутера, иначе он может достаться другому устройству.
Источники
- 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
- IETF. RFC 3927: Dynamic Configuration of IPv4 Link-Local Addresses, 2005 — префикс 169.254/16 — адреса, которые узел назначает себе без DHCP; действуют только внутри канала
Нашли ошибку?
Смотрите также
- W5500Ethernet по SPI с аппаратным TCP/IP: выводы, PMODE, обвязка, ток
- Ethernet для микроконтроллераW5500, ENC28J60, MAC + PHY по RMII, LAN8720, DP83848, трансформатор и разводка
- Как проверить, что W5500 отвечает по SPI?Прочитать VERSIONR (0x0039): ответ 0x04, затем бит LNK в PHYCFGR
- Калькулятор подсетей IPv4Маска и CIDR, сеть, broadcast, узлы, частные диапазоны, деление на подсети
- MAC EthernetБлок, который формирует и принимает кадры Ethernet