一、LWIP
lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。
链接地址: lwIP - A Lightweight TCP/IP stack - Summary [Savannah]
二、以太网测试
使用LWIP的TCP进行链接,上位机测试工具使用jperf。
1、测试代码
void iperf_client(void *thread_param)
{
struct netconn *conn;
int i;
int ret;
uint8 send_buf[1024];
float speed;
uint64 sentlen = 0;
uint32 tick1, tick2;
ip4_addr_t ipaddr;
for (i = 0; i < IPERF_BUFSZ; i++)
send_buf[i] = i & 0xff;
while (1)
{
ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
conn = netconn_new(NETCONN_TCP);
if (conn == NULL)
{
log_i("create conn failed!\r\n");
vTaskDelay(10);
continue;
}
else
{
log_i("create conn ok!\r\n");
}
IP4_ADDR(&ipaddr, 192, 168, 5, 100);
ret = netconn_connect(conn, &ipaddr, 5001);
if (ret == -1)
{
log_i("Connect failed!\r\n");
netconn_close(conn);
vTaskDelay(10);
continue;
}
else
{
log_i("connect ok %d!\r\n", ret);
}
tick1 = sys_now();
while (1)
{
tick2 = sys_now();
if (tick2 - tick1 >= configTICK_RATE_HZ * 5)
{
speed = (float)(sentlen / 1048576.0f) / ((tick2 - tick1) / 1000.0f);
log_i("send speed = %.2f MBps!\r\n", speed);
tick1 = tick2;
sentlen = 0;
}
ret = netconn_write(conn, send_buf, IPERF_BUFSZ, 0);
if (ret == ERR_OK)
{
sentlen += IPERF_BUFSZ;
}
else
{
log_i("netconn write error %d \r\n",ret);
}
}
}
}
2、测试结果
测试工具使用jperf,采用TCP链接,端口为5001;
测试TC397发送的平均网速约16Mbyte/sec;
测试的结果与千兆以太网理论速度(125Mbyte/sec)还是存在一定的差距。