[ST_MICRO]/STM32F43x2015. 3. 7. 17:00

STM32F439 Ehternet 테스트

STM32F439 Ehternet 테스트


STM32 시리즈에는 Ethernet 을 위한 MAC 제어기가 포함되어 있고 외부에 Ethernet PHY만 연결하면 간단히 Ethernet 을 위한 제어가 가능하다.

STM32F439 EVM 보드에는 기본적으로 핀수가 줄어드는 RMII방식의 PHY가 포함되어 있고 경우에 따라서 기존에 제작해 둔 MII, RMII 모듈을 연결할 수 있는 커넥터가 있어 다양한 방법으로 이더넷 테스를 할 수 있다.

(참고로 STM32F439 EVM 보드에 내장되어 있는 PHY는  "Low deterministic latency supports IEEE1588" 를 지원하는 TI의 TLK106를 사용하였다.)





Ethernet Phy 연결하는방식에 따라 MII, RMII Mode로 가능하며 MII 방식은 25Mhz 클럭로 100T 전송이 가능하다.





RMII Mode에서는 데이터 라인이 절반으로 줄어들어서 9핀으로 가능하지만 클럭을 50Mhz를 공급해야 한다.

비용적인 측면을 고려 한다면 MII방식이 좀더 유리 한데 STM32F4의 내부 클럭에서 25Mhz공급하능하기 때문이다.

하지만 핀수를 줄여서 간단히 하고 싶다면 RMII 방식이 좋을것 같다.

테스트 용이라 RMII 방식으로 보드를 제작 했다.






STM32F429 Ethernet 초기화 코드


void HAL_ETH_MspInit(ETH_HandleTypeDef *heth)

  GPIO_InitTypeDef GPIO_InitStructure;

  

  /* Enable GPIOs clocks */

  __GPIOA_CLK_ENABLE();

  __GPIOB_CLK_ENABLE();

  __GPIOC_CLK_ENABLE();


  //Ethernet pins configuration

  /*

        ETH_MII_RX_CLK/ETH_RMII_REF_CLK---> PA1

        ETH_MDIO -------------------------> PA2

        ETH_MII_RX_DV/ETH_RMII_CRS_DV ----> PA7


        ETH_MII_TX_EN/ETH_RMII_TX_EN -----> PB11

        ETH_MII_TXD0/ETH_RMII_TXD0 -------> PB12

        ETH_MII_TXD1/ETH_RMII_TXD1 -------> PB13


        ETH_MDC --------------------------> PC1        

        ETH_MII_RXD0/ETH_RMII_RXD0 -------> PC4

        ETH_MII_RXD1/ETH_RMII_RXD1 -------> PC5

                                                  */


  /* Configure PA1, PA2 , PA7 */

  GPIO_InitStructure.Pin = GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_7;

  GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;

  GPIO_InitStructure.Mode = GPIO_MODE_AF_PP;

  GPIO_InitStructure.Pull = GPIO_NOPULL ; 

  GPIO_InitStructure.Alternate = GPIO_AF11_ETH;

  HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);


  /* Configure PB5 and PB8 */

  GPIO_InitStructure.Pin = GPIO_PIN_11 | GPIO_PIN_12| GPIO_PIN_13;

  HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);


  /* Configure PC1, PC2, PC3, PC4 and PC5 */

  GPIO_InitStructure.Pin = GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5;

  HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);

                             

  /* Enable ETHERNET clock  */

  __ETH_CLK_ENABLE();

  

  if (heth->Init.MediaInterface == ETH_MEDIA_INTERFACE_MII)

  {

    /* Output HSE clock (25MHz) on MCO pin (PA8) to clock the PHY */

    HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_1);

  }

}




Ehternet 을위한 프로토콜 스텍은 ST에서 제공하는 LwIP Third Party Lib 예제를 이용하였다.


Posted by nexp

댓글을 달아 주세요