W5500
W5500
Кто работал с этим чудом - отзовитесь пожалуста
Не могу с ним связаться по SPI
В лучшем случае после трансмита 4 байта единиц ....
Разное пробывал:
1 на микроконтроллере MI MO соединял - работает - дело в w5500
2 CS на землю бросал - не помогло
3 ресет w5500 делал
4 подключал с витой паре
5 другие регистры пробывал читать
...
ничего не помогло
А самое главное - как он должен реагировать когда режим SPI не правильный или когда формат команды не тот (тоже вроде всё перепробывал)?
Не могу с ним связаться по SPI
В лучшем случае после трансмита 4 байта единиц ....
Разное пробывал:
1 на микроконтроллере MI MO соединял - работает - дело в w5500
2 CS на землю бросал - не помогло
3 ресет w5500 делал
4 подключал с витой паре
5 другие регистры пробывал читать
...
ничего не помогло
А самое главное - как он должен реагировать когда режим SPI не правильный или когда формат команды не тот (тоже вроде всё перепробывал)?
- Реклама
Re: W5500
[uquote="VVVa",url="/forum/viewtopic.php?p=4609557#p4609557"]Кто работал с этим чудом - отзовитесь[/uquote]
я много лет работаю...
и тут...
https://www.radiokot.ru/forum/viewtopic ... 8&t=190542
и тут...
https://www.radiokot.ru/forum/viewtopic ... 3&t=166654
и повсюду))
никаких проблем нет)) W5500 работает идеально))

я много лет работаю...
и тут...
https://www.radiokot.ru/forum/viewtopic ... 8&t=190542
и тут...
https://www.radiokot.ru/forum/viewtopic ... 3&t=166654
и повсюду))
никаких проблем нет)) W5500 работает идеально))
- Starichok51
- Модератор
- Сообщения: 19053
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: W5500
надо пробОвать, а не пробЫвать, тогда всё получится.VVVa писал(а):Разное пробывал:
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
- AlanDrakes
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Пн июл 04, 2016 16:51:22
- Откуда: Россия, Омск
Re: W5500
Вообще, w5500 по большей части беспроблемный чип. Читается-пишется на скоростях до 20МГц точно (быстрее не требовалось разгонять, но по Datasheet'у - до 33МГц (гарантированно) и 80МГц (теоретически)).
Для проверки пробуйте читать его регистр версии (0x39) - должно возвращаться значение "4"
Ну и вся посылка (для проверки) должна выглядеть так: (биты выталкиваются от старшего к младшему).
0x00, 0x39, 0x01, 0x00
Чип должен ответить:
0x??, 0x??, 0x??, 0x04
Не забудьте добавить слабую подтяжку линии MISO к земле, чтобы не ловить помехи. Ну и направление собственно пина проверьте. Сам на эти грабли наступал.
Для проверки пробуйте читать его регистр версии (0x39) - должно возвращаться значение "4"
Ну и вся посылка (для проверки) должна выглядеть так: (биты выталкиваются от старшего к младшему).
0x00, 0x39, 0x01, 0x00
Чип должен ответить:
0x??, 0x??, 0x??, 0x04
Не забудьте добавить слабую подтяжку линии MISO к земле, чтобы не ловить помехи. Ну и направление собственно пина проверьте. Сам на эти грабли наступал.
Re: W5500
судя по даташиту он работаеть должен с ARM_SPI_CPOL0_CPHA0 (The W5500 supports SPI Mode 0 and Mode 3)?
"Не забудьте добавить слабую подтяжку линии MISO к земле, чтобы не ловить помехи." - а почему это нужно ? резистор мегаомный? (может там открытый коллектор и к питанию нужно притянуть?)
"Ну и направление собственно пина проверьте." - замыкал на микроконтроллере MI и MO - получил что отправил вроде проверил
спасибо!
Добавлено after 37 minutes 11 seconds:
упс! работает ...
просто с частотой часиков в микроконтроллере намудрил...
утро вечера мудренеее...
Всем спасибо!
"Не забудьте добавить слабую подтяжку линии MISO к земле, чтобы не ловить помехи." - а почему это нужно ? резистор мегаомный? (может там открытый коллектор и к питанию нужно притянуть?)
"Ну и направление собственно пина проверьте." - замыкал на микроконтроллере MI и MO - получил что отправил вроде проверил
спасибо!
Добавлено after 37 minutes 11 seconds:
упс! работает ...
просто с частотой часиков в микроконтроллере намудрил...
утро вечера мудренеее...
Всем спасибо!
- Реклама
Re: W5500
проблемный чип!!!
Если получать и отправлять до 4 байт, то всё нормально (в заголовке размер указывается)
А вот если надо больше 4х байт за раз - то CS сигнал хардовый с STM32 почемуто ему не нравится, после него выдаёт бред...
Это все по 4 байта читают или у когото работает?
А не подскажите он DHCP поддерживает или нет? И что в него отправить чтоб автоматом IP с маской получал?
Если получать и отправлять до 4 байт, то всё нормально (в заголовке размер указывается)
А вот если надо больше 4х байт за раз - то CS сигнал хардовый с STM32 почемуто ему не нравится, после него выдаёт бред...
Это все по 4 байта читают или у когото работает?
А не подскажите он DHCP поддерживает или нет? И что в него отправить чтоб автоматом IP с маской получал?
- HardWareMan
- Мучитель микросхем
- Сообщения: 431
- Зарегистрирован: Ср сен 02, 2015 07:47:20
Re: W5500
DHCP это же протокол а не настройка. Хотя, если оно в ICMP умеет, то есть вероятность что и в DHCP тоже умеет. Надо в букваре смотреть.
Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ
Актуальность репозитория: 22 апреля 2026 года
Если чего-то не хватает с сайта st.com - пишите, докачаю.
/!\ Обновлений для STM32PowerMon и STM32PowerMon-UCPD временно не будет.
Актуальность репозитория: 22 апреля 2026 года
Если чего-то не хватает с сайта st.com - пишите, докачаю.
/!\ Обновлений для STM32PowerMon и STM32PowerMon-UCPD временно не будет.
Re: W5500
просбома с CS решилась - просто програмно пин дёргаю ... работает
А вот DHCP ни в какую ...
Может оно ни у кого не работает?
Так TCP тоже протокол поверх сырых сокетов ... почему одни протоколы есть, а других нету
А вот DHCP ни в какую ...
Может оно ни у кого не работает?
Так TCP тоже протокол поверх сырых сокетов ... почему одни протоколы есть, а других нету
- HardWareMan
- Мучитель микросхем
- Сообщения: 431
- Зарегистрирован: Ср сен 02, 2015 07:47:20
Re: W5500
[uquote="VVVa",url="/forum/viewtopic.php?p=4611819#p4611819"]Так TCP тоже протокол поверх сырых сокетов ... почему одни протоколы есть, а других нету[/uquote]
Без DHCP жить можно а без TCP - нет. А внутри места, видимо, не так много. Я работал с W5300, но не было надобности в DHCP. Вот тут тема с вопросом про DHCP, посмотри, может чего интересного найдёшь.
Без DHCP жить можно а без TCP - нет. А внутри места, видимо, не так много. Я работал с W5300, но не было надобности в DHCP. Вот тут тема с вопросом про DHCP, посмотри, может чего интересного найдёшь.
Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ
Актуальность репозитория: 22 апреля 2026 года
Если чего-то не хватает с сайта st.com - пишите, докачаю.
/!\ Обновлений для STM32PowerMon и STM32PowerMon-UCPD временно не будет.
Актуальность репозитория: 22 апреля 2026 года
Если чего-то не хватает с сайта st.com - пишите, докачаю.
/!\ Обновлений для STM32PowerMon и STM32PowerMon-UCPD временно не будет.
Re: W5500
ну я как то вот много лет уже живу без дебильного TCP ... и нормально так ))HardWareMan писал(а):ез DHCP жить можно а без TCP - нет.
Добавлено after 1 minute 52 seconds:
[uquote="VVVa",url="/forum/viewtopic.php?p=4611819#p4611819"]А вот DHCP ни в какую ...[/uquote]
DHCP у W5500 нет... самому писать надо... а в чём проблема ? када мне надо было DHCP я писал...
Добавлено after 3 minutes 50 seconds:
у меня вот много лет уже W5500 работает прекрасно... никаких проблем нет... от слова ваще))
Re: W5500
roman.com!
Да Вы как я погляжу аскет... и даже каждый раз ip c маской вводить не ленитесь при перенастройке сети...
Может скажите почему ему хардовый CS не понравился с STM32F401CCU6?
Да Вы как я погляжу аскет... и даже каждый раз ip c маской вводить не ленитесь при перенастройке сети...
Может скажите почему ему хардовый CS не понравился с STM32F401CCU6?
Re: W5500
Спасибо, насмешил. Когда человек употребляет "вумное" слово, не понимая его смысл - хороший ржач.
Но телепатически я уловил содержимое: имел в виду "эстет".
Но телепатически я уловил содержимое: имел в виду "эстет".
Re: W5500
- он имел в виду "аскет".
- я не аскет.. я продвинутый пользователь))
- DHCP есть в роутере)) одного DHCP в сети достаточно... самому писать DHCP не надо.
формат работы по SPI задаётся в настройках W5500...
в этом режиме надо после передачи каждой команды поднимать CS... (устанавливать высокий уровень на выводе CS).
высокий уровень на выводе CS модуль W5500 воспринимает как окончание команды...
проверьте формат работы по SPI в своей программе...

Добавлено after 4 minutes 23 seconds:
чтоб не ходить далеко...
вот рабочая схема... вот рабочая программа...
-инициализация W5500:
и т.д.

- тут я использую режим MACRAW.
в этом режиме W5500 тупо принимает и отправляет Ethernet пакеты.
больше ничего W5500 в этом режиме не делает))
а все Интернет протоколы у меня зашиты в МК типа ATmega328.
- другие режимы есть по ссылке что я давал выше...

- я не аскет.. я продвинутый пользователь))
- DHCP есть в роутере)) одного DHCP в сети достаточно... самому писать DHCP не надо.
у W5500 есть разные форматы работы по SPI...VVVa писал(а):Может скажите почему ему хардовый CS не понравился с STM32F401CCU6?
формат работы по SPI задаётся в настройках W5500...
- я использую формат работы по SPI с управлением по CS...VVVa писал(а):просбома с CS решилась - просто програмно пин дёргаю ... работает
в этом режиме CS на землю бросал нельзя...VVVa писал(а):CS на землю бросал - не помогло
в этом режиме надо после передачи каждой команды поднимать CS... (устанавливать высокий уровень на выводе CS).
высокий уровень на выводе CS модуль W5500 воспринимает как окончание команды...
проверьте формат работы по SPI в своей программе...
Добавлено after 4 minutes 23 seconds:
чтоб не ходить далеко...
вот рабочая схема... вот рабочая программа...
-инициализация W5500:
Код: Выделить всё
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////W5500 PHY:
//перед настройкой PHY сделать программный Cброс PHY:
PORTB.2=0; // SS W5500
tx=0x00; SPI(); tx=0x2E; SPI(); tx=0x04; SPI(); // Address Registers + Control Registers
tx=0x00; SPI(); // Data -0x00
tx=0x00; SPI(); // Data -0x00
PORTB.2=1; // SS W5500
//пишем режим PHY:
// 1... .... RST - 1.
// .1.. .... программная настройка режима - 1
// ..0. .... 10BT Full-duplex, Auto-negotiation disabled / Power Down mode
// ...0 .... 10BT Full-duplex, Auto-negotiation disabled / Power Down mode
// .... 1... 10BT Full-duplex, Auto-negotiation disabled / Power Down mode
// .... .1.. Duplex Status
// .... ..0. Speed Status
// .... ...1 Link Status
PORTB.2=0; // SS W5500
tx=0x00; SPI(); tx=0x2E; SPI(); tx=0x04; SPI(); // Address Registers + Control Registers
tx=0xC8; SPI(); // Data -0xC8 (10 Мбит/с, Full-duplex)
tx=0x00; SPI(); // Data -0x00
PORTB.2=1; // SS W5500
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////Socket_0 - MACRAW:
//протокол: пишем протокол MACRAW Socket_0:
PORTB.2=0; // SS W5500
tx=0x00; SPI(); tx=0x00; SPI(); tx=0x0C; SPI(); // Address Registers + Control Registers
tx=0x04; SPI(); // Data -0x04 // MACRAW // Socket_0
PORTB.2=1; // SS W5500
//пишем команду OPEN Socket_0:
PORTB.2=0; // SS W5500
tx=0x00; SPI(); tx=0x01; SPI(); tx=0x0C; SPI(); // Address Registers + Control Registers
tx=0x01; SPI(); // Data -0x01 (команда OPEN)
PORTB.2=1; // SS W5500
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////Socket_0 - INT:
//INT Mask Socket_0: пишем INT Mask Socket_0: (SIMR) 0x0018
PORTB.2=0; // SS W5500
tx=0x00; SPI(); tx=0x18; SPI(); tx=0x04; SPI(); // Address Registers + Control Registers
tx=0x01; SPI(); // Data 0x01 -Enable INT Socket_0.
PORTB.2=1; // SS W5500
//INT Mask Socket_0 RECV: пишем INT Mask завершение приёма Socket_0: (Sn_IMR) 0x002C
PORTB.2=0; // SS W5500
tx=0x00; SPI(); tx=0x2C; SPI(); tx=0x0C; SPI(); // Address Registers + Control Registers
tx=0x04; SPI(); // Data 0x04 -INT Mask завершение приёма.
PORTB.2=1; // SS W5500
}
////////////////////////////////////////////////////////////////////////////////- тут я использую режим MACRAW.
в этом режиме W5500 тупо принимает и отправляет Ethernet пакеты.
больше ничего W5500 в этом режиме не делает))
а все Интернет протоколы у меня зашиты в МК типа ATmega328.
- другие режимы есть по ссылке что я давал выше...
- AlanDrakes
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Пн июл 04, 2016 16:51:22
- Откуда: Россия, Омск
Re: W5500
[uquote="VVVa",url="/forum/viewtopic.php?p=4612055#p4612055"]Может скажите почему ему хардовый CS не понравился с STM32F401CCU6?[/uquote]
У меня работает с аппаратным /CS. Разве что он включается-выключается при включении-выключении бита разрешения работы SPI-блока в контроллере.
Поднял исходники, мигрирующие по разным чипам, с которыми работал... и я отправляю данные в режиме VDM (Variable length Data Mode) и проблем нет.
Если что-то не работает - первым делом проверяйте код. А вообще обзаведитесь логическим анализатором, хотя бы простейшим, чтобы понимать, что происходит на шине.
DHCP - да, требуется программный, либо статика. А сам чип его не умеет делать (да и не надо).
У меня работает с аппаратным /CS. Разве что он включается-выключается при включении-выключении бита разрешения работы SPI-блока в контроллере.
Поднял исходники, мигрирующие по разным чипам, с которыми работал... и я отправляю данные в режиме VDM (Variable length Data Mode) и проблем нет.
Если что-то не работает - первым делом проверяйте код. А вообще обзаведитесь логическим анализатором, хотя бы простейшим, чтобы понимать, что происходит на шине.
DHCP - да, требуется программный, либо статика. А сам чип его не умеет делать (да и не надо).
Спойлер
Код: Выделить всё
volatile uint8_t TX_BUF_1[8]; // Заголовок и первый байт (если один)
volatile uint8_t RX_BUF_1[8]; // Буфер под ответ (если 1 байт данных)
void w5500_SPI_TXRX(uint16_t RamAddress, uint8_t Register, uint8_t RW, uint16_t DataSize, void *DataAddress) {
Register = Register & 0x1F;
RW = RW & 0x01;
RX_BUF_1[3] = 0;
TX_BUF_1[0] = (RamAddress >> 8);
TX_BUF_1[1] = (RamAddress & 0xFF);
TX_BUF_1[2] = (Register << 3) | (RW << 2);
TX_BUF_1[3] = *((uint8_t *)DataAddress);
SPI2->CR2 |= SPI_CR2_SSOE; // Enable CS output.
SPI2->CR1 |= SPI_CR1_SPE; // Включаем SPI2
DMA1->LIFCR = 0x0F600000;
DMA1->HIFCR = 0x0000003D;
// Отправляем заголовок и до 5 байт вслед за ним (требуется для отправки данных, которые передаются через стэк).
// Требуется для передачи настроек.
if (DataSize == 1) {
DMA1_Stream4->NDTR = 4;
DMA1_Stream3->NDTR = 4;
} else if (DataSize == 2) {
DMA1_Stream4->NDTR = 5;
DMA1_Stream3->NDTR = 5;
DataAddress++;
TX_BUF_1[4] = *((uint8_t *)DataAddress);
DataSize--;
} else if (DataSize == 4) {
DataAddress++;
TX_BUF_1[4] = *((uint8_t *)DataAddress);
DataAddress++;
TX_BUF_1[5] = *((uint8_t *)DataAddress);
DataAddress++;
TX_BUF_1[6] = *((uint8_t *)DataAddress);
DMA1_Stream4->NDTR = 7;
DMA1_Stream3->NDTR = 7;
DataSize -= 3;
}
DMA1_Stream4->M0AR = (uint32_t)&(TX_BUF_1);
DMA1_Stream3->M0AR = (uint32_t)&(RX_BUF_1);
DMA1_Stream4->CR |= DMA_SxCR_MINC;
DMA1_Stream3->CR |= DMA_SxCR_MINC;
DMA1_Stream3->CR |= DMA_SxCR_EN;
DMA1_Stream4->CR |= DMA_SxCR_EN;
while (DMA1_Stream3->CR & DMA_SxCR_EN);
while (DMA1_Stream4->CR & DMA_SxCR_EN);
// Сбрасываем флаги
DMA1->LIFCR = 0x0F600000;
DMA1->HIFCR = 0x0000003D;
if (!RW) {
*((uint8_t *)DataAddress++) = RX_BUF_1[3];
}
DataAddress++;
DataSize--;
if (DataSize) {
// Если более 1 байта данных - передача будет продолжена.
DMA1_Stream4->NDTR = DataSize;
DMA1_Stream3->NDTR = DataSize;
if (RW) {
// TX
DMA1_Stream4->M0AR = (uint32_t)DataAddress;
DMA1_Stream3->M0AR = (uint32_t)&(DevNull);
DMA1_Stream4->CR |= DMA_SxCR_MINC;
DMA1_Stream3->CR &= ~(DMA_SxCR_MINC);
} else {
// RX
DevNull = 0;
DMA1_Stream4->M0AR = (uint32_t)&(DevNull);
DMA1_Stream3->M0AR = (uint32_t)DataAddress;
DMA1_Stream4->CR &= ~(DMA_SxCR_MINC);
DMA1_Stream3->CR |= DMA_SxCR_MINC;
}
DMA1_Stream3->CR |= DMA_SxCR_EN;
DMA1_Stream4->CR |= DMA_SxCR_EN;
while (DMA1_Stream3->CR & DMA_SxCR_EN);
while (DMA1_Stream4->CR & DMA_SxCR_EN);
}
SPI2->CR1 &= ~(SPI_CR1_SPE); // Disable SPI2
SPI2->CR2 &= ~(SPI_CR2_SSOE); // Disable CS output.
}
void w5500_Init(uint32_t IPAddr, uint32_t NetMask, uint32_t GW, uint8_t *Mac) {
w5500_SetMac(Mac);
w5500_SetLocalIP(IPAddr);
w5500_SetNetMask(NetMask);
w5500_SetGW(GW);
}
uint8_t Lan_Init(void) {
uint32_t i;
uint8_t v;
GPIOE->BSRR = GPIO_BSRR_BR_14;
LinkState = 0;
SPI_MUTEX = 0;
for (i=0;i<SOCKETS_COUNT;i++) {
Sock[i].flags = SOCKET_NON_USABLE;
}
RCC->AHB1ENR |= RCC_AHB1ENR_DMA2EN; // Enable DMA1
RCC->APB1ENR |= RCC_APB1ENR_SPI2EN; // Enable SPI2
delay_ms(1);
GPIOE->BSRR = GPIO_BSRR_BS_14; // UnReset W5500
delay_ms(2);
v = w5500_GetVersion();
if (v != 0x04) {
console_timestamp();
console_put("eth0: PHY not detected. Chip version: 0x");
console_put_hex_byte(v);
console_put(" != 0x04\r\n");
return 0x02;
}
// Сброс чипа. Софт-ресет.
v = MR_RST;
i = 0;
w5500_SetMode(v);
while(v) {
delay_us(100); // Ожидаем окончания сброса кристалла.
v = w5500_GetMode(); // Читаем состояние регистра
v = (v & MR_RST); // Выбираем только флаг сброса
i++; // Отсчитываем время
if (i > 100) {
// Если больше 100 мс - сбой.
console_timestamp();
console_put("eth0: Reset timeout.\r\n");
break;
}
}
if (v == MR_RST) {
return 0x01; // Если сброс не завершился - выходим с ошибкой
}
for (i=0;i<SOCKETS_COUNT;i++) {
w5500_SetSocketMem(i, 2, 2); // Устанавливаем стандартное распределение памяти
}
w5500_Init(ntohl(System_IPAddress), ntohl(System_NetMask), ntohl(System_GW), System_MACAddress);
return 0; // Временно-постоянно
}



