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.

[参考译文] DP83TC812R-Q1:为何不写入寄存器地址?

Guru**** 2465940 points


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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1472419/dp83tc812r-q1-why-does-not-write-to-register-address

器件型号:DP83TC812R-Q1

工具与软件:

您好!

我在定制电路板上使用 DP83TC812R 芯片、 我在定制电路板上使用 QNX OS。 我尝试在 BSP 上更改 DP83TC812的寄存器值、并期望在引导时更改寄存器的值(以太网 PHY 启动时)。 首先、我读取0x0444、0x018B 和0x018E 寄存器地址。 我想控制0x0444地址以强制睡眠、我使用0x018B 寄存器地址来测试是否能够写入、我使用0x018E 寄存器地址用于读取状态。

我按照以下步骤进行测试。

1 -读取寄存器的第一个状态

  • 将0x001F 值写入0x0D 寄存器
  • 写入我要将(0x0444、0x018E、0x018B)地址更改为0x0E 地址。
  • 将0x401F 值写入0x0D
  • 读取0x0E


结果;

  • 0x0444 --> 0
  • 0x018E --> 4
  • 0x018B --> 7179 (0x1C0B)


2 -表示我要写入寄存器的值

  • 将0x001F 值写入0x0D 寄存器
  • 写入我要将(0x0444、0x018E、0x018B)地址更改为0x0E 地址。
  • 将0x401F 值写入0x0D
  • 写入要写入0x0E 寄存器的值


结果;

  • 对于0x0444、将0x000C 写入0x0E 寄存器
  • 对于0x018B、将0x0020写入0x0E 寄存器


3-我使用步骤1中介绍的方法再次读取0x0444、0x018B 和0x018E 寄存器。

结果;

  • 0x0444 --> 0
  • 0x018E --> 4
  • 0x018B --> 7243 (0x1C4B)


根据我从测试中了解到的、我无法控制寄存器。 我不知道如何更改0x018B 以及为何不更改0x0444寄存器值。 您能就此问题提供帮助吗?

此致、

Faruk

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

    尊敬的 Faruk:

    您是否正在写入0x000D 和0x000E? 还是0x0E 和0x0D?

    MDIO 线路上是否有上拉电阻器?

    此致、

    Nick  

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

    您好、Nick。

    我使用0x0D 和0x0E 寄存器。  

    是、MDIO 线路具有上拉电阻器。

    此致、

    Faruk

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

    尊敬的 Faruk:

    感谢您提供这些信息、您可以一次尝试写入一个寄存器吗?  

    此致、

    Nick

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

    您好、Nick。

    我尝试一次写入一个寄存器。 首先、我尝试将0x0020写入0x018B 寄存器并再次读取。 它是有效的。

    我尝试了针对0x0444寄存器的相同操作。 当首次将0x000C 写入0x0444寄存器时、我读取0xFFFF。 但是、在接下来的几次尝试中、我读取了0x2100。 在写入之前、寄存器0x0444始终为0x0000。 INH 每次3.3V。  情况是否符合预期?

    此致、

    Faruk

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

    尊敬的 Faruk:

    这是预期行为。 写入0x0444 = 0x000C 将使器件进入睡眠模式。 当 PHY 处于睡眠状态时、将无法访问寄存器、因此为什么在强制 PHY 处于睡眠状态后读取0xFFFF (无效)。

    谢谢!

    David  

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

    David、您好!

    我只能这样做一次。 在随后的尝试中、我读取0x2100。 这是什么原因呢?

    此外、当我读取0xFFFF 时、我测得 INH 引脚电压为3.3V。 这是否正常?

    此致、

    Faruk

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

    尊敬的 Faruk:

    我猜该器件会立即进入睡眠模式、然后通过 WAKE 引脚或远程唤醒再次快速唤醒。 这就是为什么只读取一次0xFFFF 而不读取一次之后。 INH = 3.3V 指示器件未处于睡眠模式。  

    请注意、要使器件进入强制睡眠模式、WAKE 引脚必须为低电平、并且链路伙伴必须静默。 请确保情况如此。 否则、器件将再次快速唤醒。

    谢谢!

    David

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

    David、您好!

    我想到了某件事;您说"链路伙伴应该保持沉默"。 这是否意味着链路伙伴必须处于睡眠状态或链路伙伴此时不发送数据?

    因为我测试了这些;
    1 -我从我的设备发送了 eth dev 套件、然后我强制睡眠 eth dev 套件。 ETH 开发套件已睡眠。
    2-我没有将 eth 开发套件连接到任何地方、而是强制使用 sleep eth 开发套件。 ETH 开发套件已睡眠。 我预计 ETH 开发套件无法睡眠原因是它没有连接无任何连接。

    我测试了您的建议、但我没有达到验证您的建议的效果。 那么、请您解释一下您的建议吗?

    此致、

    Faruk

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

    尊敬的 Faruk:

    今天(2月17日)是美国的假日、因此响应将延迟。 团队很快会就您的问题回复您。 感谢您的耐心。

    此致!

    David

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

    尊敬的 Faruk:

    仅当 MDI 线路静默且 WAKE 引脚驱动为低电平时、强制睡眠功能才起作用。 请参阅此应用手册以了解如何正确实现 TC -10功能。

    https://www.ti.com/lit/an/snla411/snla411.pdf

    此致、

    Nick

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

    好的。 我们的问题迎刃而解。 感谢您的帮助。