---
title: "W5500 silicon bugs?"
url: "https://maker.wiznet.io/forum/10571"
markdown_url: "https://maker.wiznet.io/forum/10571/md"
type: "Forum topic"
category: "Ethernet Chips"
author: "Zick"
created: "2014-10-02T12:22:36+09:00"
last_activity: "2017-05-04T08:34:01+09:00"
language: "en"
views: 791
replies: 4
source: "WIZnet Makers forum (https://maker.wiznet.io/forum/)"
---

# W5500 silicon bugs?

## Question

Asked by Zick on 2014-10-02 in Ethernet Chips.

Hi,

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)

## Replies

### Reply 1 by hjjeon0608, 2014-10-05

Hi,

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

First read version register and check it is right value.

Thanks.

### Reply 2 by Zick, 2014-10-06

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?

### Reply 3 by hjjeon0608, 2014-10-07

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.

### Reply 4 by Zick, 2014-10-07

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:](https://emoji.discourse-cdn.com/twitter/wink.png?v=12)

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.

---

Source: https://maker.wiznet.io/forum/10571
