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.

[参考译文] RTOS/TDA3XEVM:如何调试以太网 MDIO 接口?我无法访问 phy 寄存器。

Guru**** 2602665 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/649898/rtos-tda3xevm-how-to-debug-ethernet-mdio-interface-i-can-not-access-the-phy-register

器件型号:TDA3XEVM

工具/软件:TI-RTOS

您好!

当我调试 MDIO 接口时、遇到了一个奇怪的问题。  我无法 访问 phy 寄存器。

软件和硬件环境如下所示:

BIOS_6_46_04_53
NDK_2_24_02_31
nsp_gmacsw_4_15_00_00

TDA2XX

我的一些分析如下:

1、在 tda2x 中使用 Linux + BIOS 系统、pinmux 和在 Linux 中配置的网络驱动程序,中间功能正常,因此 我可以确认硬件正常。

2 μ s、但仅、BIOS 系统, 我无法 访问 phy 寄存器。MDIO pinmux MCLK 引脚为0x30003 (输出) 、MDIO 为0x70003 (输入)

3、一些 MDIO 寄存器如下:

myMDIO_VER:0x40070106

myMDIO_Alive:0x0

myMDIO_CONTROL:0x41000198

 myMDIO_LINK:0x0

为什么 MDIO_ALIVE 寄存器始终为0?

4 μ s、SOC 上电,我使用示波器测量 MDIO:两个引脚的波形

PHY 地址0响应,但 MDIO_ALIVE 寄存器始终为0,如何调试?

谢谢!

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

    我已将您的问题转交给 NDK 专家。

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

    您使用的是板载 PHY 还是外部 PHY? 如果是后一种情况、您的 PHY 的品牌/型号是什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我使用 外部 PHY、我的 phy 模式是 KSZ9031、我认为硬件还可以、因为在电路板上使用其他软件是可以的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请查看以下帖子。 我希望这会有所帮助。
    e2e.ti.com/.../600196
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢您的支持、但该链接无法解决我的问题。因为从以下波形视图中、TA 位为0x02、并且正常。

    也许我的英语水平不是很好,导致对问题的描述不清楚,或者我有什么问题。也许我没有描述我对环境的使用, 我的一些测试环境。我使用的 phy 类型是 KSZ9031、在同一电路板上(SOC 为 tda2xx,phy isKSZ9031)、运行 Linux 系统、网络正常。但是、运行 BIOS 系统、MDIO 无法访问。因此我认为问题在于 VISION_SDK NSP 网络固件初始化、例如时钟初始化、 寄存器配置等。

    谢谢!

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

    静态空 local_mdio_FindingState (const MDIO_State * pmdio、PHY_Device * pPhy)

      uint32_t *phyState =&pPhy->phyState;
      uint32_t phyMask = pPhy->phyMask;
      uint32_t phyNum、i、j、phyAcks;

      phyNum = PHY_未 找到;

      if ((* phyState & PHY_TIM_MASK)!= 0)
      {
        * phyState =(* phyState &~PHY_TIM_MASK)|((* phyState & PHY_TIM_MASK)-((uint32_t) 1U << PHY_TIM_OFFSET);
      }
      其他
      {
        phyAcks = myMDIO_alive;MDIO_alive 寄存器始终为0
        phyAcks &= phyMask;//仅对'our' phys 感兴趣*/

        J = 1U;
        对于(i = 0;i <(uint32_t) 32U;i++)
        {
          if ((j & phyAcks)!= 0)
          {
            中断;
          }
          J = j << 1U;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    您能否确认您的引脚多路复用值?
    "MDIO pinmux MCLK 引脚 is0x30003 (输出)、MDIO 为0x70003 (输入)"
    我的怀疑是因为两个 MDIO 引脚必须处于多路复用模式=0、但您的值显示多路复用模式=3。

    对于 TDA3x、CTRL_CORE_PAD_MDIO_D 寄存器位于0x4A00 3558
    对于 TDA3x、CTRL_CORE_PAD_MDIO_MCLK 寄存器位于0x4A00 3554处
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我的 SOC 型号是 TDA2X、MDIO 配置如下:

    vin2a_d10 - MCLK
    vin2a_D11 - MDIO

    那么我的 pinmux 可能是可以的。是否有其他原因会导致这个问题? 可以提供调试方法吗? 我不知道如何开始。

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

    VIN2A 引脚需要额外的时序设置。 您能否检查它们是否设置正确?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    正如侧注:您始终可以使用"Pad 配置工具(PCT)"来配置这些引脚、延迟模式等 转储寄存器并查看该工具为您配置的内容。 然后交叉检查您的软件配置。

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

    您好!

    请提供以下详细信息吗?

    您使用的是哪个 PHY?

    2.这是 TI EVM 还是定制板?

    3.您的软件配置? 如 PHY 模式、引脚多路复用设置和电路板多路复用器(如果有)?

     由于 myMDIO_alive 也是零、我认为问题主要是由于引脚多路复用器错误或缺少板多路复用器。  

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

    Prasad、您好!

    我将尝试总结用户的反馈:

    "我使用 外部 PHY、我的 phy 模式为 KSZ9031。 我认为硬件还可以、因为在电路板上使用另一个软件是可以的。"

    "在同一电路板上(SOC 为 tda2xx、phy 为 KSZ9031我运行 Linux 系统、网络正常。 但是、运行 BIOS 系统、MDIO 无法访问。 因此、我认为问题在于 VISION_SDK NSP 网络固件初始化、例如时钟初始化、寄存器配置等。"

    "我的 SOC 型号是 TDA2X、MDIO 配置如下:

    vin2a_d10 - MCLK
    vin2a_D11 - MDIO"

    "MDIO pinmux MCLK 引脚为0x30003 (输出)、MDIO 为0x70003 (输入)"

    "PHY 地址0响应迅速(如屏幕截图中所示)、但 MDIO_ALIVE 寄存器始终为0,如何调试它?"

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

    您好 Stan、

    除了启用 GMAC 模块和设置时钟外、MDIO 不需要 NSP 的任何其他配置。

    实际上、如果您通过 GEL 文件启用 GMAC 并通过 CCS 存储器浏览器启用 MDIO 模块、您应该能够看到 PHY_ALIVE 和 Link_STATUS 设置。 因此、我坚信问题的原因是、如前所述、错误的引脚复用或缺少板复用。

    还会下降之前共享的 MDIO 寄存器值、我看到 MDIO 时钟分频器设置为0x198、为什么会这样? 通常、我们将其设置为0x1F 或0x89。

    您是否可以在我的个人邮件上共享原理图以供审核?

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

    非常感谢您的支持!
    我想确认、以下两个引脚需要配置 IODELAY 参数:
    vin2a_d10
    vin2a_D11

    从 ti_components / drivers / pdk_01_07_00_16 / packages / ti/ boot / sbL_auto / sbL_utils / src / tda2xx / sbL_utils_tda2xx_iodelay.c 视图未配置、软件在 EVM 板上正常运行、我没有更改 IODELAY 参数

    但在实际操作中、我读取以下两个寄存器有一个值:
    CFG_VIN2A_D11_oen RW 0x00000106
    CFG_VIN2A_D11_OUT RW 0x000000c8

    我不知道这些值是如何写入的?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    遗憾的是、我无法提供硬件原理图、因为公司有保密协议、但我可以确保我的硬件正常

    除了能够提高信息交流的效率之外、您能否告诉我您的电子邮件、以便于直接沟通、快速解决问题、谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    在 TI EVM 中、我们将为 MDIO 引脚(时钟和数据)使用默认 MDIO 焊盘。 它是在默认 SBL 配置中配置的。
    由于您的电路板使用不同的 MDIO 引脚、您需要更改焊盘多路复用器以在 vin2a_d10/11引脚上启用 MDIO。
    另外、请确保不要启用默认 MDIO 引脚、否则会有两个焊盘驱动相同的信号。

    SBL_utils_tda2xx_iodelay.c 为您还需要更改的视频函数配置 vin2a_d10和 vin2a_D11。

    您的目标应该是获得 PHY_ALIVE 非零值、因为它不涉及任何 NSP 配置。 对于功能问题、我们可以调试 NSP。