
W55RP20 의 Arduino 환경에서 이더넷은 현재 lwIP 만지원하고 있다. RP2040 Pi-pico SDK 환경에서는 이더넷 전송률이 25Mbps로 상당히 빠르게 측정이 되었지만 Arduino 환경에서는 속도가 느릴것 같다.
이전 테스트에서 RP2040 Arduino 환경에서 W5500 네트웍 전송률은 상당히 느려서 라이브러리를 변경해서 속도를 높일 수 있었다.
[RP2040_W5500] Arduino IDE에서 Iperf TCP Throughput 측정 테스트 (Ethernet_Generic 라이브러리 수정)
RP2040 C++ SDK 환경에서 iperf 전송율 테스트 결과 전송 속도는 잘 나오지만 웹서버를 위한 라리브러리가 불편한점이 많다. [RP2040_W5500] RP2040 C++ SDK 환경에서 iperf 를 이용한 W5500 TCP 전송률 테스트 . Ard
nexp.tistory.com
우선 Arduino 환경에서 lwIP 스택의 iperf 전송률을 측정해 보자.
#include <W55RP20lwIP.h>
const uint16_t port = 5001;
Wiznet55rp20lwIP eth(20 /* chip select */);
WiFiServer server(5001);
void setup() {
Serial.begin(115200);
delay(5000);
Serial.println();
Serial.println();
Serial.println("Starting Ethernet port");
// Start the Ethernet port
if (!eth.begin()) {
Serial.println("No wired Ethernet hardware detected. Check pinouts, wiring.");
while (1) {
delay(1000);
}
}
while (!eth.connected()) {
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.println("Ethernet connected");
Serial.println("IP address: ");
Serial.println(eth.localIP());
server.begin();
}
byte buf[2048];
void loop() {
static bool wait = false;
unsigned int len = 0;
// Use WiFiClient class to create TCP connections
WiFiClient client;
client = server.available();
if (client)
{
Serial.println("Here is new client for check arduino performance");
while (client.connected())
{
len = client.available();
if (len)
{
client.read(buf, len);
}
}
// close the connection:
client.stop();
Serial.println("client disonnected");
}
}

최종 테스트 결과 W55RP20 Arduino lwIP 환경에서 iperf TCP 전송률은 2Mbps 정도 된다.
이정도는 44khz 오디오 전송은 가능하긴 하지만 24bit 고음질 오디오나 96khz 음질의 오디오 전송에는 문제가 있을것 같다.
아무래도 RP2040 C/C++ SDK 개발환경 에서 테스트 해볼 필요가 있을것 같다.
lwIP 는 W55RP20의 전체 하드웨어 TCP 스텍을 사용하는 것이 아니라 MAC RAW 모드로 소프트웨어 스택을 사용하기 때문에 아무래도 속도가 느려지는것 같다. (그래도 10배 차이는 좀 심한것 같지만...)
아무튼 W55RP20의 네트웍 속도는 W5500의 H/W TCP스택을 사용해야 정상 속도가 나오기 때문에 고음질의 네트웍 스피커를 제작 하려면 C/C++ SDK로 개발하거나 W55RP20의 아두이노 드라이버를 사용하는것이 좋을것 같다.
참고로 W55RP20의 Arduino 지원 lwIP 라이브러리 코드는 아래 폴더에 위치해 있다.
AppData\Local\Arduino15\packages\rp2040\hardware\rp2040\5.6.0\libraries\lwIP_w55rp20
네트웍 스피커는 기본적으로 마스터에서 멀티캐스트 기능을 지원해야 하므로 UDP 통신으로 구성해야 할것 같다.
UDP 에서 iperf 전송률 테스트를 해보자
#include <W55RP20lwIP.h>
const uint16_t port = 5001;
Wiznet55rp20lwIP eth(20 /* chip select */);
IPAddress ip(192, 168, 1, 104);
IPAddress subnet(255, 255, 254, 0);
IPAddress gateway(192, 168, 1, 1);
WiFiUDP udp;
void setup() {
Serial.begin(115200);
delay(5000);
Serial.println();
Serial.println();
Serial.println("Starting Ethernet port");
eth.config(ip, gateway, subnet);
// Start the Ethernet port
if (!eth.begin()) {
Serial.println("No wired Ethernet hardware detected. Check pinouts, wiring.");
while (1) {
delay(1000);
}
}
while (!eth.connected()) {
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.println("Ethernet connected");
Serial.println("IP address: ");
Serial.println(eth.localIP());
udp.begin(port);
Serial.print("Listening for UDP iperf on port ");
Serial.println(port);
}
byte buf[2048];
unsigned long lastPacketTime = 0;
bool isTesting = false;
void loop() {
int packetSize = udp.parsePacket();
if (packetSize > 0) {
if (!isTesting) {
isTesting = true;
Serial.println("\n[알림] UDP iperf 테스트 시작 (데이터 수신 중...)");
}
lastPacketTime = millis();
int bytesToRead = packetSize;
if (bytesToRead > sizeof(buf)) {
bytesToRead = sizeof(buf);
}
udp.read(buf, bytesToRead);
}
if (isTesting && (millis() - lastPacketTime > 2000)) {
isTesting = false;
Serial.println("[알림] UDP iperf 테스트 종료 (대기 상태)");
}
}

W55RP20 Arduino lwIP 에서 UDP 전송률은 1Mbps 정도로 측정이 된다.
이정도면 Arduino에서는 네트워크로 WAV파일 송출이 불가능 한데...