W5500 silicon bugs?


I’m working with a W5500 in MACRAW mode and discovered these strange behaviors:

  • after sending a frame by Sn_CR = 0x20 I read in Sn_IR to ensure the frame was sent. But Sn_IR always reads as 0x20 instead of 0x10.
  • I’m only interested in RECV interrupts and set Sn_IMR to 0x02. But when RSTn goes down then Sn_IR had 0x10 instead of 0x04
  • when sending an ARP request the Protocol Type field is always corrupted (0x3012 instead of 0x0800)


I think you read wrong value. Sn_IR cannot be 0x20.

First read version register and check it is right value.


Error #1:
I already checked VERSIONR before.
That would be quite weird to have a substantial bug in my spi lib although sending and receiving works flawlessly.

Error #2 and #3:
what about these?

All about errors may be occurred by register access, I think.

You can access memory correctly, but you cannot access register correctly.

So, I recommend to debug SPI lib or check SPI pins by like oscilloscope.

Thanks for coming back to me.

But before I do access memory I read Sn_RX_RSR to get frame length and read Sn_RX_RD to get start address.
How can spi fail on Sn_IR but work for all other registers?

I’ve already spent quite a bit of time on debugging and like to get some kind of proof that this behavior can’t be reproduced :wink:

If you like, do the following test:

  • initialize with MACRAW
  • enable RECV interrupt on socket 0
  • open socket and send some data
  • loop until Sn_IR == SENDOK

That’s where I get an infinite loop.