W5100S - MACRAW mode doesn't work

Hi all,
I bought a W5100S chip and built my own custom board with it. Schematics is an exact copy of the schematics provided by Wiznet ( as described in W5100S_ext_Ref_Schematic_V110.pdf).
I’m also using the most recent firmware from github. I work only with MACRAW mode.
If I select W5100 as chip type (wizchip_conf.h: #define WIZCHIP W5100), then everything works in accordance with datasheet, which says that W5100S is firmware compatible with W5100.
But, if I select chip type W5100S (wizchip_conf.h: #define WIZCHIP W5100S), then nothing works.
In summary, W5100S works with W5100 FW, but why it does not work with its own FW.

First, I was not sure if we bought the correct chip type. But then reading the printed label on the chip with a magnifier (not easy to read with a naked eye), the print on the chip says “W5100S” as expected.

So, what am I missing? Beats me.

PS: The reason I’m trying to migrate to W5100S firmware is to be able to use burst send/receive feature of W5100S.

Hi~ rogerthat

Could you please try to test the loopback TCP?
I will try to test as MACRAW.
I will tell you the test results as soon as possible.

Best regards

Hello Irina,

First good news: I tried TCP loop-back test and the result was a SUCCESS with both chip variants.

Then, I started debugging the whole library code.
It seems to me there is a problem around the code snippet socket.c → recvfrom(…) → case Sn_MR_MACRAW: .

Somehow the condition if(sock_remained_size[sn] > 1514) becomes true and socket is closed.
Note: I also sometimes observe that (head[0]+head[1]) equals 0 and then 2 is subtracted, which results in a huge number (i.e., 0 - 2 = 0xFFFE).

I searched this forum about similar problems and have seen some issues with other chips in the past where some kind of overflow is involved. I suppose those problems already belong to the past and current library code must be fully tested and functional.

Hope you come back with some good news upon finishing your MACRAW test!

PS: There may also be a minor copy-paste error in function wizchip_conf.c → wizchip_init()

while((rxsize[i] >> j != 1)&&(txsize[i] !=0)){j++;}

But this is not responsible for my situation.