본문 바로가기

[ST_MICRO]/STM32F43x

#STM32F439 EV W5300이용한 이더넷 TCP/IP 전송 속도 테스트 ( STM32CubeIDE Hal코드 )

W5300을 테스트 하기 위해 이번에서 새롭게 STM32CubeIDE 환경을 이용하여 TCP/IP 전송 속도를 테스트 해보았다.

 

 

STM32F439 EV 보드는 FMC 확장 포트가 CN27, CN30에 연결되어 있고 W5300 확장 테스트 보드를 연결하여 테스트 가능하다.

W5300의 연결은 NE1(PD7) -> CS_A0, PC3 -> /RESET 핀에 되어 있다.

 

 

W5300 확장 테스트 보드 회로도 핀맵

 

 

 

W5300 모듈 핀맵 회로도

 

 

 

W5300 모듈은 STM32F4의 FMC 인터페이스에 연결된다. STM32CubeMx를 이용하여 FMC를 초기화 할 수 있다.

 

 

 

STM32의 클럭는 STM32F439의 최대 클럭인 180Mhz로 설정하였다.

 

 

STM32F439 FMC 초기화 코드

STM32CubeIDE에서 자동으로 생성되는 코드에 타이밍 설정하여 최대 속도로 전송이 가능하도록 했다.

/* FMC initialization function */
static void MX_FMC_Init(void)
{
  /* USER CODE BEGIN FMC_Init 0 */
  /* USER CODE END FMC_Init 0 */
  FMC_NORSRAM_TimingTypeDef Timing = ;
  /* USER CODE BEGIN FMC_Init 1 */
  /* USER CODE END FMC_Init 1 */
  /** Perform the SRAM1 memory initialization sequence
  */
  hsram1.Instance = FMC_NORSRAM_DEVICE;
  hsram1.Extended = FMC_NORSRAM_EXTENDED_DEVICE;
  /* hsram1.Init */
  hsram1.Init.NSBank = FMC_NORSRAM_BANK1;
  hsram1.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE;
  hsram1.Init.MemoryType = FMC_MEMORY_TYPE_SRAM;
  hsram1.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_16;
  hsram1.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE;
  hsram1.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW;
  hsram1.Init.WrapMode = FMC_WRAP_MODE_DISABLE;
  hsram1.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS;
  hsram1.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE;
  hsram1.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE;
  hsram1.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE;
  hsram1.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE;
  hsram1.Init.WriteBurst = FMC_WRITE_BURST_DISABLE;
  hsram1.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ONLY;
  hsram1.Init.PageSize = FMC_PAGE_SIZE_NONE;
  /* Timing */
  /*
    Timing.AddressSetupTime = 15;
    Timing.AddressHoldTime = 15;
    Timing.DataSetupTime = 255;
    Timing.BusTurnAroundDuration = 15;
    Timing.CLKDivision = 16;
    Timing.DataLatency = 17;*/
    Timing.AddressSetupTime = 2;
    Timing.AddressHoldTime = 2;
    Timing.DataSetupTime = 4;
    Timing.BusTurnAroundDuration = 3;
    Timing.CLKDivision = 2;
    Timing.DataLatency = 2;
  Timing.AccessMode = FMC_ACCESS_MODE_A;
  /* ExtTiming */
  if (HAL_SRAM_Init(&hsram1, &Timing, NULL) != HAL_OK)
  {
    Error_Handler( );
  }
  /* USER CODE BEGIN FMC_Init 2 */
  /* USER CODE END FMC_Init 2 */

}

 

 

W5300을 제어 할수 있는 코드 추가

 
//-----------------------------------------------------------------------------
#define W5300_BANK_ADDR                 ((uint32_t)0x60000000)
                                       
#define _W5300_DATA(p)                  (*(volatile unsigned short*) (W5300_BANK_ADDR + (p<<1)))
                                       
#define W5300_RST_PORT                                 GPIOC
#define W5300_RST_BIT                                  BIT3
#define IINCHIP_RSToff()                        HAL_GPIO_WritePin(W5300_RST_PORT, W5300_RST_BIT, GPIO_PIN_RESET)
#define IINCHIP_RSTon()                                HAL_GPIO_WritePin(W5300_RST_PORT, W5300_RST_BIT, GPIO_PIN_SET)
#define W5300_IO_INIT()                                
//-----------------------------------------------------------------------------

  

 

 

STM32F4와 W5300을 이용하여 TCP/IP 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 */
  /* 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_FMC_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
  printf("W5300 Test\r\n");
  /* USER CODE END 2 */
  W5300_IO_INIT();
  IINCHIP_NetInit();
  DisplayConfig();
  /* USER CODE END 2 */
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
         ProcessTCPS(0, 3000);
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

}

 

 

STM32F4의 W5300을 이용한 TCP/IP 전송 속도는 90Mbs로 거의 최대 속도가 나오는것같다.

STM32F4의 내장된 Ethenet 장치의 전송속도와 비교하면 3배 정도 빠른것 같다.

반응형