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/AM3352:RMII 通信问题

Guru**** 2601915 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/642329/rtos-am3352-rmii-communication-issue

器件型号:AM3352

工具/软件:TI-RTOS

大家好、  

我们在客户电路板上的 RMII 设计中遇到了一个软件问题。 请帮助检查以下内容。  

感谢您的任何评论或提示!

硬件平台:

采用 RMII 设计的客户产品板。

此设计可与 Linux 配合使用、请参阅以下屏幕截图。 因此硬件设计没有问题。

软件平台:

PRCESSOR-SDK-RTOS 1.0.7和1.0.8。

在这两个上进行了测试。

基于以下示例:

NIMU_BasicExample_skAM335x_armExampleproject

C:\ti\pdk_am335x_1_0_7\packages/MyExampleProjects\NIMU_BasicExample_skAM335x_armExampleproject

问题描述:

在 SK EVM 上运行时、如果网线插拔和插入、则可能会检测到链路状态。  从 PC 主机端、我们可以成功地对电路板执行 Ping 操作。

更改相关代码后、可以检测到链路状态、但无法从主机端成功 ping 通。

代码更改:

MAIN_skAM335x.c (位于 C:\ti\pdk_am335x_1_0_7\packages/ti\transport:NDK\Nimu\examples\src\)

将 RGMII 模式更改为 RMII 模式:

 

AM335x_evmsk_pinmux_data.c (位于 C:\ti\pdk_am335x_1_0_7\packages/ti\starterware\board\am335x 中)

将引脚多路复用数据从原始 RGMII 引脚更改为当前硬件设计使用的 RMII 引脚。

enet_phy.c (位于 C:\ti\pdk_am335x_1_0_7\packages/ti\board\src\skAM335x\device 中)

将_cpswIsGigPhy 定义从 true 更改为 FLASE、因为这不是千兆位以太网。  

emac_soc.c (位于 C:\ti\pdk_am335x_1_0_7\packages/ti\drv\emac\soc \am335x\)

这是以太网 phy_id 参数所在的位置。 由于客户的设计对 EMAC1使用0,对 EMAC2使用1,因此与 SK EVM 使用的值相同。 因此不需要更改。

编译过程:

由于 board_lib、EMAC 有一些变化、我们必须首先重新编译 board_lib 和 EMAC、然后转到 CCS 项目 NIMU_BasicExample_skAM335x_armExampleproject 进行最终编译。

测试结果:

在此测试中、我们插入和拔出网线3次、因此您可以看到连接建立3次、如下所示:

但是、在 PC 主机端、我们无法成功对电路板执行 Ping 操作。

验证过程:

我们检查了寄存器的 pinmux 和 gmii_SEL 设置、结果发现所有设置都生效。

通过与 Linux uboot 的寄存器转储进行比较、每个引脚和 gmii_SEL 寄存器的引脚多路复用设置都显示了正确的值。

此外、我们还执行了一些测试来验证 phy_id 设置、如果对于 EMAC1端口、phy_id 更改为0以外的其他值、则会报告以下问题:

从我的角度来看、gmii_SEL、pinmux 设置、phy_id 都是正确的。

问题:

还有什么可能导致产品板 PC 主机 ping 失败?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Steven、

    板载使用哪种 PHY (TLK/DP83x 或其他)?
    是否可以使用 cpsw_Nimu_eth.c 中的函数 CpswEmacAddrGet ()转储 MAC 地址? MAC 地址不应是任何多播地址。
    您是否还比较了 Linux 和 RTOS 之间的 PHY 和 CPSW 统计信息寄存器? RCSR 0x0017 PHY 寄存器的值是什么?

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

    我使用 LAN8720 phy、CpswEmacAddrGet ()获取正确的 Mac,与在 Linux 下相同。
    作为 Linux 和 RTOS 之间的 PHY 和 CPSW 统计寄存器以及 RCSR 0x0017 PHY 寄存器、我还在寻找。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Garrett,í a

    RCSR 0x0017 PHY 寄存器特定地址的值是我找不到的值。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Rong、

    请忽略仅适用于 TLK/DP83x PHY 的0x17寄存器。
    此外、如果您比较电路板和入门套件之间的以下 EMAC 呼叫流程、也会有所帮助。

    CpswEmacInit() in Nimu/cpsw_Nimu_eth.c

    Nimu_start() in Nimu/cpsw_Nimu_eth.c
    --> emac_drv.c 中的 emac_open()
        ->emac_open_v4() in emac_drv_v4.c
                 ---- >EMAC_setupCpswInitConfig()
                 ---- >EMAC_interruptInit()
            ->emac_cpswOpen() in emac_cpsw.c

    此致、
    Garrett

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

    Garrett


    在读取代码时、我有一些无法理解的地方:


    在"board \ src \ skam335x \ device \ enet_pht.h"中

    #define ENETPHY_CNTRL_REG 0x0019和#define ENETPHY_CONFIG_REG 22

    这两个宏的特定作用可以在宏周围执行一些操作来进行设置、具体来说是所发挥的作用  

    因为我在 Linux uboot 下没有找到相应的设置、所以我想了解这里的角色 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Rong、

    用于电缆诊断测试控制和 MDI 对选择(ENETPHY_CONFIG_REG 22、0x16)的两个 PHY 寄存器和 LED 控制(ENETPHY_CNTRL_REG 0x19)的两个 PHY 寄存器。 有关详细信息、请参阅 PHY AR8031 (在 skam335x 上)。 这两个寄存器不适用于您的 PHY LAN8720。

    此致、
    Garrett