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.

[参考译文] DP83822IF:DP83822IF

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/972917/dp83822if-dp83822if

器件型号:DP83822IF

你(们)好

我正在尝试使用 Xilinx Ultrascale + TI DP83822 PHY 在定制板上设置免费的 RTOS + TCP。
PHY 不是引导自举、因为硬件团队希望通过软件对其进行配置。

电路板上的 PHY 布线应使用 RGMII 接口。

我无法通过以太网获取任何流量、但最令人困惑的是、电路板连接的 PC 指示电缆已断开连接。

根据我的理解、即使没有任何 MAC 发送、如果初始化正常、PC 至少应该识别连接的电缆。

我已经为 PHY 完成了以下初始化:

#define PHY_TI_BMCCR 0x00 //基本控制模式寄存器
#define PHY_TI_BMCCR_RESET_MASK 0x8000
#define PHY_MODE_TI_DP83822_AUTONEGO_EN 0x1000
#define PHY_MODE_TI_DP83822_AUTONEGO_RESTART 0x0200

#define PHY_TI_PHYRCR 0x1F // PHY 复位控制寄存器
#define PHY_TI_PHYRCR_DIGITAL_RESET_MASK 0x8000
#define PHY_TI_PHYRCR_DIGITAL_RESTK_MASK 0x4000

#define PHY_MODE_TI_DP83822 0x24
#define PHY_MODE_MASK 0x3F
#define PHY_MODEL 0x4

#define PHY_MODE_TI_DP83822_LEDCR 0x18
#define PHY_MODE_TI_DP83822_OVRLED0_EN 0x10
#define PHY_MODE_TI_DP83822_OVRLED0_ON 0x02

#define PHY_MODE_TI_DP83822_CR1 0x09
#define PHY_MODE_TI_DP83822_LINKLOSSREC_EN 0x80
#define PHY_MODEL TI_DP83822_FASTAUTOMDIX_EN 0x40
#define PHY_MODE_TI_DP83822_ROBUSTAUTOMDIX_EN 0x20
#define PHY_MODE_TI_DP83822_FASTAUTONEGO_EN 0x10

#define PHY_MODE_TI_DP83822_CR2 0x0A
#define PHY_MODE_TI_DP83822_100BASE-FX_EN 0x4000
#define PHY_MODE_TI_DP83822_EXT_FULL_DUPLE_YPULTRAINY_EN 0x0020

#define PHY_MODE_TI_DP83822_CR3 0x0B

#define PHY_MODE_TI_DP83822_RCSR 0x17
#define PHY_MODEL TI_DP83822_RGMII_RX_CLCK_SHIFT_EN 0x1000
#define PHY_MODE_TI_DP83822_RGMII_TX_CLCK_SHIFT_EN 0x0800
#define PHY_MODEL TI_DP83822_RGMII_MODE_EN 0x0200
#define PHY_MODEL TI_DP83822_RGMII_50MHz_CLCK_SEL 0x0080

#define PHY_MODE_TI_DP83822_PHYCR 0x19
#define PHY_MODEL TI_DP83822_AUTOMDIX_EN 0x8000
#define PHY_MODE_TI_DP83822_LEDCFG_MODE1_EN 0x0020

#define PHY_RESET_MAX_WAIT_TIME 1000000000
#define PHY_RESET_MIN_WAIT_TIME 10000

#define DEBUG_Ethernet 1.

uint32_t configure_IEEE_phy_speed_US (xemacp * xemacsp,unsigned speed,u32 phy_addr)

uint16_t phyregtemp、phyregtempcheck;
uint16_t 控制;
uint16_t phy_identity;
uint16_t phy_model;
uint32_t 返回状态;
volatile uint32_t wait = 0;


/*执行与硬件复位等效的芯片复位*/
XEmacps_PhyRead (xemacpsp、phy_addr、PHY_TI_PHYRCR,(uint16_t *)&phyregtemp);
phyregtemp |= PHY_TI_PHYRCR_DIGITAL_RESET_MASK;
XEmacps_PhyWrite (xemacpsp、phy_addr、PHY_TI_PHYRCR、phyregtemp);
//返回状态= XEmacps_PhyRead (xemacsp、phy_addr、PHY_TI_PHYRCR、(uint16_t *)&phyregtemp);
//
// if (RetStatus!= XST_Success)
//{
// xil_printf (“数字重启时出错\n\r\n);
//返回 XST_FAILURE;
//}
/*等待重置完成*/
Wait = 0;
while (WAIT++< PHY_RESET_MAX_WAIT_TIME)

XEmacps_PhyRead (xemacpsp、phy_addr、PHY_TI_PHYRCR、(uint16_t *)&phyregtemp);
if (((phyregtemp & PHY_TI_PHYRCR_DIGITAL_RESET_MASK)= 0x00)&&(Wait >= PHY_RESET_MIN_WAIT_TIME))
中断;

if (Wait >= PHY_RESET_MAX_WAIT_TIME)//重置没有按时完成

xIL_printf ("复位时出错\n\r\n);
返回 XST_FAILURE;

/*执行 PCS 寄存器复位-可能在第一次复位后是冗余的*/
XEmacps_PhyRead (xemacpsp、phy_addr、PHY_TI_BMCCR、(uint16_t *)&phyregtemp);
phyregtemp |= 0x8000;
XEmacps_PhyWrite (xemacpsp、phy_addr、PHY_TI_BMCCR、phyregtemp);

/*等待重置完成*/
Wait = 0;
while (WAIT++< PHY_RESET_MAX_WAIT_TIME)

XEmacps_PhyRead (xemacpsp、phy_addr、0、(uint16_t *)&phyregtemp);
if (((phyregtemp & PHY_TI_BMCCR_RESET_MASK)= 0x00)&&(Wait >= PHY_RESET_MIN_WAIT_TIME))
中断;

if (Wait >= PHY_RESET_MAX_WAIT_TIME)//重置没有按时完成

xIL_printf (“PCS 寄存器复位时出错\n\r\n);
返回 XST_FAILURE;

//获取设备标识
XEmacps_PhyRead (xemacpsp、phy_addr、PHY_identifier_1_REG、&phy_identity);

//获取设备模型
XEmacps_PhyRead (xemacpsp、phy_addr、PHY_identifier_2_REG、&phy_model);
PHY_MODEL =((phy_model >> PHY_MODEL)& PHY_MODEL 掩码);

if (PHY_TI_identifier = phy_identity)

switch (phy_model)

案例 PHY_MODE_TI_DP83822:// MK4 BMU HW PHY

//设置基本模式控制寄存器以启用自动协商
XEmacps_PhyRead (xemacpsp、phy_addr、PHY_TI_BMCCR、(uint16_t *)&phyregtemp);
phyregtemp |= PHY_MODE_TI_DP83822_AUTONEGO_EN;
XEmacps_PhyWrite (xemacpsp、phy_addr、PHY_TI_BMCCR、phyregtemp);

#if defineed (debug_ethernet)&&(debug_ethernet = 1)
//检查初始化
XEmacps_PhyRead (xemacpsp、phy_addr、PHY_TI_BMCCR、(uint16_t *)&phyregtempcheck);
xil_printf ("PHY %x 中的注册地址-设置:%x -值:%x\n"、PHY_TI_BMCCR、phyregtemp、phyregtempcheck);
#endif

//设置控制寄存器1以启用链路丢失恢复等
XEmacps_PhyRead (xemacpsp、phy_addr、PHY_MODLE_TI_DP83822_CR1、(uint16_t *)&phyregtemp);
// phyregtemp |=(PHY_MODE_TI_DP83822_LINKLOSSREC_EN |
// PHY_MODE_TI_DP83822_FASTAUTOMDIX_EN |
// PHY_MODE_TI_DP83822_ROBUSTAUTOMDIX_EN);
phyregtemp |=(PHY_MODE_TI_DP83822_FASTAUTOMDIX_EN |
PHY_MODE_TI_DP83822_ROBUSTAUTOMDIX_EN);
phyregtemp &=~Phy_model_TI_DP83822_FASTAUTONEGO_EN;//禁用快速自动协商
XEmacps_PhyWrite (xemacpsp、phy_addr、PHY_MODLE_TI_DP83822_CR1、phyregtemp);

#if defineed (debug_ethernet)&&(debug_ethernet = 1)
//检查初始化
XEmacps_PhyRead (xemacpsp、phy_addr、PHY_MOD_TI_DP83822_CR1、(uint16_t *)&phyregtempcheck);
xil_printf ("PHY %x 中的注册地址-设置:%x -值:%x\n"、PHY_MODEL TI_DP83822_CR1、phyregtemp、phyregtempcheck);
#endif

//启用100Mbps 功能
XEmacps_PhyRead (xemacpsp、phy_addr、PHY_MODEL _TI_DP83822_CR2、(uint16_t *)&phyregtemp);
phyregtemp |= PHY_MODE_TI_DP83822_100BASE-FX_EN;
phyregtemp |= PHY_MODEL TI_DP83822_EXT_FULL_DUPLE_ANTIA_EN;
XEmacps_PhyWrite (xemacpsp、phy_addr、PHY_MODLE_TI_DP83822_CR2、phyregtemp);

#if defineed (debug_ethernet)&&(debug_ethernet = 1)
//检查初始化
XEmacps_PhyRead (xemacpsp、phy_addr、PHY_MODEL _TI_DP83822_CR2、(uint16_t *)&phyregtempcheck);
xil_printf ("PHY %x 中的注册地址-设置:%x -值:%x\n"、PHY_MODEL TI_DP83822_CR2、phyregtemp、phyregtempcheck);
#endif
//禁用快速下行链路选项
XEmacps_PhyWrite (xemacpsp、phy_addr、PHY_MODLE_TI_DP83822_CR3、0x0);

#if defineed (debug_ethernet)&&(debug_ethernet = 1)
//检查初始化
XEmacps_PhyRead (xemacpsp、phy_addr、PHY_MODEL _TI_DP83822_CR3、(uint16_t *)&phyregtempcheck);
xil_printf ("PHY %x 中的注册地址-设置:%x -值:%x\n"、PHY_MODEL TI_DP83822_CR3、phyregtemp、phyregtempcheck);
#endif

//将器件设置为 RGMII 模式
XEmacps_PhyRead (xemacpsp、phy_addr、PHY_MODEL _TI_DP83822_RCSR、(uint16_t *)&phyregtemp);
phyregtemp &=~Phy_model_TI_DP83822_RGMII_RX_CLCK_SHIFT_EN;//禁用 RX 时钟移位
phyregtemp &=~Phy_model_TI_DP83822_RGMII_TX_CLCK_SHIFT_EN;//禁用 TX 时钟移位
phyregtemp |= PHY_MODE_TI_DP83822_RGMII_MODE_EN;//板载硬件接口为 RGMII
phyregtemp &=~Phy_model_TI_DP83822_RGMII_50MHz_CLCK_SEL;//确保使用的 clck 为25MHz
XEmacps_PhyWrite (xemacpsp、phy_addr、PHY_MODLE_TI_DP83822_RCSR、phyregtemp);

#if defineed (debug_ethernet)&&(debug_ethernet = 1)
//检查初始化
XEmacps_PhyRead (xemacpsp、phy_addr、PHY_MODEL _TI_DP83822_RCSR、(uint16_t *)&phyregtempcheck);
xil_printf ("PHY %x 中的注册地址-设置:%x -值:%x\n"、PHY_MODEL TI_DP83822_RCSR、phyregtemp、phyregtempcheck);
#endif
//设置自动 MDI 启用,LED 指示灯在活动中闪烁
XEmacps_PhyRead (xemacpsp、phy_addr、PHY_MODEL _TI_DP83822_PHYCR、(uint16_t *)&phyregtemp);
phyregtemp |= PHY_MODE_TI_DP83822_AUTOMDIX_EN;//启用自动 MDIX 以防我们交叉对
phyregtemp &=~Phy_model_TI_DP83822_LEDCFG_MODE1_EN;//模式2:在链路上使 Led0亮起,并在 Tx 活动时闪烁
XEmacps_PhyWrite (xemacpsp、phy_addr、PHY_MODLE_TI_DP83822_PHYCR、phyregtemp);

#if defineed (debug_ethernet)&&(debug_ethernet = 1)
//检查初始化
XEmacps_PhyRead (xemacpsp、phy_addr、PHY_MODEL _TI_DP83822_PHYCR、(uint16_t *)&phyregtempcheck);
xil_printf ("PHY %x 中的注册地址-设置:%x -值:%x\n"、PHY_MODEL TI_DP83822_PHYCR、phyregtemp、phyregtempcheck);
#endif
中断;

默认值:
xIL_printf(“不支持网络设备\n\r\n”);
返回 XST_FAILURE;
中断;


其他

xIL_printf(“不支持网络设备\n\r\n”);
返回 XST_FAILURE;

//
// XEmacps_PhyWrite (xemacpsp、phy_addr、IEEE-page_address_register、2);
// XEmacps_PhyRead (xemacpsp、phy_addr、IEEE_control_REG_MAC、&control);
//控制|= IEEE_RGMII_TXRX_CLOCK _DERAMED_MASK;
// XEmacps_PhyWrite (xemacpsp、phy_addr、IEEE_control_REG_MAC、control);

// XEmacps_PhyWrite (xemacpsp、phy_addr、IEEE_PAGE_ADDRESS_REGISTER、0);

XEmacps_PhyRead (xemacpsp、phy_addr、IEEE_AUTONEGO_advertised_REG、&control);
control |= IEEE_ONGICAL_PAUSE_MASK;
CONTROL |= IEEE-PAUST_MASK;
XEmacps_PhyWrite (xemacpsp、phy_addr、IEEE_AUTONEGO_advertised_REG、CONTROL);

// XEmacps_PhyRead (xemacpsp、phy_addr、IEEE_CONTRAL_REG_OFFSET、&CONTROL);
//控制&=~IEEE_CTRL_LINKSPEED_1000M;
//控制&=~IEEE_CTRL_LINKSPEED_100M;
//控制&=~IEEE_CTRL_LINKSPEED_10M;

if (速度=1000)

//控制|= IEEE-CTRL_LINKSPEED_1000M;
xIL_printf (“不支持1000Mbps 速度\n\r\n);
返回 XST_FAILURE;

否则(速度==100)

//控制|= IEEE-CTRL_LINKSPEED_100M;
/* Dont 广播1000Mbps 的 PHY 速度*/
//XEmacps_PhyWrite (xemacpsp、phy_addr、IEEE_1000_advertised_REG_offset、0);
/* Dont 广播10 Mbps 的 PHY 速度*/
XEmacps_PhyWrite (xemacpsp、phy_addr、IEEE_AUTONEGO_advertised_REG、advertised_100);

否则 if (speed ==10)

//控制|= IEEE-CTRL_LINKSPEED_10M;
/* Dont 广播1000Mbps 的 PHY 速度*/
//XEmacps_PhyWrite (xemacpsp、phy_addr、IEEE_1000_advertised_REG_offset、0);
/* Dont 广播100Mbps 的 PHY 速度*/
XEmacps_PhyWrite (xemacpsp、phy_addr、IEEE_AUTONEGO_advertised_REG、advertised_10);

/*执行数字重新启动*/
XEmacps_PhyRead (xemacpsp、phy_addr、PHY_TI_PHYRCR,(uint16_t *)&phyregtemp);
phyregtemp |= PHY_TI_PHYRCR_DIGITAL_RESTK_MASK;
XEmacps_PhyWrite (xemacpsp、phy_addr、PHY_TI_PHYRCR、phyregtemp);
//返回状态= XEmacps_PhyRead (xemacsp、phy_addr、PHY_TI_PHYRCR、(uint16_t *)&phyregtemp);
//
// if (RetStatus!= XST_Success)
//{
// xil_printf (“数字重启时出错\n\r\n);
//返回 XST_FAILURE;
//}
/*等待重置完成*/
Wait = 0;
while (WAIT++< PHY_RESET_MAX_WAIT_TIME)

XEmacps_PhyRead (xemacpsp、phy_addr、PHY_TI_PHYRCR、(uint16_t *)&phyregtemp);
if (((phyregtemp & PHY_TI_PHYRCR_DIGITAL_REST_BANK_MASK)= 0x00)&&(Wait >= PHY_RESET_MIN_WAIT_TIME))
中断;

if (Wait >= PHY_RESET_MAX_WAIT_TIME)//重置没有按时完成

xIL_printf ("数字重启时出错\n\r\n);
返回 XST_FAILURE;

//XEmacps_PhyWrite (xemacsp、phy_addr、IEEE_CONTRAL_REG_OFFSET、CONTROL | IEEE_CTRL_RESET_MASK);
//查询以重新启动自动执行
XEmacps_PhyRead (xemacpsp、phy_addr、PHY_TI_BMCCR、(uint16_t *)&phyregtemp);
phyregtemp |= PHY_MODE_TI_DP83822_AUTONEGO_RESTART;
XEmacps_PhyWrite (xemacpsp、phy_addr、PHY_TI_BMCCR、phyregtemp);

// for (wait = 0;wait < 100000;wait++);
xIL_printf ("\n PHY 初始化序列完成! \n\n");
返回 XST_SUCCESS;

下面是一个寄存器转储:

寄存器0x0操作值:0x1100

寄存器0x1操作值:0x7849

寄存器0x2操作值:0x2000
寄存器0x3操作值:0xA240
寄存器0x4操作值:0x0180
寄存器0x5操作值:0x0000
寄存器0x6操作值:0x0004
寄存器0x7操作值:0x2001
寄存器0x8操作值:0x0000
寄存器0x9操作值:0x0060
寄存器0xA 操作值:0x4120
寄存器0xB 操作值:0x0000
寄存器0xC 操作值:0x0000
寄存器0xD 操作值:0x401F
寄存器0xE 操作值:0x0005
寄存器0xF 操作值:0x0000
寄存器0x10操作值:0x0206
寄存器0x11操作值:0x0108
寄存器0x12操作值:0x0000
寄存器0x13操作值:0x0000
寄存器0x14操作值:0x0000
寄存器0x15操作值:0x0000
寄存器0x16操作值:0x0100
寄存器0x17操作值:0x0241
寄存器0x18操作值:0x0400
寄存器0x19操作值:0x8001
寄存器0x1A 的操作值:0x0000
寄存器0x1B 操作值:0x007D
寄存器0x1C 操作值:0x05EE
寄存器0x1D 操作值:0x0000
寄存器0x1E 操作值:0x0002
寄存器0x1F 的操作值:0x0000
寄存器0x461的操作值:0x0410
寄存器0x462操作值:0x0000
寄存器0x467的操作值:0x5FD3
寄存器0x468操作值:0x0005

我的侧面看不到任何错误、也不知道为什么至少 PC 无法识别连接。

有关在 JTAG 模式下使用 DP83867为 ZCU 104评估板加电而不运行任何代码的信息、至少 PC 会检测到未识别网络上的连接。

是否有人能够向正确的方向指出我?

谢谢

SEB

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

    您好、Sebastien、

    您能否确认以下设置?  

    • 自举设置禁用自协商功能。
    • 寄存器0x467表示 RX_DV 被捆绑到模式2 (0x0467[5:4]=01)。 这是 DP83822数据表的表14中的保留状态。 您能否确认所需的 MAC 接口?

    此致、
    Justin  

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

    你好 Justin

    感谢您 的反馈。

    电路板上没有自举。 硬件团队计划了完整的软件配置。 如果需要、我可以发送原理图摘录。

    默认情况下、FPGA 中接口的所有信号都被上拉。

    所需的接口是带有 MAC 的 RGMII。

    我正在尝试使用寄存器0x0017位9启用 RGMII。

    此致

    SEB

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

    您好、SEb、

    您所指的是什么寄存器来指示 PHY 未显示电缆已连接?  

    此致、
    Justin  

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

    你好 Justin

    我 可以在 BMSR 中看到"Link Status (链路状态)"为"OK (确定)"。

    自协商过程结束 BMSR 位5从不变为1。

    当我说已断开连接时、它对应于显示"电缆已断开"的 PC 状态。

    与我们的定制板并联时、我使用 DP83867对 ZCU106进行了一些测试。

    HW 使用引导、但我播放了芯片初始化、我可以看到 PC 状态在 单步执行初始化时对芯片所做的更改作出反应。

    在我们的定制板上、DP83822也是如此。

    为什么链路状态显示“OK (正常)”,但 PC 未看到电缆已拔下? 我在芯片的初始化序列中是否发生了错误?

    提前感谢您的帮助。

    此致

    SEB

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

    您好、SEb、

    您能否提供链路正常设置和无链路设置之间的寄存器比较? 在初始化 PHY 时、您能否检查电源轨是否从 GND 斜升至 VDD 而没有平坦区、以及在配置寄存器以将 PHY 设置为适当模式后是否完成了数字复位?  

    我同意 PHY 显示链路正常、PC 显示无连接是很奇怪的。 您是否还可以提供要查看的原理图?  

    此致、
    Justin  

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

    你(们)好

    当我获得 Link OK 和 Link OK 永远不会变为 true 时、寄存器设置不会发生变化。

    更改的是初始化序列。 在一种情况下、我获取链接确定、然后执行数字重新启动  

    第1个主题中显示的情况1为:

    - PHY 复位寄存器0x001F |= 0x8000

    - PCS 寄存器复位寄存器0x001 |= 0x8000

    -寄存器设置  

    -数字重启 寄存器0x001F |= 0x4000

    案例2是:

    - PHY 复位和 PCS 寄存器复位被数字重启 寄存器0x001F |= 0x4000替换

    -根据第1个线程中显示的代码进行寄存器设置

    -数字重启 寄存器0x001F |= 0x4000

    在 PC 中的任何情况下、即使激活了交叉对检测、电缆也会断开连接。 我们检查了从电路板到 PC 的接线是否正常。

    对于原理图,您能否提供一个私人链接供我分享? 我们应该禁用 FPGA 中的上拉电阻还是将其设置为下拉电阻?

    我将进行测量并返回给您。

    此致

    SEB

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

    您好、SEb、  

    很抱歉、您能在显示链接时提供 PHY 的寄存器状态吗? 这将帮助我了解自动协商、MDI/X 和链路伙伴功能。

    我建议将连接 PHY 的所有 FPGA 引脚置于高阻态模式、以避免覆盖 PHY 的内部自举。 这可能是将 PHY 置于中间自举模式或接收状态。 还请确认是否正在使用 LED 引脚、以及是否有与之关联的上拉或下拉电阻器?  

    此致、
    Justin  

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

    你好 Justin

    感谢您的建议。

    我们将在 HiZ 中放置一个八位位组、并告知您结果。 我还将发送带有初始化序列的寄存器转储、以使链接正常。

    对于 LED、仅使用 Led0。 没有下拉的上拉。 只需使用具有2K 极化电阻器的 LED。

    LED1 / GPIO1、COL/GPIO2、INT/PWDN_N、RX_ER、CRS/CRS_DV 保持未连接状态。

    此致

    SEB

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

    你好 Justin

    我们将 FPGA 引脚置于高阻态、以禁用器件接口上的任何上拉或下拉。

    器件的初始化提供以下内容:

    PHY 0中的寄存器地址-设置:3100 -值:3100
    PHY 9中的寄存器地址-设置:60 -值:60
    PHY A 中的寄存器地址-设置:4120 -值:4120
    PHY B 中的寄存器地址-设置:1000 -值:1000
    PHY 中的寄存器地址17-设置:241-值:241.
    PHY 19中的寄存器地址-设置:A001 -值:A001
    正在等待 PHY 完成自动协商。 >分配的时间为30秒。
    自协商错误
    链路速度:100

    INIT 之后的第一个寄存器转储- PC 仍然显示电缆已拔下:

    寄存器0x0操作值:0x3100
    寄存器0x1操作值:0x7849
    寄存器0x2操作值:0x2000
    寄存器0x3操作值:0xA240
    寄存器0x4操作值:0x0DE1
    寄存器0x5操作值:0x0000
    寄存器0x6操作值:0x0004
    寄存器0x7操作值:0x2001
    寄存器0x8操作值:0x0000
    寄存器0x9操作值:0x0060
    寄存器0xA 操作值:0x4120
    寄存器0xB 操作值:0x1000
    寄存器0xC 操作值:0x0000
    寄存器0xD 操作值:0x0000
    寄存器0xE 操作值:0x0000
    寄存器0xF 操作值:0x0000
    寄存器0x10操作值:0x2804
    寄存器0x11操作值:0x0108
    寄存器0x12操作值:0xA300
    寄存器0x13操作值:0x0800
    寄存器0x14操作值:0x0000
    寄存器0x15操作值:0xFFFF
    寄存器0x16操作值:0x0100
    寄存器0x17操作值:0x0241
    寄存器0x18操作值:0x0400
    寄存器0x19操作值:0xA001
    寄存器0x1A 的操作值:0x0000
    寄存器0x1B 操作值:0x007D
    寄存器0x1C 操作值:0x05EE
    寄存器0x1D 操作值:0x0000
    寄存器0x1E 操作值:0x0002
    寄存器0x1F 的操作值:0x0000
    寄存器0x461的操作值:0x0410
    寄存器0x462操作值:0x0000
    寄存器0x467操作值:0x0FD3

    拔下电缆并再次插入电缆后的寄存器转储-链路变为正常- TCP/IP 堆栈初始化正常。

    PC 仍然显示电缆已拔下(!?):

    UDPInterface_InitializeSockets
    UDPInterface_Open
    UDPInterface_Open:绑定到192.168.10.78端口8000h
    UDPInterface_Open:好的

    寄存器0x0操作值:0x3100
    寄存器0x1操作值:0x784D
    寄存器0x2操作值:0x2000
    寄存器0x3操作值:0xA240
    寄存器0x4操作值:0x0DE1
    寄存器0x5操作值:0x0000
    寄存器0x6操作值:0x0004
    寄存器0x7操作值:0x2001
    寄存器0x8操作值:0x0000
    寄存器0x9操作值:0x0060
    寄存器0xA 操作值:0x4120
    寄存器0xB 操作值:0x1000
    寄存器0xC 操作值:0x0000
    寄存器0xD 操作值:0x401F
    寄存器0xE 操作值:0x0000
    寄存器0xF 操作值:0x0000
    寄存器0x10操作值:0x2A05
    寄存器0x11操作值:0x0108
    寄存器0x12操作值:0x8300
    寄存器0x13操作值:0x0000
    寄存器0x14操作值:0x00FF
    寄存器0x15操作值:0xFFFF
    寄存器0x16操作值:0x0100
    寄存器0x17操作值:0x0249
    寄存器0x18操作值:0x0400
    寄存器0x19操作值:0xA001
    寄存器0x1A 的操作值:0x0000
    寄存器0x1B 操作值:0x007D
    寄存器0x1C 操作值:0x05EE
    寄存器0x1D 操作值:0x0000
    寄存器0x1E 操作值:0x0002
    寄存器0x1F 的操作值:0x0000
    寄存器0x461的操作值:0x0410
    寄存器0x462操作值:0x0000
    寄存器0x467操作值:0x0FD3
    寄存器0x468操作值:0x0000

    我对这种行为完全感到困惑。 查看寄存器0x467、可以看到器件在具有50MHz 时钟源的 RMII 接口上锁存。

    从设置寄存器0x17中、启用 RGMII 接口并选择25MHz 时钟、这是正确的硬件设置。

    无法理解是什么问题。

    我希望您有任何指针来帮助我们。

    此致

    SEB

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

    您好、SEb、

    我需要时间来查看寄存器信息。 我可以在星期五1月29日之前作出答复。

    此致、
    Justin

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

    你(们)好  

    谢谢。  

    我们的问题是什么原因芯片可以看到链路正常,但 PC 可以看到电缆已拔出?

    谢谢

    SEB

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

    你好 Justin

    突破。 我们最终使 PHY 正常工作。

    因此、有几件事让我们变得很容易:

    -构建 FPGA 时禁用了上拉/下拉。

    初始化序列的第一步是硬件复位(寄存器0x1F /位15设置为1)、并有一个等待复位完成的循环。

    这是为了确保我们清除 PHY 在上电后锁存的任何状态。

    -光纤模式被错误启用(寄存器0x00A/位14)。 我已确保禁用这个。 禁用该位后、PC 实际上可以连接电缆。

    -禁用 TX 路径上的时钟移位以能够发送数据包(寄存器0x17 /位11设置为0)

    -启用 RX 路径上的时钟移位、以便 Mac 能够接收数据包(寄存器0x17 /位12设置为1)

    现在它可以工作了。

    非常感谢您的所有帮助。

    此致

    SEB