LAN data transfer speed

Hello experts!
I would appreciate your answers to the following questions!
I found information on the Wiznet website that the w5500 chip supports LAN data transfer speeds of 15Mbps. Is this speed divided between 8 sockets and less than 2Mbps per socket if all 8 simultaneously receive and transmit data? Why the PMODE configuration - 1xx 100M and fast SPI 80Mbps, if the limit is 15Mbps? Moreover, the chip heats up to 55C at high speed (whose chip is cold?). Should the chip heat up to such a temperature at maximum speeds without a heat sink?
I need a data transfer speed of about 100Mbps, should I consider the w5300 chip for this?

I manage to get ~ 8 Mbps (UDP or TCP server) with a single socket on an STM32F469 (168 MHz CPU and 21 MHz SPI clock) without DMA (I’m working on getting that to work)

1480 bytes at ~650 packets per second

aaa

I would be intrested in how you do this, especially how your while and tcp client/server is setup. I now run a python tcp client which connects to stm. I get about 100kb per second. Would like to increase. Please send me a message :slight_smile:

There’s a lot of example C-code for a TCP/UDP client in the net. I’m using this basic TCP client for testing

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h> 

void error(const char *msg)
{
    perror(msg);
    exit(0);
}

int main(int argc, char *argv[])
{
    int sockfd, portno, n;
    struct sockaddr_in serv_addr;
    struct hostent *server;

    char txBuffer[2048];
    char rxBuffer[2048];

    portno = 24000;
    sockfd = socket(AF_INET, SOCK_STREAM, 0);

    if (sockfd < 0) {
		error("ERROR opening socket");
	}

    server = gethostbyname("10.0.0.1");

    if (server == NULL) {
        fprintf(stderr,"ERROR, no such host\n");
        exit(0);
    }

    bzero((char *) &serv_addr, sizeof(serv_addr));

    serv_addr.sin_family = AF_INET;

    bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length);

    serv_addr.sin_port = htons(portno);

    if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) {
		error("ERROR connecting");
	}


    bzero(txBuffer,2000);
	bzero(rxBuffer,2000);
	
	for(uint16_t count=0; count<1449; count++) {
		txBuffer[count] = 'A';
	}
	txBuffer[1449] = 'Z';
	txBuffer[1450] = 0;

	printf("Sending: 1450 bytes\n");

	uint32_t counter = 0;

	while(1)
	{
		n = write(sockfd, txBuffer, 512);

		if (n < 0) {
			error("ERROR writing to socket");
		}

		bzero(rxBuffer, 2000);

		n = read(sockfd, rxBuffer, sizeof(rxBuffer));

		counter++;

		if (n < 0) {
			error("ERROR reading from socket");
			break;
		}

		//printf("\n\nRcvd %d:\n\n%s", counter, rxBuffer);

		for(uint32_t count=0; count<0xFF; count++) {
			asm("NOP");
		}
	}

    close(sockfd);
    return 0;
}