This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[FAQ] [参考译文] [常见问题解答] AM2634:在定制板上集成 PHY 驱动程序

Guru**** 1774975 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1353799/faq-am2634-integration-of-phy-driver-on-custom-board

器件型号:AM2634

尊敬的专家:

您能指导我如何在定制电路板上添加 PHY 驱动程序吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    AM263x 具有  DP83869HMRGZT  和  DP83826ERHBT  PHY 板载。  为了方便理解该过程、让我们在基于 AM263x 的定制电路板上集成 DP83TC812 PHY。 以下指南使用 syscfg V1.18和 CCS v12.5在 MCU_PLUS_SDK v09.01上进行了验证

    在定制电路板上添加 PHY 驱动器可分为两个部分:

    1. 集成 PHY 驱动程序
    2. PHY 驱动程序的自定义电路板配置

    1. PHY 驱动程序的集成

    第一步是获取 PHY 驱动程序的 Header (.h)和 C (.c)文件。 如果您使用的是 TI PHY、您可以在以下网址找到一些 RTOS 和 Linux 驱动程序: https://github.com/TexasInstruments/ti-ethernet-software/blob/main/README.md。如果您在此处未找到所需的驱动器、请为此提交 E2E、TI 专家将为您提供指导。

    要集成 PHY 驱动程序、请执行以下步骤:

    1. 将公共头文件添加到以下路径:  C:\ti\mcu_plus_sdk\source\networking\enet\core\incldute\phy
    2. 将私有头文件和 C 文件添加到以下路径:   C:\ti\mcu_plus_sdk\source\networking\enet\core\solid\phy\phy src
    3. 在 dp83tc812.c 文件中、根据 mcu_plus_sdk/source/networking/enet 目录结构将 Include 文件路径修复为指向正确的文件。  
    4. 在 Phy 驱动程序文件中,定义类型为 Phy_Drv 的结构。 此结构保存 PHY 详细信息、支持的函数详细信息、寄存器详细信息和 PHY 的函数指针。  
    5. 在此结构中、如果不需要特定于器件的实现、请使用通用 PHY 驱动程序函数。 通用 PHY 驱动程序可以在以下位置找到:  C:\ti\mcu_plus_sdk\source\networking\enet\core\phy\generic_phy.c src
    6. 在 makefile 中:  C:\ti\workarea\mcu_plus_sdk\source\networking\enet\makefile.cpsw.am263x.r5f.ti-arm-clang ,  在 files_common 数组中添加 dp83tc812.c 文件。
    7. 使用以下命令重新编译 Enet cpsw 库:  

      # TO CLEAN
      gmake -s -f makefile.am263x enet-cpsw_r5f.ti-arm-clang_clean
       
      # TO BUILD
      gmake -s -f makefile.am263x enet-cpsw_r5f.ti-arm-clang

      现在、DP83TC812的 PHY 驱动程序已集成到 ENET 库中、可与 CPSW 配合使用。 请注意、并非 PHY 的所有特性都受支持。

    2. Phy 驱动程序的定制电路板配置

    1. 在应用中、打开 syscfg、转到 Enet (CPSW)→Board config→Enable custom board。

      这将禁用通用配置的自动生成并且可使用定制 PHY 驱动程序。
    2. 您将必须编写一个 特定于该板的"C"文件。 您可以参考 SDK 中的以下示例文件:  C:\ti\mcu_plus_sdk\examples\networking\enet_layer2_multi_channel \am263x-cc_r5fs0-0_freertos\enet_custom_board_config.c
    3. 在此 C 文件中、包含在第1点中步骤1的 PHY 驱动程序的头文件。
    4. 在此 C 文件中、已在上述驱动程序文件中定义的 Phy_Drv Extern。  
    5. 为 PHY 驱动程序定义一个 Cfg 结构(本例中为 DP83tc812_Cfg)。 (请参阅 PHY 驱动程序包含文件以了解结构)

    6. 修改 Board_Port EnCcfg 以指向所需端口的正确.extendedCfg 和.extendedCfgSize。
    7. 点3-6的参考代码如下所示
      #include <networking/enet/core/include/phy/dp83tc812.h>
       
      /* PHY drivers */
      extern EnetPhy_Drv gEnetPhyDrvGeneric;
      extern EnetPhy_Drv gEnetPhyDrvDp83tc812;
       
      /*! \brief All the registered PHY specific drivers. */
      static const EnetPhyDrv_Handle gEnetPhyDrvs[] =
      {
          &gEnetPhyDrvDp83tc812,
          &gEnetPhyDrvGeneric,   /* Generic PHY - must be last */
      };
       
      /* Create a config struct for the PHY */
      /*!
       * \brief Common Processor Board (CPB) board's DP83tc812 PHY configuration.
       */
      static const Dp83tc812_Cfg gEnetCpbBoard_dp83tc812PhyCfg =
      {
          .txClkShiftEn = true,
          .rxClkShiftEn = true,
          .interruptEn = false,
          .sgmiiAutoNegEn = true,
          .MasterSlaveMode = DP83TC812_MASTER_SLAVE_STRAP,
      };
       
      /*
       * AM263x board configuration.
       *
       * 1 x RGMII PHY connected to AM263x CPSW_3G MAC port.
       */
      static const EnetBoard_PortCfg gEnetCpbBoard_am263xEthPort[] =
      {
          {    /* "CPSW3G" */
              .enetType = ENET_CPSW_3G,
              .instId   = 0U,
              .macPort  = ENET_MAC_PORT_1,
              .mii      = { ENET_MAC_LAYER_GMII, ENET_MAC_SUBLAYER_REDUCED },
              .phyCfg   =
              {
                  .phyAddr         = 0,
                  .isStrapped      = false,
                  .skipExtendedCfg = false,
                  .extendedCfg     = &gEnetCpbBoard_dp83tc812PhyCfg,
                  .extendedCfgSize = sizeof(gEnetCpbBoard_dp83tc812PhyCfg),
              },
              .flags    = 0U,
          },
          {    /* "CPSW3G" */
              .enetType = ENET_CPSW_3G,
              .instId   = 0U,
              .macPort  = ENET_MAC_PORT_2,
              .mii      = { ENET_MAC_LAYER_GMII, ENET_MAC_SUBLAYER_REDUCED },
              .phyCfg   =
              {
                  .phyAddr         = 3,
                  .isStrapped      = false,
                  .skipExtendedCfg = false,
                  .extendedCfg     = &gEnetCpbBoard_dp83tc812PhyCfg,
                  .extendedCfgSize = sizeof(gEnetCpbBoard_dp83tc812PhyCfg),
              },
              .flags    = 0U,
          },
      };

      现在、使用此定制板配置文件编译您的应用。

    此致、
    Shaunak