Zynq UltraScale+ MPSoC 보드 테스트 - Giga Etherent TCP 전송 속도 테스트
Zynq UltraScale+ MPSoC 보드는 ZU2EG 가 적용되어 있고 Quad-core Cortex-A53 @1.5GHz CPU로 AP를 구동한다. Giga Ethernet을 이용한 EtherCAT 사용 검토가 필요해 Giga Ethernet 통신을 테스트 해보았다.
우선 TCP/IP 통신 테스트를 해보자.
기본 예제로 제공되는 lwIP 스택 TCP예제로 루프백 테스트를 해보면 좋을것 같다.
기본 제공 예제를 좀 수정해서 TCP루프백 테스트 해보니 96Mbps 정도가 나온다.
예전 EtherCAT 테스트용으로 제작했던 STM32F429 보드와 TCP속도 비교를 해보면 좋을것 같다.
(너무 예전이고 코어 자체가 비교가 안되지만..)
Zynq UltraScale+ MPSoC TCP/IP TCP 수정코드
err_t recv_callback(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)
{
/* do not read the packet if we are not in ESTABLISHED state */
if (!p) {
tcp_close(tpcb);
tcp_recv(tpcb, NULL);
return ERR_OK;
}
/* indicate that the packet has been received */
tcp_recved(tpcb, p->len);
/* echo back the payload */
/* in this case, we assume that the payload is < TCP_SND_BUF */
if (tcp_sndbuf(tpcb) > p->len) {
err = tcp_write(tpcb, p->payload, p->len, 1);
} else
xil_printf("no space in tcp_sndbuf\n\r");
/* free the received pbuf */
pbuf_free(p);
return ERR_OK;
}
dhcp_start(echo_netif);
dhcp_timoutcntr = 24;
while(((echo_netif->ip_addr.addr) == 0) && (dhcp_timoutcntr > 0))
xemacif_input(echo_netif);
if (dhcp_timoutcntr <= 0) {
if ((echo_netif->ip_addr.addr) == 0) {
xil_printf("DHCP Timeout\r\n");
xil_printf("Configuring default IP of 192.168.1.10\r\n");
IP4_ADDR(&(echo_netif->ip_addr), 192, 168, 1, 10);
IP4_ADDR(&(echo_netif->netmask), 255, 255, 255, 0);
IP4_ADDR(&(echo_netif->gw), 192, 168, 1, 1);
}
} print_ip_settings(&ipaddr, &netmask, &gw);
#endif
/* start the application (web server, rxtest, txtest, etc..) */
start_application();
/* receive and process packets */
while (1) {
if (TcpFastTmrFlag) {
tcp_fasttmr();
TcpFastTmrFlag = 0;
}
if (TcpSlowTmrFlag) {
tcp_slowtmr();
TcpSlowTmrFlag = 0;
}
xemacif_input(echo_netif);
transfer_data();
}