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배 정도 빠른것 같다.
반응형