
RP2350에서 W6300의 TCP전송률은 90Mpbs 이상으로 측정되는 것을 확인 했기 때문에 이번에는 다양한 라이브러리를 제공하는 Arduino에서 W6300을 테스트 해보자.
아직 W6300에 대한 기존 Arduino 라이브러리를 제공하지 않기 때문에 기존 라이브러리를 수정하거나 Raspberry Pi Pico에서 제공하는 lwip를 이용해야 한다.
우선 간단하게 Pico2에서 제공하는 W6300용 lwip 라이브러리를 이용해 보자.
먼저 BOARDS MANAGER에서 rp2350 최신버전으로 업데이트 해야 한다.

최신 Board 파일이 업데이트 되면 W6300 lwip 라이브러리 <W6300lwip.h> 를 사용할수 있고 가장 기본이되는 DHCP로 네트웍 정보를 받아 올 수 있는지 확인해 보자
#include <W6300lwIP.h>
#define _USE_DEBUG 1
const uint16_t port = 5001;
Wiznet6300lwIP eth(1 /* chip select */);
WiFiServer server(5001);
void setup() {
#if _USE_DEBUG
Serial.begin(115200);
delay(5000);
Serial.println();
Serial.println();
Serial.println("Starting Ethernet port");
#endif
// Start the Ethernet port
if (!eth.begin()) {
#if _USE_DEBUG
Serial.println("No wired Ethernet hardware detected. Check pinouts, wiring.");
#endif
while (1) {
delay(1000);
}
}
while (!eth.connected()) {
#if _USE_DEBUG
Serial.print(".");
#endif
delay(500);
}
#if _USE_DEBUG
Serial.println("");
Serial.println("Ethernet connected");
Serial.println("IP address: ");
Serial.println(eth.localIP());
#endif
server.begin();
}
컴파일은 되지만 실행하면 하드웨어 연결을 확인 하라는 메시지가 출력 된다.
Starting Ethernet port
[QSPI CLOCK SPEED : 16.62 MHz]
[QSPI QUAD MODE]
version = 0x0
No wired Ethernet hardware detected. Check pinouts, wiring.
[RP2350_W6300 SSM] 보드의 핀맵에 맞게 QSPI 핀맵 수정이 필요하다

Arduino15\packages\rp2040\hardware\rp2040\5.2.1\libraries\lwIP_w6300\src\utility\w6300.h
파일에서 수정해 주어야 한다.
/*
#define WIZNET_PIO_QSPI_DATA_IO0_PIN 18
#define WIZNET_PIO_QSPI_DATA_IO1_PIN 19
#define WIZNET_PIO_QSPI_DATA_IO2_PIN 20
#define WIZNET_PIO_QSPI_DATA_IO3_PIN 21
#define WIZNET_PIO_QSPI_SCK_PIN 17
#define WIZNET_PIO_QSPI_CS_PIN 16
*/
#define WIZNET_PIO_QSPI_DATA_IO0_PIN 25
#define WIZNET_PIO_QSPI_DATA_IO1_PIN 14
#define WIZNET_PIO_QSPI_DATA_IO2_PIN 23
#define WIZNET_PIO_QSPI_DATA_IO3_PIN 22
#define WIZNET_PIO_QSPI_SCK_PIN 21
#define WIZNET_PIO_QSPI_CS_PIN 20
이렇게 해도 동일하게 연결이 안된다.
핀맵도 맞춰 주었는데 왜 W6300에 연결이 안될까?
라이브러리 파일에 문제가 있나?
Arduino15\packages\rp2040\hardware\rp2040\5.2.1\libraries\lwIP_w6300\src\utility\w6300.cpp
파일을 확인중에 뭔가 이상한것이 보인다.
다른 핀 들은 초기화를 하고 있지만 W6300에 대한 Reset 핀설정이 없다. 코드상에는 소프트리셋을 하도록 되어 있지만 하드웨어 적에로 초기화가 안되면 문제가 될 소지가 있다.
bool Wiznet6300::begin(const uint8_t* mac_address, netif *net) {
wiznet_pio_qspi_config.clock_div_major = 4;
wiznet_pio_qspi_config.clock_div_minor = 0;
wiznet_pio_qspi_config.data_io0_pin = WIZNET_PIO_QSPI_DATA_IO0_PIN;
wiznet_pio_qspi_config.data_io1_pin = WIZNET_PIO_QSPI_DATA_IO1_PIN;
wiznet_pio_qspi_config.data_io2_pin = WIZNET_PIO_QSPI_DATA_IO2_PIN;
wiznet_pio_qspi_config.data_io3_pin = WIZNET_PIO_QSPI_DATA_IO3_PIN;
wiznet_pio_qspi_config.clock_pin = WIZNET_PIO_QSPI_SCK_PIN;
wiznet_pio_qspi_config.cs_pin = WIZNET_PIO_QSPI_CS_PIN;
if (wiznet_pio_qspi_handle != NULL) {
wiznet_pio_qspi_close(wiznet_pio_qspi_handle);
}
wiznet_pio_qspi_handle = wiznet_pio_qspi_open(&wiznet_pio_qspi_config);
(*wiznet_pio_qspi_handle)->set_active(wiznet_pio_qspi_handle);
_netif = net;
memcpy(_mac_address, mac_address, 6);
pinMode(_cs, OUTPUT);
wizchip_cs_deselect();
wizchip_sw_reset();
:
셋업 함수에서 W6300의 리셋 핀을 High로 설정해 주니 정상적으로 동작한다.
void setup() {
pinMode(27, OUTPUT);
digitalWrite(27, 1);
:
수정후 W6300이 DHCP로 IP를 받아오는 것을 확인 할 수 있다.
Starting Ethernet port
[QSPI CLOCK SPEED : 16.62 MHz]
[QSPI QUAD MODE]
version = 0x61
Ethernet connected
IP address:
192.168.1.6
이제 iperf로 TCP 전송률을 측정해 보자.
void loop() {
static bool wait = false;
byte buf[1460];
unsigned int len = 0;
// Use WiFiClient class to create TCP connections
WiFiClient client;
client = server.available();
if (client)
{
#if _USE_DEBUG
Serial.println("Here is new client for check arduino performance");
#endif
while (client.connected())
{
len = client.available();
if (len)
{
client.read(buf, 1024);
}
}
// close the connection:
client.stop();
#if _USE_DEBUG
Serial.println("client disonnected");
#endif
}
}
Arduino에서 W6300 lwip 라이브러리를 이용한 iperf 전송률 테스트 결과 2.5Mbps 로 측정 된다. 너무 느리네..

QSPI 클럭 속도의 문제 인가?
라이브러리 파일 w6300.cpp 을 보면 SPI 클럭 설정이 있는데 DIV를 4로 하고 있다. 2로 설정해 보자.
bool Wiznet6300::begin(const uint8_t* mac_address, netif *net) {
//wiznet_pio_qspi_config.clock_div_major = 4;
wiznet_pio_qspi_config.clock_div_major = 2;
wiznet_pio_qspi_config.clock_div_minor = 0;
wiznet_pio_qspi_config.data_io0_pin = WIZNET_PIO_QSPI_DATA_IO0_PIN;
wiznet_pio_qspi_config.data_io1_pin = WIZNET_PIO_QSPI_DATA_IO1_PIN;
wiznet_pio_qspi_config.data_io2_pin = WIZNET_PIO_QSPI_DATA_IO2_PIN;
wiznet_pio_qspi_config.data_io3_pin = WIZNET_PIO_QSPI_DATA_IO3_PIN;
wiznet_pio_qspi_config.clock_pin = WIZNET_PIO_QSPI_SCK_PIN;
wiznet_pio_qspi_config.cs_pin = WIZNET_PIO_QSPI_CS_PIN;
33.25Mhz 로 설정된것을 확인 할 수 있지만 전송률을 거의 변화가 없다.
Starting Ethernet port
[QSPI CLOCK SPEED : 33.25 MHz]
RP2040 + W5500 조합의 Arduino TCP 전송률 테스트 결과 보다 속도가 많이 느리다.
lwip 라이브러리의 한계인가?
이부분은 좀더 검토가 필요하다.
다음에는 lwip가 아니 W6300용으로 Arduino Ethernet Generic 라이브러리를 수정해서 테스트 해봐야 할것 같다.