W5500 Arduino lib, SPI no answer


#1

Hello,
I have custom design where atmeg644 is connected to w5500. atmeg644@16mhz is at 5v and direct SPI connect to w5500 3.3v SPI.
When etherenet cable is connected link led is off and data led blinking, so I assume w5500 chip is woirking more or less. All components except i have 12k resistor instead of 12.4k resistor on pin 10. are in place according recommended design.
Checked with osciloscope SPI sending atmega->w5500 works, CLK low-hight, MOSI high-low sending data at 5v, but nothing back on MISO pin. Using arduino library from github, tried bouth 1.0.x and 1.5.x no response.
sometimes there are some respones when trying to rread Ethernet.localIP() Ethernet.localIP() , Ethernet.subnetMask(), but wring bytes.


#2

From what I understand you can not even set the IP, subnet and gateway. You did not mention Signal SS (CS active low) to use as a chip select for the W5500 but I think you’ve connected. I am not speaking of the Arduino libraries because do not know them but a very important thing however is that you have to place a level translator for MISO and tests done (also with other devices such as the W5100) I was never given the certainty especially in speed .


#3

Yes, SS pin32 is connected to ground, the think is that I don’t get anything at all on 3.3v level MISO back. there are test code:

#include <ethernet/Ethernet.h>

byte macaa[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};

IPAddress ip(192,168,0, 177);
IPAddress gateway(192,168,0,1);
IPAddress dnss(192,168,0,1);

EthernetServer server(23);
boolean alreadyConnected = false; // whether or not the client was connected previously

void setup() {
Serial.begin(115200);
Serial.print(“start…”);
Ethernet.begin(macaa, ip, dnss, gateway);
server.begin();

delay(1000);

Serial.println(“Chat server address:”);
Serial.println(Ethernet.localIP());
Serial.println(Ethernet.subnetMask());
Serial.println(Ethernet.gatewayIP());
} //prints all zeros

void loop() {

// wait for a new client:
EthernetClient client = server.available();

// when the client sends the first byte, say hello:
if (client) {
if (!alreadyConnected) {
// clead out the input buffer:
client.flush();
Serial.println(“We have a new client”);
client.println(“Hello, client!”);
alreadyConnected = true;
}

if (client.available() > 0) {
  // read the bytes incoming from the client:
  char thisChar = client.read();
  // echo the bytes back to the client:
  server.write(thisChar);
  // echo the bytes to the server as well:
  Serial.write(thisChar);
}

}
}


#4

The W5500 can work in two different modes VDM and FDM.
In the first case you can use the W5500 with other devices connected in parallel on the SPI then the signal SS indicate to which, in the second mode instead the SPI is dedicated to the W5500 and you can not connect other devices.
Check fine libraries that uses because maybe they are to work with VDM and ( by datasheets ) changes the communication protocol. Referring to Arduino, if you try, connect the SS to the MPU.
I have always worked in VDM.
Another problem is perhaps the reset sequence.


#5

I watched two of Arduino shields and both use the SS pin so I think that even its libraries use the VDM mode only.
In VDM mode must respect the timing and unfortunately the signal SS is an integral part of the protocol (see datasheet).
As for the levels to 3.3V I had already tried to insert a level shifter on only MISO signal ( a MOSFET voltage translator ) but I had to give this thing because I had much lower frequency of the SSP and (always from datasheet) the W5500 had problems to work . Eventually you manage to supply the MPU at 3.3 V?


#6

Thank you, you where right, connecting SS to controller and switching it low just before transmit did helped, mow SPI works.


#7

Hello, if you have solved it, can you tell me how?

Thank you