[STM32F7 EVM] STM32F767 Ethernet 테스트 - TCP 전송속도 측정
STM32F7 EVM 보드에는 Ehternet을 테스트 할수 있는 Ethernet Phy 모듈 연결 커넥터가 있어 Ethernet을 연결 할 수 있다. STM32F7의 경우 클럭속도가 216Mhz로 향상 되었기 때문에 좀더 빠른 이더넷 전송 속도가 나오지 않을까 기대 하면서 TCP 전송 속도 테스트를 해 보았다. STM32F4 Ethernet TCP 전송 속도 테스트 결과 참고
STM32F7 EVM Ethernet 하드웨어 연결 설정
STM32F7의 Ethernet 테스트는 기존에 제작 해 두었던 Ethernet Phy모듈을 이용하였다.
CubeMX 환경설정
CubeMX 를 이용하여 STM32F7 프로젝트를 생성하고 Connectivity -> ETH 탭에서 RMII 모드로 설정하면 기본 핀맵이 할당된다.
STM32F7 Ethernet 핀맵 확인
LWIP 설정
ST에서 제공하는 TCP/IP 스텍인 LWIP 를 Enable로 체크 하면 기본 설정으로 TCP/IP 통신을 할 수 있는 코드가 생성된다.
STM32F7 TCP/IP 전송 속도 테스트 코드
print_ip(char *msg, ip_addr_t *ip)
{
printf(msg);
printf("%d.%d.%d.%d\n\r", ip4_addr1(ip), ip4_addr2(ip), ip4_addr3(ip), ip4_addr4(ip));
}
print_ip_settings(ip_addr_t *ip, ip_addr_t *mask, ip_addr_t *gw)
{
print_ip("Board IP: ", ip);
print_ip("Netmask : ", mask);
print_ip("Gateway : ", gw);
}
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* Enable D-Cache-------------------------------------------------------------*/
SCB_EnableDCache();
//SCB_EnableICache();
/* MCU Configuration----------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
sprintf(buf, "STM32 ETHERNET TEST: Clk=%d\r\n", HAL_RCC_GetHCLKFreq()/1000);
HAL_UART_Transmit(&huart1, buf, strlen(buf), 10);
/* USER CODE END 2 */
MX_LWIP_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
while((gnetif.ip_addr.addr) == 0)
{
MX_LWIP_Process();
}
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
/* USER CODE BEGIN 2 */
print_ip_settings(&gnetif.ip_addr.addr, &gnetif.netmask.addr, &gnetif.gw.addr);
/* Infinite loop */
/* USER CODE BEGIN WHILE */
tcp_echoserver_init();
while (1)
{
ethernetif_input(&gnetif);
sys_check_timeouts();
}
}
STM32F7 Ethernet 전송 속도 테스트 결과
옵티마이즈 옵션을 -O로 설정하고 테스트 해 보면 13Mbps로 측정이 된다.
[1] iInChip Send: 13.4681 Mbps(12470418 bytes, 7.0642 sec)
iInChip Recv: 13.3232 Mbps(12470418 bytes, 7.1411 sec)
------------------------------------------------------------
옵션을 -Ofast 로 설정하면 성능 개선이 많이 된다. 20Mbps로 측정이 된다.
------------------------------------------------------------
[14] iInChip Send: 20.2767 Mbps(12470418 bytes, 4.6922 sec)
iInChip Recv: 20.0365 Mbps(12470418 bytes, 4.7484 sec)
좀더 속도를 높일 방법이 없을까?
I 캐시를 사용해 보자.
SCB_EnableICache();
21Mbps로 좀더 빨라 졌다.
호스트 PC의 속도도 영상을 줄 수 있을것 같은데...
i7-9700 @3Ghz 에서 테스트 해보았다.
STM32f7 EVM 보드에 LWIP 스택을 이용해 TCP loopback 전송률 테스트 해 보면 33 Mbps 로 측정이 된다.
Hardware 스텍을 가진 W5300 테스트 결과와 같은 전송 속도 이다. 소프트웨어 스택으로도 저렴한 가격에 Ethernet 통신을 구현 할수 있어 좋은것 같다. STM32F439 + W5300 이더넷 전송 속도 테스트결과와 비교