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.

[参考译文] DP83822EVM:DP83822 CAN't 读取和写入寄存器

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1281136/dp83822evm-dp83822-can-t-read-and-write-registers

器件型号:DP83822EVM
主题中讨论的其他器件:TMS320F28388D

您好!

实际上、我使用的是 enet_lwip_udp 和 Ethernet_C28x_config、工作正常。 我想更改 LED_1的可配置功能、默认情况下不使用。

此 LED 的寄存器为0x0460、配置为0001 RX/TX 活动。

我已经尝试查看来自德州的有关访问 ENET 寄存器的示例、并尝试使用以下命令:

    Ethernet_device_struct.baseAddresses.enet_base = EMAC_BASE;
    
    phyRegContent= HWREG(Ethernet_device_struct.baseAddresses.enet_base + 0x0460U);
    phyRegContent= Ethernet_readPHYRegister(Ethernet_device_struct.baseAddresses.enet_base, 0x0460U);

使用 HWREG 时、我得到0x0000使用"Ethernet_readPHYRegister"时、我得到0xFFFF;

实际上、我已经尝试读取其他已知地址、例如0x0000、以便与数据表默认值 进行比较、但我读取的寄存器都没有对应的值。
在其他寄存器(0x0000、0x0001、0x0002等)上使用 HWREG 时、我读取与数据表默认值不对应的"某些东西 "、当我使用"Ethernet_readPHYRegister"时、我得到0xFFFF 读取的任何寄存器。

我缺少什么?


基准 MCU 是 TMS320F28388D。

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

    您好,Yaroslav,

    0x0460是扩展寄存器、不能直接访问。 若要读取0x0460:

    • 写入 寄存器0xD = 001F
    • 写入 寄存器0xE = 0460
    • 写入 寄存器0xD = 401F
    • 读取寄存器0xE  

    这里是有关扩展寄存器读取的常见问题解答: faq-extended-register-space-access-for-Ethernet-phys

    寄存器0x0-0x1F 可直接读取/写入、无需执行上面着重指出的步骤。 如果这些寄存器读取值与数据表不匹配、则可能会导致 SMI 连接(MDC/MDIO)的设置方式或用于访问寄存器的命令出现问题。 请仔细检查这些以及就绪寄存器0x2和0x3、无论您的设置如何、它们都应与数据表匹配。

    此致、

    阿尔瓦罗

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

    您好 Alvaro、

    我使用过以下命令(具有相关结果):

    HWREG (Ethernet_DEVICE_STRUCT.baseAddresses.enet_BASE + 0x1D)= 0x001F;
    HWREG (Ethernet_DEVICE_STRUCT.baseAddresses.enet_BASE + 0x1E)= 0x0460;
    HWREG (Ethernet_DEVICE_STRUCT.baseAddresses.enet_BASE + 0x1D)= 0x401F;
    phyRegContent = HWREG (Ethernet_DEVICE_STRUCT.baseAddresses.enet_BASE + 0x1E);  //-> 0x0000

    HWREG (Ethernet_DEVICE_STRUCT.baseAddresses.enet_BASE + 0x0D)= 0x001F;
    HWREG (Ethernet_DEVICE_STRUCT.baseAddresses.enet_BASE + 0x0E)= 0x0460;
    HWREG (Ethernet_DEVICE_STRUCT.baseAddresses.enet_BASE + 0x0D)= 0x401F;
    phyRegContent = HWREG (Ethernet_DEVICE_STRUCT.baseAddresses.enet_BASE + 0x0E);  //-> 0x0000

    phyRegContent = HWREG (Ethernet_DEVICE_STRUCT.baseAddresses.enet_BASE + 0x1);//-> 0x00A0
    phyRegContent = HWREG (Ethernet_DEVICE_STRUCT.baseAddresses.enet_BASE + 0x2); //-> 0x0000
    phyRegContent = HWREG (Ethernet_DEVICE_STRUCT.baseAddresses.enet_BASE + 0x3); //-> 0x0000
    phyRegContent = Ethernet_readPHYRegister (Ethernet_DEVICE_STRUCT.baseAddresses.enet_BASE、0x1);  //-> 0xFFFF
    phyRegContent = Ethernet_readPHYRegister (Ethernet_DEVICE_STRUCT.baseAddresses.enet_BASE、0x2);  //-> 0xFFFF
    phyRegContent = Ethernet_readPHYRegister (Ethernet_DEVICE_STRUCT.baseAddresses.enet_BASE、0x3);  //-> 0xFFFF

    Ethernet_writePHYRegister (Ethernet_device_struct.baseAddresses.enet_BASE、0x1D、0x001F);
    EtherNet_writePHYRegister (Ethernet_DEVICE_STRUCT.baseAddresses.enet_BASE、0x1E、0x0460);
    Ethernet_writePHYRegister (Ethernet_device_struct.baseAddresses.enet_BASE、0x1D、0x401F);
    phyRegContent = Ethernet_readPHYRegister (Ethernet_DEVICE_STRUCT.baseAddresses.enet_BASE、0x1E);  //-> 0xFFFF

    Ethernet_writePHYRegister (Ethernet_device_struct.baseAddresses.enet_BASE、0x0D、0x001F);
    Ethernet_writePHYRegister (Ethernet_device_struct.baseAddresses.enet_BASE、0x0E、0x0460);
    Ethernet_writePHYRegister (Ethernet_device_struct.baseAddresses.enet_BASE、0x0D、0x401F);
    phyRegContent = Ethernet_readPHYRegister (Ethernet_DEVICE_STRUCT.baseAddresses.enet_BASE、0x0E);  //-> 0xFFFF

    我 在此命令之前缺少某种配置或特权?

    Ethernet_DEVICE_STRUCT.baseAddresses.enet_BASE 为0x400C0000

    我已经检查了时钟和数据的连接、实际上它们是正确且定义正确的。 实际上、该器件的配置(使用示例)是正确的并能正常工作、在 Ethernet_init 中已经有一些 PHY 的直接配置。 因为它运行良好,我还认为 SMI 是正确的。

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

    您好,Yaroslav,

    我还需要检查一些事项、

     您是否可以确认 MDIO 线路有一个2.2kΩ 上拉电阻器?

    您是否还可以使用逻辑分析仪来探测 MDC 和 MDIO 线路? MDIO STA MDIO PHY 是同一条线路、只是为了区分来自处理器(STA)的消息和来自我们的 PHY 的消息。 当读取所有 F 时、这通常是因为处理器发出其读取命令(之后线路变为高电平)、PHY 从不响应。 线路为高电平、因此它会"读取"所有的 F。 当读取全0时、除了有人拉低外、一切都是一样的。 我要求使用逻辑分析仪查看是否正在发送实际有效数据。

    此图取自  DP83867数据表的第8.4.2节、但也适用于 DP83822。

    此致、

    阿尔瓦罗

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

     您是否可以确认 MDIO 线路有一个2.2kΩ 上拉电阻器?

    是的、 如果 连接正确、也请使用示波器进行仔细检查。

    我无法在我的线路上确定您的模式。 我附加了我发送到 PHY 的每个命令的屏幕截图。 也许可以帮助您了解这个问题。 尤其是我不明白在最后一张图片中发生了什么。

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

    您好,Yaroslav,

    照片似乎没有发送、您能尝试将它们作为附件发送吗?

    逻辑分析仪可简化对这些波形的研究。 用示波器并不是不可能的、只是乏味多了。 请尝试发送照片,我可以给它一个镜头.

    此致、

    阿尔瓦罗

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

    我会在星期一给他们发邮件、实际上我不在办公室。 我可以使用逻辑分析仪进行相同的捕获(我不记得我的示波器是否有、但我 无论如何都可以准备一个 Excel)并将其发送给您。

    那么、实际上没有向 PHY 发送任何数据是对的吗?

    关于最后一张图片:

    这是什么意思? 这是否会导致分析仪上出现不可预测的数据?

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

    您好,Yaroslav,

    似乎处理器正在尝试与 PHY 通信、但 PHY 没有响应。 期待您提到要发送的其他照片。  

    此致、

    阿尔瓦罗

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

    您好!

    很抱歉耽误你的时间、我 在这里添加一个.XLSX 文件的链接。

    https://file.io/eHFsE73AtYZJ

    如果您愿意通过电子邮件、请通过 PM 与我分享您的电子邮件。 如果有更好的上传网站,请分享。

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

    您好、Yaro、

    我们的防火墙不允许我打开您发送的链接。 我给您发送了一个朋友请求、以便我们可以聊天。

    此致、  

    阿尔瓦罗

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

    我在此处附上 Dropbox 上的文件,以防有人想要检查:

    https://www.dropbox.com/t/dFQ6kktHDTnXYcJp

    实际上问题仍未解决。

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

    您好、Yaro、

    我已经通过邮件向您发送了回复。

    此致、

    阿尔瓦罗