help interfacing W5500 with stm446re using SPI

i get this error - Socket Interrupt after reset: 0
Socket Interrupt after close: 0
Failed to get chip interrupt state. Error 0

code is here =

/* mbed Microcontroller Library

  • Copyright (c) 2018 ARM Limited
  • SPDX-License-Identifier: Apache-2.0
    */

#include “mbed.h”
#include “w5500_spi.h”
#include “socket.h”
#include <stdio.h>
#include “Ethernet/socket.h”
#include “Ethernet/wizchip_conf.h”

#define WIZCHIP W5500
#define WIZCHIP_IO_MODE WIZCHIP_IO_MODE_SPI_VDM
#define WAIT_TIME 1000 //msec
#define BUFFERLENGTH 1000

#define socket_n 0

#define DEBUG 1

mbed::DigitalOut led2(LED2);
mbed::SPI spi1(PA_7,PA_6,PA_5);
mbed::DigitalOut cs(PA_4);
mbed::DigitalOut rst(PB_9);
mbed::DigitalOut toggle(D15);

wiz_NetInfo net_info = {
.mac = {0x00, 0x08, 0xdc, 0xab, 0xcd, 0xef},
.ip = {192, 168, 1, 10},
.sn = {255, 255, 255, 0},
.gw = {192, 168, 1, 13},
.dns = {8, 8, 8, 8},
.dhcp = NETINFO_STATIC};

static wiz_PhyConf phyConf =
{
.by = PHY_CONFBY_SW,
.mode = PHY_MODE_AUTONEGO,
.speed = PHY_SPEED_10,
.duplex = PHY_DUPLEX_FULL,
};

char buf[BUFFERLENGTH] = {0};

int main()
{
//check states
printf(“led2 state: %d\n\r”, led2.read());
printf(“cs state: %d\n\r”, cs.read());
printf(“rst state: %d\n\r”, rst.read());
printf(“toggle state: %d\n\r”, toggle.read());

// Init SPI
spi1.format(8, 0);
spi1.frequency(1000000);
printf(“Socket Test W5500 start\n\r”);
toggle.write(0);
w5500Init(&spi1, &cs, &rst);

if (ctlwizchip(CW_SET_PHYCONF, (void*) &phyConf) == 0) {
// Physical layer configuration settings were done correctly
printf(“PHY configuration set successfully\n\r”);
} else if (ctlwizchip(CW_SET_PHYCONF, (void*) &phyConf) == -1) {
printf(“Failed setting PHY configuration\n\r”);
// There was an error in setting the physical layer configuration
} else if (ctlnetwork(CN_SET_NETINFO, (void*) &net_info) == -1) {
printf(“Failed setting network information\n\r”);
}

//Init socket and put to listen
int8_t err;
uint8_t sock_state = 0;

printf("led2 state: %d\n\r", led2.read());
printf("cs state: %d\n\r", cs.read());
printf("rst state: %d\n\r", rst.read());

// printf(“spi state:%d\n\r”, spi1.read());
printf(“toggle state: %d\n\r”, toggle.read());

// Check socket interrupt state
err = ctlsocket(socket_n, CS_GET_INTERRUPT, (void*) &sock_state);
if (err != SOCK_OK){
printf(“Failed to get socket interrupt state. Error %d\n\r”, err);
return -1;
}

printf(“Socket Interrupt after reset: %d\n\r”, sock_state);

// Close socket_n
err = close_(socket_n);
if (err != SOCK_OK){
printf(“Failed to close socket. Error %d\n\r”, err);
return -1;
}

// Check socket interrupt state
err = ctlsocket(socket_n, CS_GET_INTERRUPT, (void*) &sock_state);
if (err != SOCK_OK){
printf(“Failed to get socket interrupt state. Error %d\n\r”, err);
return -1;
}

printf(“Socket Interrupt after close: %d\n\r”, sock_state);

// Get chip interrupt state
intr_kind interrupt_reg;
err = ctlwizchip(CW_GET_INTERRUPT, (void*) &interrupt_reg);
if (err != SOCK_OK){
printf(“Failed to get chip interrupt state. Error %d\n\r”, err);
return -1;
}

printf(“Chip Interrupt after close: %d\n\r”, interrupt_reg);

// Open socket_n as TCP bind to port 3389
err = socket(socket_n, Sn_MR_TCP, 445, SF_TCP_NODELAY);
if (err != SOCK_OK){
printf(“Failed to open socket. Error %d\n\r”, err);
return -1;
}

// Check socket interrupt state
err = ctlsocket(socket_n, CS_GET_INTERRUPT, (void*) &sock_state);
if (err != SOCK_OK){
printf(“Failed to get socket interrupt state. Error %d\n\r”, err);
return -1;
}

printf(“Socket Interrupt after open: %d\n\r”, sock_state);

// Listen for incoming connections
err = listen(socket_n);
if (err != SOCK_OK){
printf(“Failed to set socket to listening/accepting mode. Error %d\n\r”, err);
return -1;
}

// Wait until connection is established
while (sock_state != SOCK_ESTABLISHED){
err = getsockopt(socket_n, SO_STATUS, (void*) &sock_state);
if (err != SOCK_OK){
printf(“Failed to get socket status. Error %d\n\r”, err);
return -1;
}
printf(“Sock State is: %d\n\r”, sock_state);
thread_sleep_for(WAIT_TIME);
}

// Print current speed and duplex settings
wiz_PhyConf currentStatus;
err = ctlwizchip(CW_GET_PHYSTATUS, (void*) &currentStatus);
if (err != SOCK_OK){
printf(“Failed to get PHY status. Error %d\n\r”, err);
return -1;
}

if (currentStatus.speed == PHY_SPEED_100){
printf("Speed is 100 Mb/s. ");
}
else{
printf("Speed is 10 Mb/s. ");
}

if (currentStatus.duplex == PHY_DUPLEX_FULL){
printf(“Full Duplex.\n\r”);
}
else{
printf(“Half Duplex.\n\r”);
}

// Send data to the connected client
while (true)
{
strcpy(buf, “Hello World!\n\r”);
toggle.write(1);
err = send(socket_n, (uint8_t*) buf, BUFFERLENGTH);
if (err != SOCK_OK){
printf(“Failed to send data. Error %d\n\r”, err);
return -1;
}

while (true)
{
  strcpy(buf, "Hello World!\n\r");
  toggle.write(1);
  err = send(socket_n, (uint8_t*) buf, BUFFERLENGTH);
  toggle.write(0);
  led2 = !led2;
  thread_sleep_for(WAIT_TIME);
}

}
}