본문 바로가기

[ST_MICRO]/STM32F7

[STM32F7 EVM] STM32F767 SPI 테스트 - W5500 TCP/IP 전송 속도 테스트

 

[NET_EV_SM EVM]보드와 W5500 EVM 보드를 이용하여 Ethernet (TCP/IP) 테스트를 진행 했다

[STM32F7 EVM]보드에는 SSM 모듈 표준 핀맵이 적용되어 있기 때문에 W5500 EVM과 같은 모듈을 연결하여 쉽게 테스트 가능하다.

 

 

 

W5500은 SPI통신을 사용하므로 STM32CubeMx를 이용하여 SPI 항목을 설정해 준다. 

 

 

W5500 드라이버 API를 사용하기 위해 SPI Read/Write 함수를 포팅해 주면 기존 코드를 그대로 사용할 수 있다.

#define SPIx_TIMEOUT_MAX		((uint32_t)0x1000)

unsigned char SPI1_WriteReadByte(unsigned char Data)
{
	uint8_t receivedbyte = 0;

	/* Send a Byte through the SPI peripheral */
	HAL_SPI_TransmitReceive(&hspi1, (uint8_t*) &Data, (uint8_t*) &receivedbyte, 1, SPIx_TIMEOUT_MAX);
	
	return receivedbyte;
}

unsigned char SPI1_WriteBuf(unsigned char *pDataBuf, unsigned int Size)
{
	uint8_t receivedbyte = 0;

	HAL_SPI_Transmit(&hspi1, pDataBuf, Size, SPIx_TIMEOUT_MAX);

	return receivedbyte;
}

unsigned char SPI1_ReadBuf(unsigned char *pDataBuf, unsigned int Size)
{
	uint8_t receivedbyte = 0;

	HAL_SPI_Receive(&hspi1, pDataBuf, Size, SPIx_TIMEOUT_MAX);

	return receivedbyte;
}

 

 

STM32CubeMx 에 SPI Read/Write함수 포팅후 TCP loopback 예제 함수를 호출하여 전송율을 테스트 해 볼수 있다.

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */
 // SCB_EnableICache();
  //SCB_EnableDCache();

  /* 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_SPI1_Init();
  MX_USART1_UART_Init();


  /* USER CODE BEGIN 2 */
  //W5500 초기화 함수
  W5500_Init();
  Display_Net_Info();
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
	    ProcessTCPS();
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

 

 

STM32F7에서 W5500 을 이용하여 TCP/IP 전송율 테스트를 해 보면 5.24Mbps 정도가 측정된다.

 

 

 

STM32F7의 경우 ICache, DCache 설정으로 속도를 높일 수 있다. 그리고 최대 SPI 클럭속도는 42Mhz이다. 최대 클럭으로 설정해 보자

int main(void)
{
	SCB_EnableICache();
	SCB_EnableDCache();

 

송수신 12Mbps 정도로 측정이 된다.

 

W5500의 메모리 크기를 최대로 설정해 보자

//uint8_t memsize[2][8] = { {2,2,2,2,2,2,2,2},{2,2,2,2,2,2,2,2}};
uint8_t memsize[2][8] = {{16, 0, 0, 0, 0, 0, 0, 0}, {16, 0, 0, 0, 0, 0, 0, 0}};

 

TCP 전송률이 조금 더 올라 가는것 같다.

 

다른 MCU들의 W5500 tcp throughput 측정결과와 비교하면 조금 아쉬움이 있다. 

DMA를 사용하면 좀더 향상되지 않을까...

반응형