W5500 TCP/IP Sending Issue


I’m using the evaluation board WIZ550io along with a Cyclone IV FPGA which communicates using SPI with the W5500 chip. I’m able to establish a TCP connection with the chip and also receive data. I’m looking for help in sending the data out. I can see a lot of junk on the screen after triggering the SEND (0x20) command along with my data somewhere in the middle. The process is not very clear from the datasheet.
Could someone please help me in understanding the pointer description for the TX Write (0x0024 and 0x0025) in detail.
I think I am having issues in understanding how to save the data into the TX Buffer.

I am doing the following steps after establishing a connection for sending data:

  1. Reading the Sn_TX_WR pointer from offset 0x0024
  2. Writing the data i want to send to offset 0x0025 (Sn_TX_WR0)
  3. Update the Sn_TX_WR pointer to the 'original_value + no_of_bytes_I_write
  4. Trigger the SEND command (Sn_CR = 0x20)

All of the above I’m doing it for Socket 0. I also tried the ‘N-Bytes Write Access Example’ from the datasheet on page 20. How is the address phase 0x0040 there? Shouldn’t it be the TX Write Pointer (offset 0x0025)?

Thank you for the support in advance.

Hello bjargav05,

Where you able to fix this problem? I am stranded at the same point and I can not find any other information to fix this beside this unsolved post.

I am able to connect through TCP and I am able to send something, but its duplicating what I am sending multiple times covered in a lot of unknow data dump.

Can someone explain the steps that you need to take after the Connect command until the Send command?
You do not have to write it in code, just telling which registers you need to use and especialy why is enough.

I am trying to send 3 bytes of data in a tcp protocol as a client (computer is the server), so it should not be that hard i thought… :smile: But i am breaking my brain over it…

Its awfully quiet here. I mean, its an old post that not have been awnsered. But also on my own post nobody reactes. Either the question is too hard or too stupid :stuck_out_tongue:

Below schematic on what I do to and how I think the tx buffer writing for TCP should work based on what I understand of the documentation.

Result is that it does send data, but also a lot of other random stuff. And the amount depends on how quick I runt the program. If I do it really fast (so no delays in this part) than it will send nothing (just a connect, but not even disconnect).
If I go fast but a bit slower (debug mode and going quickly step by step through the code) it prints out the stuff I want, but also some extra random material.
If I go really slow (long delay in the program or really slow step by step in debug) it send out maximum random data with some traces of what I wanted to send.

So any ideas?

Hi Delta,

your graphic representation was very helpful as I was having the same problem as Bhargav05. But I still am not able to send data from Zybo to Wireshark using 5500. I am using TCP mode too. I am able to establish the Three way handshake but only thing thats not being sent is the Data(12 byte).

Also How do you set the length of the frame? I am having a lil trouble loading the increased value of the address to TX_WR. Any help or suggestion is appreciated

Read Sn_TX_WR0 and Sn_TX_WR1 in specific order explained in datasheet to make up 16-bit pointer. Then see “Register and Memory Organization” of the datasheet. Write data you need to send to the respective TX buffer (for the socket you use, buffer is cyclical, physical address is derived from WR pointer and depends on the sizes of the buffers set up in the chip). Then update Sn_TX_WR0 and Sn_TX_WR1 and issue SEND command.
I recommend you reading the datasheet, or at least scanning through it and then thoroughly reading parts about memory and pointer management. All info you need is in the datasheet, but you won’t be able to peek it in pieces properly without getting basics of the chip organization and logic.

1 Like