W5500 version returning 0

Hi guys,

I have problems with setting up my W5500 chip using ESP32 on Arduino. For version read, I always get 0x00 instead of 0x04, could you help me with that problem? Please see my code below and screenshot from DSView.

#include <SPI.h>
#define CS  5

SPISettings wiznet_SPI_settings(1000000, MSBFIRST, SPI_MODE0);

void setup() {
    pinMode(CS, OUTPUT);
    digitalWrite(CS, HIGH);

    digitalWrite(CS, LOW);
    byte temp = SPI.transfer(0x00);
    digitalWrite(CS, HIGH);
    Serial.print("Device version: 0x0");
    Serial.println(temp, HEX);

void loop() {

When CS is high, MISO is expected to be Hi-Z. How it happens that for you it is low? Is it real measurement or simulation?

My guess is, that my logic analyzer does not catch high impedance state. This is not simulation, all wires are attached to circuit.

Ok, you seem to do things properly, but for some reason there’s 0 in the data phase.
I am searching through datasheet, can not find it saying that W5500 must return 0x01, 0x02, and 0x03 on MISO line. I am sure it is somewhere in there.

W5100 datasheet has respective pic about it, but that chip return 0x00, 0x01, 0x02.

Idea: don’t you accidentally drive MISO low with MCU during read operation? The only reason I see could be defective W5500, or something concurrently puts 0x00 onto the line.

Well, I plugged in another SPI driven module to my ESP32 devkit and everything works just fine. I soldered another PCB for W5500 and it works, I get 0x04 as version, on logic analyzer I can clearly see all sequence on MISO (0x01, 0x02, 0x03, 0x04). Probably first W5500 is broken, but this is quite weird that first three bytes are ok and the fourth one is missing. Is it common with W5500?

No, but if you solder by hand you must be very careful not to overheat the device.