Как проверить, что W5500 отвечает по SPI?
Обновлено Редакция GAW
У W5500 есть регистр, значение которого известно заранее: VERSIONR по адресу 0x0039 в блоке общих регистров всегда содержит 0x04 (WIZnet, разд. 3.1). Прочитать его — самый быстрый способ понять, разговаривает ли микроконтроллер с микросхемой. Так же поступает и библиотека Ethernet для Arduino: при запуске она пишет и читает регистр режима и сверяет VERSIONR с 4 (isW5500() в w5100.cpp).
| Байт | Значение | Что означает |
|---|---|---|
| 1 | 0x00 | старший байт адреса |
| 2 | 0x39 | младший байт адреса: VERSIONR |
| 3 | 0x00 | управление: блок 00000 (общие регистры), RWB = 0 (чтение), OM = 00 (длина по CS) |
| 4 | любой | W5500 выдаёт на MISO значение 0x04 |
Кадр W5500 состоит из 16-битного адреса, байта управления и данных, старшим битом вперёд; режим SPI — 0 или 3 (разд. 2.1–2.2).
Если пришло не 0x04
| Ответ | Вероятная причина | Что проверить |
|---|---|---|
| 0xFF или 0x00 | микросхема не отвечает | CS опускается в ноль, питание 3,3 В, провод MISO, вывод RSTn в единице, кварц 25 МГц |
| случайные значения | ошибки тактирования | режим SPI 0 или 3, частота SCK, длина проводов |
| то верно, то нет | другое устройство на шине SPI | CS остальных устройств в единице |
Сброс: RSTn держат в нуле не меньше 500 мкс, а после его отпускания внутренней ФАПЧ нужно до 1 мс (табл. выводов, разд. 5.5.1) — читать регистры раньше бессмысленно. Частоту SCK WIZnet указывает до 80 МГц, но гарантирует работу на 33,3 МГц (разд. 5.5.4).
Общие причины, по которым SPI возвращает 0xFF, разобраны в ответе «Почему SPI читает только 0xFF?», режимы и сигналы шины — в статье «SPI». Чем W5500 удобнее ENC28J60 на Arduino — в ответе «Что лучше для Arduino: W5500 или ENC28J60?», разводка разъёма и трансформатора — в статье «Ethernet для микроконтроллера».
Похожие вопросы
Какие байты отправить, чтобы прочитать VERSIONR?
При CS в нуле: 0x00 и 0x39 — адрес, 0x00 — байт управления (блок общих регистров, чтение, режим переменной длины), затем любой байт, во время которого W5500 выдаст значение. Должно прийти 0x04; после этого CS поднимают.
Почему W5500 работает на 8 МГц, а на 40 МГц нет?
WIZnet пишет, что микросхема рассчитана на SCK до 80 МГц, но гарантированно проверена на 33,3 МГц. Выше этой частоты, да ещё на длинных проводах до модуля, ошибки чтения ожидаемы — снизьте частоту SPI.
VERSIONR читается, а сеть не работает. Что дальше?
Прочитайте регистр PHYCFGR (0x002E): бит 0 LNK показывает, есть ли связь с коммутатором, бит 1 SPD — скорость 100 или 10 Мбит/с. Если LNK = 0, проверьте кабель, разъём с трансформатором и кварц 25 МГц; если связь есть — настройки IP, шлюза и маски.
Источники
- WIZnet. W5500 Datasheet v1.1.0 (17 Dec 2022) — разд. 2.1 — SPI режимы 0 и 3, старший бит первым; разд. 2.2 — кадр из фазы адреса (16 бит), фазы управления (BSB[4:0], RWB, OM[1:0]) и данных; режим VDM — длина задаётся сигналом SCSn; разд. 3.1 — VERSIONR [0x0039] всегда 0x04, PHYCFGR [0x002E], бит 0 LNK — связь есть, бит 1 SPD — 100 Мбит/с; табл. выводов — RSTn держать в нуле не меньше 500 мкс; разд. 5.5.1 — после сброса до захвата ФАПЧ до 1 мс; разд. 5.5.4 — SCK до 80 МГц, проверено на 33,3 МГц
- Arduino. Ethernet library 2.0.2 (arduino-libraries/Ethernet), src/utility/w5100.cpp — W5100Class::isW5500 — запись и чтение регистра режима и проверка VERSIONR == 4; при отсутствии ответа init возвращает 0 («no chip»)
Нашли ошибку?
Смотрите также
- Ethernet для микроконтроллераW5500, ENC28J60, MAC + PHY по RMII, LAN8720, DP83848, трансформатор и разводка
- SPISCLK, MOSI, MISO, CS, режимы 0–3, daisy chain, частота, SPI в AVR
- Почему SPI читает только 0xFF?Ведомый не выбран, нет тактов, ведущий стал ведомым
- Что лучше для Arduino: W5500 или ENC28J60?W5500: стек TCP/IP в микросхеме и штатная библиотека Ethernet