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.

[参考译文] AM2432:没有 EtherCAT 与 AM2432和自定义 PHY dp83822通信

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1485448/am2432-no-communication-ethercat-with-am2432-and-custom-phy-dp83822

器件型号:AM2432
主题: SysConfig 中讨论的其他器件

工具/软件:

您好的团队、

我是使用  ind_comms_sdk_am243x_09_02_00_15开发的 AM2432定制电路板、

我使用了 ether phy dp83822、但未建立与 EtherCAT 主站的链路。

我使用 CUST_PHY_dp83826b.c  作为参考制作了驱动器 CUST_PHY_dp83822.c。

我成功地读取和写入 PHY 寄存器。

我确认  BMSR 未完成自动协商过程、且未建立链路。

接下来、我检查了 MDIO 寄存器值、我在 MDIO_LIVE_REG (0x300B2408)中发现没有值。

(我的 PHY 地址为0和1)

请给出一些建立 EtherCAT 的建议。

最好的注意、

Oyama

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

    您好、

    您是否在应用程序中启用了增强链接? 如果是、您可以尝试禁用它并尝试扫描。

    此致、
    Aaron

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

    此外、还共享两个端口的 PHY 寄存器转储(0至0x1F)。

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

    大家好、Aaron 和 Pratheesh、

    您是否在应用程序中启用了增强链接? 如果是、您可以尝试禁用它并尝试扫描。

    我做了以下更改、这是正确的吗? 链路仍然未建立。

    #define ECAT_PHYPOLINVERT_IN                (false)
    #define ECAT_PHYPOLINVERT_OUT               (false)
    #define ECAT_PHYUSERXLINK_IN                (false)
    #define ECAT_PHYUSERXLINK_OUT               (false)

    共享两个端口的 PHY 寄存器转储(0至0x1F)。

    在上述更改后,我读下面的。

    phy0 (连接到主设备) phy1 (无连接)

    BMCR

    (0x00) 3100 (0x00) 3100
    BMSR (0x01) 7849 (0x01) 7849
    PHYIDR1 (0x02) 2000年 (0x02) 2000年
    PHYIDR2 (0x03) a240 (0x03) a240
    阿纳尔 (0x04) 01e1 (0x04) 01e1
    ANLPAR (0x05) 0000 (0x05) 0000
    ANER (0x06) 0004 (0x06) 0004
    ANNPTR (0x07) 2001. (0x07) 2001.
    ANLNPTR (0x08) 0000 (0x08) 0000
    CR1. (0x09) 0000 (0x09) 0000
    CR2. (0x0A) 0122 (0x0A) 0122
    CR3. (0x0B) 1000 (0x0B) 1000
    (0x0C) 0000 (0x0C) 0000
    REGCR (0x0D) 0000 (0x0D) 0000
    ADDAR (0x0E) 0000 (0x0E) 0000
    FLDS (0x0F) 0000 (0x0F) 0000
    PHYSTS (0x10) 4082 (0x10) 4082
    PHYSCR (0x11) 010A (0x11) 010A
    MISR1 (0x12) 40°C (0x12) 00fc
    MISR2 (0x13) 08ff (0x13) 08ff
    FCSCR (0x14) 0000 (0x14) 0000
    RECR (0x15) 0000 (0x15) 0000
    BISCR (0x16) 0100 (0x16) 0100
    RCSR (0x17) 0043 (0x17) 0043
    LEDCR (0x18) 0400 (0x18) 0400
    PHYCR (0x19) 8020 (0x19) 8021
    10B.S. (0x1a) 0000 (0x1a) 0000
    BICSR1 (0x1b) 007D (0x1b) 007D
    BICSR2 (0x1c) 05ee (0x1c) 05ee
    (0x1d) 0000 (0x1d) 0000
    CDCR (0x1E) 0102 (0x1E) 0102
    PHYRCR (0x1F) 0000 (0x1F) 0000

    最好的注意、

    Oyama

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

    从 PHY 寄存器值来看、似乎链路断开且未检测到信号。  此外、来自 MDIO_CONTROL_REG、它显示 MDIO 状态机处于空闲状态并被禁用。

    为了进一步了解这一点、您能否提供中的值 PRU_MDIO_MDIO 寄存器(0x300B2400至0x300B2484 )  

    此外、您是否在捕获上述值的同时将端口连接到活动网络、或者端口是否已断开?

    此致、
    Aaron

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

    尊敬的 Aarom:

    在捕获时、phy0已连接到活动主设备。

    phy1已断开连接。   

    经进一步调查、我发现 phy0每隔几秒在两种状态之间转换一次、如下表所示。

    但是、主器件无法扫描器件、CPU 寄存器值保持不变、如下面的屏幕截图所示。

     

    状态0 STATE1
    BMCR (0x00) 3100 (0x00) 3100
    BMSR (0x01) 7849 (0x01) 786d
    PHYIDR1 (0x02) 2000年 (0x02) 2000年
    PHYIDR2 (0x03) a240 (0x03) a240
    阿纳尔 (0x04) 01e1 (0x04) 01e1
    ANLPAR (0x05) 0000 (0x05) 0081
    ANER (0x06) 0014 (0x06) 0004
    ANNPTR (0x07) 2001. (0x07) 2001.
    ANLNPTR (0x08) 0000 (0x08) 0000
    CR1. (0x09) 0000 (0x09) 0000
    CR2. (0x0A) 0122 (0x0A) 0122
    CR3. (0x0B) 1000 (0x0B) 1000
    (0x0C) 0000 (0x0C) 0000
    REGCR (0x0D) 0000 (0x0D) 0000
    ADDAR (0x0E) 0000 (0x0E) 0000
    FLDS (0x0F) 0000 (0x0F) 0000
    PHYSTS (0x10) 5892 (0x10) 0095
    PHYSCR (0x11) 010A (0x11) 010A
    MISR1 (0x12) 40°C (0x12) 64fc
    MISR2 (0x13) 0aff (0x13) 08ff
    FCSCR (0x14) 0000 (0x14) 0000
    RECR (0x15) 0000 (0x15) 0000
    BISCR (0x16) 0100 (0x16) 0100
    RCSR (0x17) 0043 (0x17) 0043
    LEDCR (0x18) 0400 (0x18) 0400
    PHYCR (0x19) 8020 (0x19) 8c20
    10B.S. (0x1a) 0010 (0x1a) 0000
    BICSR1 (0x1b) 007D (0x1b) 007D
    BICSR2 (0x1c) 05ee (0x1c) 05ee
    (0x1d) 0000 (0x1d) 0000
    CDCR (0x1E) 009e (0x1E) 0102
    PHYRCR (0x1F) 0000 (0x1F) 0000

    最好的注意、

    Oyama

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

    您好、

    从您共享的 PHY 寄存器中、我可以看到已启用自动协商 、启用扩展全双工、启用 奇半字节检测。 这符合 EtherCAT 要求。

    我将详细介绍 PHY 和 MDIO 寄存器、有关任何可能的问题/配置错误、请参阅。

    经过进一步调查、我发现 phy0每隔几秒在两种状态之间转换一次、如下表所示。

    需要检查以下几点:

    • 您是否在应用程序中调用 PHY_softwareRestart API? 如果是、您可以尝试绕过复位吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Aarom:

    如果是、您可以尝试绕过重置吗?

    对不起,我真的不明白,这是我需要更改如下吗?  

    void CUST_PHY_DP83822_softwareRestart(void* pAppCtxt_p, void* pStackCtxt_p)
    {
        OSALUNREF_PARM(pAppCtxt_p);
        OSALUNREF_PARM(pStackCtxt_p);
    }

    或禁用该 CB 功能?  

    void EC_SLV_APP_SS_registerStacklessBoardFunctions(EC_SLV_APP_SS_Application_t *pAppInstance_p)
    {
        if (!pAppInstance_p)
        {
            goto Exit;
        }
    
        ESL_BOARD_OS_registerPhys(pAppInstance_p->ptEcSlvApi, pAppInstance_p->selectedPruInstance);
    
        CUST_PHY_CBregisterLibDetect(CUST_PHY_detect, pAppInstance_p);
        //CUST_PHY_CBregisterReset(EC_SLV_APP_SS_boardPhyReset, pAppInstance_p);
    
    Exit:
        return;
    }

    在我的电路板上、没有软件复位 GPIO 引脚、现在只有硬件复位引脚。

    设置自动协商后、是否需要对 PHY 进行软件重启?

    最好的注意、

    Oyama

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

    您好、

    我将在内部与专家讨论、然后返回给您。

    此致、
    Aaron

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

    尊敬的 Tomoya:

    此外、要将 ECAT_PHYUSERXLINK_IN 和 ECAT_PHYUSERXLINK_OUT 设置为 FALSE、请注释掉 CUST_PHY_DP83822 _enableFastLinkDownDet ()的函数体内容。

    此致

    Andreas

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

    尊敬的  Andreas:

    注释掉 CUST_PHY_DP83822 enableFastLinkDownDet ()
    函数体的内容

    我试过,但它不起作用。

    最好的注意、

    Oyama

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

    抱歉、昨天忽略了这个问题。 请重新包含 CUST_PHY_CBregisterReset ()函数、并通过设置 pPhyLibDesc_p->softwareRestart = NULL (在 CUST_PHY_dp83822.c 中)来删除 softwareRestart 函数、从而绕过复位。

    此致

    Andreas

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

    尊敬的  Andreas:

    谢谢、我确认链路始终正常工作。 (BMSR = 786d)

    但是、它无法从主器件扫描该器件。

    我检查了下面的寄存器、没有建立 MII 链路。

    我还在从主器件扫描后检查了 MII0_RXD0和 MII0_TXD0波形。

    我确认了 MII0_RXD0波形、但没有看到 MII0_TXD0波形。

    最好的注意、

    Oyama

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

    从 MDIO 存储器转储来看、似乎 仍未设置 MDIO_ALIVE_REG、这意味着 PHY 未成功连接(即使 BMSR 显示已建立有效链路也是如此)。

    确保处理了以下内容:

    • 对于 AM243x、PHY 配置为 MII 模式。 您应在 SysConfig 中选择相应的模式、并确保为 PHY 多路复用正确的引脚。
    • 在 SysConfig 中、确保为 DP83822 PHY 正确配置以太网接口引脚。 您必须确保正确分配 TX/RX 线路、MDC/MDIO 线路和 CLK 引脚。
    • 启用扩展全双工、启用奇半字节检测-(这些看起来在设置了 CR2中的位2和位5时被注意)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的  Andreas:

    在我的电路板上、dp83822的 LED_0 引脚未连接到 AM2432的 MII0_RXLINK 引脚、

    是否需要 MII 链路、 它与 MDIO_ALIVE_REG 值是否相关?

       

    最好的注意、

    Oyama

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

     支持电缆冗余需要 MII0_RXLINK。  

    PHY 链路中断反应时间(链路中断到链路信号/LED 输出变化的时间)必须小于15us 才能实现冗 余操作、而使用 RXLINK 的增强链路会处理此时序约束(请参阅测试电缆冗余 以了解测试场景)。

    如果禁用了增强型链路、则实现基于 MDIO 状态机的检测、这很慢、因为 MDIO 控制器到 PHY 之间有一条串行链路用于消息传递、通常需要200到250 µs。 MLINK/mii_rxlink 检测发生的速度与 PHY 切换链路的速度一样快、通常在10 µs 内。

    缺少此引脚不应成为 EtherCAT 功能的阻止器。 即使没有 RXLINK、EtherCAT 通信也应按预期工作。

    关于 MDIO 配置、您是否从 SysConfig 启用 MDIO 手动模式? 如果是、您是否可以禁用它并查看是否会加载 MDIO 寄存器?

    此外、您是否使用 ICSSG 0 即 ICSSG 1. 实例?  

     此致、
    Aaron

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

    尊敬的  Andreas:

    我正在使用 ICSSG1。

    我了解  RXLINK。 但禁用 MDIO 手动模式后、EtherCAT 应用程序会堆叠。

    是否需要额外配置?

    最好的注意、

    Oyama

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

    您好、

    我了解  RXLINK。 但禁用 MDIO 手动模式后、EtherCAT 应用程序会堆叠。

    [/报价]
    • 禁用 MDIO 手动模式后、确保设置活动寄存器位(0x300B2408)。  启用 MDIO 手动模式后、在偏移处对活动寄存器进行仿真 0x30080000 + 0x10E40 + 0x08 和连接寄存器进行监控。
    • 此外、确保 设置了位6并清除了位7  0x300B2484 和  0x300B248C 寄存器和位0-4具有正确的 PHY 地址。
      •    

    此致、
    Aaron

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

    您好  Aaron、

    我修改了 ESL_Board_config.h、  

    #define ECAT_PHYADDR_IN                     (0u)
    #define ECAT_PHYADDR_OUT                    (1u)
    #define ECAT_PHYPOLINVERT_IN                (true)
    #define ECAT_PHYPOLINVERT_OUT               (true)
    #define ECAT_PHYUSERXLINK_IN                (false)
    #define ECAT_PHYUSERXLINK_OUT               (false)

    pPhyLibDESC_p->softwareRestart to NULL、已禁用  MDIO 手动模式和 RXLINK 引脚。

    这确认了 BMSR = 786d、MDIO_REGS_LIVE_REG = 3、0x300B2484 = 0x40和 0x300B248C=0x41。

    但在扫描后、没有从那里发送数据包。

    在我看来、PRU 无法捕获 MII Rx 信号。 (I confirmed MII Rx 波形。)

    我还应该检查什么吗?

    最好的注意、

    Oyama

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

    是否有任何进展?

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

    您好  Aaron、

    我还有一个问题。

    PHY 复位引脚在默认 SDK 中定义、但是否需要在 PHY 复位引脚和 GPIO 之间进行连接?
    目前、我的电路板没有这些连接。

     

    // PHY0 GPIO pins
    #define APP_PHYIN_RESET_PIN                 ESL_GPIO_enPIN_28    
    #define APP_PHYIN_RESET_MODULE              ESL_GPIO_enMODULE_0
    #define APP_PHYOUT_RESET_PIN                ESL_GPIO_enPIN_20
    #define APP_PHYOUT_RESET_MODULE             ESL_GPIO_enMODULE_0

    最好的注意、

    Oyama

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

    您好、Oyama、

    在我们的示例中、APP_PHYIN_RESET_PIN 和 APP_PHYOUT_RESET_PIN 在 ESL_Board_OS_configureResets ()中配置为输出引脚、然后用在 ESL_Board_OS_phyReset () RESP 中。 EC_SLV_APP_SS_boardPhyReset ()、用于复位 PHY。

    EC_SLV_APP_SS_boardPhyReset ()是 a)使用 EC_SLV_APP_SS_registerReset ()中的 CUST_PHY_CBregisterReset ()注册为回调;b)在 EC_SLV_APP_SS_initBoardFunctions ()中直接调用(用于两个 PHY)。

    因此、如果这些 GPIO 与 PHY 之间没有连接、请确保相应地调整 EC_SLV_APP_SS_boardPhyReset ()、以便电路板上连接到这些 GPIO 的任何器件都不会出现不必要的行为。

    此致

    Andreas

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

    您好、

    我将该部分修改为了正确的引脚。

    但情况没有改变。

    // PHY0 GPIO pins
    #define APP_PHYIN_RESET_PIN                 ESL_GPIO_enPIN_84   
    #define APP_PHYIN_RESET_MODULE              ESL_GPIO_enMODULE_0
    #define APP_PHYOUT_RESET_PIN                ESL_GPIO_enPIN_84
    #define APP_PHYOUT_RESET_MODULE             ESL_GPIO_enMODULE_0

    最好的注意、

    Oyama

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

    您好  Aaron、

    我检查了 MII RX 线上的波形。
    从主器件扫描后、PHY 引脚1、30、31、32 (请参阅我的原理图)卡在高电平。
    这似乎是异常行为。 我该如何处理它?

    最好的注意、

    Oyama

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

    您好、

    将建立链路、但通信尚未实现。

    我还需要检查什么吗?

    最好的注意、

    Oyama

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Unknown 说:
    ]从主器件扫描后、PHY 引脚1、30、31、32 (请参阅我的原理图)卡在高电平。

    这似乎是与 PHY 相关的问题、会将线程分配给 PHY 专家。 可能是由于不正确的电源、复位序列或终止而导致的

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

    您好、Oyama、

    您是否看到其他 MAC 线路也被驱动为高电平(RX_CLK、RX_CTRL、...)?

    由于 MDI 链路已建立并且寄存器可访问、我不希望 PHY 将这些线路驱动为高电平(除非数据有效载荷都是 F)。

    无论在 MDI 侧主动发送了链路或数据、线路是否保持高电平?

    谢谢您、
    Evan

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

    您好、

    也许解释不同。 在 第一个 RX 之后、RX_D0~D3保持 高电平、 除非 RX_DV 为高电平。

    我确认 RX_CLK 在25MHz 运行正常。

    我使用 EC_API_SLV_readWordEscRegister()确认了 ESC 寄存器。

    RX 端口0帧计数器0x0E00在从主器件扫描后递增、 RX 错误计数器0x0300保持为0。

    我认为 EtherCAT 数据已经到达 PRU。

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

    您好、Oyama、

    很高兴看到。 如果您遇到任何功能问题、请告诉我、否则我们可以认为此问题已结束。

    谢谢您、
    Evan

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

    您好、Evan

    但是、主要问题是尽管 RX 来了、但没有从 AM2432传输到主器件的 TX 数据。  

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

    您好、Oyama、

    这里看起来 TX_CLK 未连接? 我理解的是 COL_1、CRS_1和 TX_CLK1具有无连接标记或测试点指示? 如果我错了、请纠正我。

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

    您好 Aaron、

    如您所说、网状电阻器未连接。
    今天、我使用0欧姆电阻器连接了 TX_CLK、并确认扫描成功并且 EtherCAT 通信可以实现。
    COL 和 CRS 仍然未连接。
    sysconf 的 EtherCAT 部分中不存在这些引脚、但它们是否需要连接?
    此外、TX_CLK 对于带 AM243的 MII 是否绝对必要?

    最好的注意、

    Oyama

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

    这没关系

    此外、TX_CLK 对于带 AM243的 MII 是否绝对必要?

    是的、没有时钟数据不会传输到 PHY!!!

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

    您好的团队、

    感谢您耐心回答我反复提出的问题。