You gave a look here : [url]https://github.com/Wiznet/W5500_EVB[/url]
There are two examples one for DHCP and the other for DNS that contain most of the C ++ functions that you need.
Still lack a bit before your macro instructions you must…
set the MAC address
set an IP address for your device
set the gateway addr
set subnet mask
…or implement DHCP
Then after you’ve written in your post make a loop on ever opened socket and verify when that pass to established.
So staying in the area of macro language …
While true
for sockreg as byte = 0 to (MAX_SOCK_NUM - 1)
sockstat as byte = ReadSocketReg(sockreg, Sn_SR)
Select sockstat
Case SOCK_CLOSED
If Socket(sockreg, Sn_MR_TCP, TCP_PORT, 0) Then // Reenter a closed socket in listen mode
If Not Listen(sockreg) Then
DelayForAWhile()
End If
End If
Case SOCK_ESTABLISHED
rsize as UShort = ReadSocketword(sockreg,Sn_RX_RSR0) // Get Recv Size
If rsize > 0 Then
rxpointer as UShort = ReadSocketword( sockreg, Sn_RX_RD0 ) // First byte RX Buffer location
/*
incoming stream is here at rxpointer
WIZCHIP_READ_BUF and other memory access function :
https://github.com/Wiznet/W5500_EVB/blob/master/ioLibrary/Ethernet/W5500/w5500.c
https://github.com/Wiznet/W5500_EVB/blob/master/ioLibrary/Ethernet/W5500/w5500.h
Socket related functions:
https://github.com/Wiznet/W5500_EVB/blob/master/ioLibrary/Ethernet/socket.c
https://github.com/Wiznet/W5500_EVB/blob/master/ioLibrary/Ethernet/socket.h
*/
rxpointer = rxpointer + 1
WritesocketWord(sockreg, Sn_RX_RD0, rxpointer ) // Increase readed position
WriteSocketReg(sockreg, Sn_CR, Sn_CR_RECV) // W5500 move the RX pointer
While(ReadSocketReg(sockreg, Sn_CR) <> 0 )
End While
End If
Case SOCK_FIN_WAIT,
SOCK_CLOSING,
SOCK_TIME_WAIT,
SOCK_CLOSE_WAIT,
SOCK_LAST_ACK
WriteSocketReg(sockreg, Sn_CR, Sn_CR_CLOSE) // Close this socket
While(ReadSocketReg(sockreg, Sn_CR) <> 0)
End While
End Select
Next sockreg
End While
Thank you for your reply,
When I try everything you said, I will reply again.
But firstly I would like to test the connection with W5500io over SPI, how can I do that? Maybe by sending a question and recieving an answer.
I tested W5500io with pinging. I connected the module on the supply and the router, I used pinging and the device responded well.
Now I would like to test the SPI communication. How?
Hello,
I’ve seen that uses Arduino 2 and I not have present at that point this MPU is about W5500 but I’m sure there is a working library for W5100 with Arduino One and then from there you can go to drive SPI.
Functions for drive a W5500 throw an SPI module is here [url]https://github.com/Wiznet/W5500_EVB/blob/master/ioLibrary/Ethernet/W5500/w5500.c[/url]
and are : WIZCHIP_READ, WIZCHIP_READ_BUF, WIZCHIP_WRITE_BUF, WIZCHIP_READ_BUF
In this module you can find function for transfer a buffer like wiz_send_data, wiz_recv_data , function for registers like getSn_TX_FSR and getSn_RX_RSR
Get to :
know better Arduino 2 SPI library
starts from WIZCHIP_READ and WIZCHIP_WRITE and modify them with calls to Arduino 2 SPI library
Then you are ready to read and write in W5500 registers ( IP, MAC and gateway registers).
It is what I have done to adapt the library to PIC24 family.
In this I can not help you because I do not know ATMEGA328P and even the development system for Arduino One or Arduino 2.
As I told… the operating principle is described in GitHub sources for the W5500 that is the basis.
You have to see if there is already a W5500 library for ATMEGA328P or use the standard SPI library of your MPU to write a library from scratch.