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.

[参考译文] 使用 DP83822H PHY 芯片时 MDIO 上的信号争用

Guru**** 2756835 points

Other Parts Discussed in Thread: DP83822H

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/891804/signal-contention-on-mdio-with-dp83822h-phy-chip

器件型号:F28M36P63C2
主题中讨论的其他器件:DP83822H

您好!

处理器:F28M36P63C2ZWTS

PHY:DP83822H

软件引脚配置

PM0上的 MDIO 已设置为 GPIO_PIN_TYPE_OD

//
//
//为硬件适当设置 GPIO 端口控制寄存器。
//
//此函数确定正确的端口控制设置,以便在
各自的引脚
上启用开发板的//基本外设信号//并确保正确路由所有必需的 EPI 信号。
// EPI 信号配置由子板信息//
通过\e psinfo 参数传递的结构确定。
////
*****************
静态空
PortControlSet (void)
{

//
//从开始,我们为所有非 EPI 设置端口控制值
//外设。
//


//UART 设置
GPIOPinTypeUART (GPIO_Porte _BASE、GPIO_PIN_4 | GPIO_PIN_5);
GPIOPinConfigure (GPIO_PE4_U0RX);
GPIOPinConfigure (GPIO_PE5_U0TX);

//SSI SD 卡设置
GPIOPinTypeSSI (SDC_GPIO_PORT_base、SDC_SSI_TX | SDC_SSI_RX | SDC_SSI_CLK);
GPIOPinTypeGPIOOutput (SDCARD_CS_BASE、SDCARD_CS_PIN);
GPIOPadConfigSet (SDC_GPIO_PORT_base、SDC_SSI_Pins、
GPIO_PIN_TYPE_STD_WPU);
GPIOPadConfigSet (SDCARD_CS_BASE、SDCARD_CS_PIN、
GPIO_PIN_TYPE_STD_WPU);
GPIOPinConfigure (GPIO_PR0_SSI3TX);
GPIOPinConfigure (GPIO_PR1_SSI3RX);
GPIOPinConfigure (GPIO_PR2_SSI3CLK);
GPIOPinWrite (SDCARD_CS_BASE、SDCARD_CS_PIN、SDCARD_CS_PIN);


// USB 引脚
GPIOPinConfigure (GPIO_PN6_USB0EPEN);
GPIOPinConfigure (GPIO_PN7_USB0PFLT);
GPIOPinTypeUSBDigital (GPIO_PORTN_BASE、GPIO_PIN_6 | GPIO_PIN_7);
GPIOPinTypeUSBAnalog (GPIO_PORTF_BASE、GPIO_PIN_6);
GPIOPinTypeUSBAnalog (GPIO_PORTG_base、GPIO_PIN_2 | GPIO_PIN_5 | GPIO_PIN_6);


//以太网引脚设置
GPIODirModeSet (GPIO_PORTK_base、
GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_7、
GPIO_DIR_MODE_HW);
GPIOPadConfigSet (GPIO_PORTK_base、
GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_7、
GPIO_PIN_TYPE_STD);
GPIOPinConfigure (GPIO_PK4_MIITXEN);
GPIOPinConfigure (GPIO_PK5_MIITXCK);
GPIOPinConfigure (GPIO_PK7_MICRS);


GPIODirModeSet (GPIO_PORTL_BASE、
GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 |
GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7、
GPIO_DIR_MODE_HW);
GPIOPadConfigSet (GPIO_PORTL_BASE、
GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 |
GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7、
GPIO_PIN_TYPE_STD);
GPIOPinConfigure (GPIO_PL0_MIIRXD3);
GPIOPinConfigure (GPIO_PL1_MIIRXD2);
GPIOPinConfigure (GPIO_PL2_MIIRXD1);
GPIOPinConfigure (GPIO_PL3_MIIRXD0);
GPIOPinConfigure (GPIO_PL4_MIICOL);
GPIOPinConfigure (GPIO_PL5_MIIPHYRSTN);
GPIOPinConfigure (GPIO_PL6_MIIPHYINTRN);
GPIOPinConfigure (GPIO_PL7_MIIMDC);

GPIODirModeSet (GPIO_PORTM_BASE、
GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 |
GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7、
GPIO_DIR_MODE_HW);
GPIOPadConfigSet (GPIO_PORTM_BASE、
GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 |
GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7、
GPIO_PIN_TYPE_STD);
GPIOPadConfigSet (GPIO_PORTM_BASE、
GPIO_PIN_0、
GPIO_PIN_TYPE_OD);
GPIOPinConfigure (GPIO_PM0_MIIMDIO);
GPIOPinConfigure (GPIO_PM1_MIITXD3);
GPIOPinConfigure (GPIO_PM2_MIITXD2);
GPIOPinConfigure (GPIO_PM3_MIITXD1);
GPIOPinConfigure (GPIO_PM4_MIITXD0);
GPIOPinConfigure (GPIO_PM5_MIIRXDV);
GPIOPinConfigure (GPIO_PM6_MIIRXER);
GPIOPinConfigure (GPIO_PM7_MIIRXCK);





}

//***************
//
//! 为开发板配置器件引脚排列。
//!
//! 此函数将器件的每个引脚配置为将! 合适
//! 开发板设计所需的外设信号。
//!
//! 注意此模块可以通过两种方式构建。 如果标签 simple_pinout_set
//! 未定义,PinoutSet()函数将尝试读取 I2C EEPROM
//! 要确定哪个子板连接到开发套件板
//! 并使用该 EEPROM 中的信息来动态配置 EPI
//! 正确。 在这种情况下、如果未找到 EEPROM、EPI 配置
//! 将默认为使用 SDRAM 子板所需的值
、即//! 包含在基本开发套件中。
//!
//! 但是、如果定义了 simple_pinout_set、则所有动态配置
//! 代码被一个非常简单的函数取代、该函数仅设置引脚//
! 和 EPI 配置。 这更好地表示了 a
//! 实际应用可能会初始化引脚分配和 EPI 时序
//! 并且所需的代码空间明显小于动态子板
//! 检测版本。 此处提供的示例设置了引脚分配和 EPI
//! 和 LCD 子板进行适当配置。
//!
//! \无返回。
////
*****************
void
PinoutSet (void)
{

//
//启用所有 GPIO 组。
//
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOG);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOH);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOJ);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOK);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOL);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOM);
SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOP);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOQ);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOR);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIO);


//
//确定启用 EPI 管脚所需的端口控制设置
//以及该子板的其他外设信号并设置所有
// GPIO 端口控制寄存器。
//
PortControlSet();

} 

原理图设置如下:

目标是使用 lwip。 使用 Saleae 逻辑分析仪、我发现 MDIO 模拟读数存在争用、消息数据部分的信号无法驱动高电平。 我们认为这是一个配置问题、但不确定它是处理器还是 PHY 的配置问题。  R275组装在 MDIO 线路上、具有一个2.2k 电阻器。

为了进一步了解、lwip 示例已用作基础、上面所述的引脚配置和 UART 设置是对软件的唯一修改。

C:\ti\controlSUITE\device_support\f28m36x\v220\F28M36x_examples_Master\enet_lwip\m3\ccs 

使用路由器进行测试:路由器有线端口<--以太网电缆-->板

预期是板 ETh 端口 LED 将响应、路由器 LED 将响应。 作为额外的检查、以太网电缆连接到笔记本电脑而不是板、并且路由器和笔记本电脑上的 LED 都亮起。

我们认为这种争用被视为问题、不确定它是在处理器上还是在 PHY 端设置问题上? 请告诉我是否有任何其他信息有助于确认设置。

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

    您好!

    我正在将该主题重新分配给 C2000团队、以便从固件的角度进行研究。

    此致、
    GET

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

    您好!

    [引用 user="Paul Lane)]我看到 MDIO 模拟读取争用、消息数据部分的信号无法驱动高电平。 我们认为这是一个配置问题、但不确定它是处理器还是 PHY 的配置问题。  R275组装在 MDIO 线路上、具有一个2k 电阻器。[/QUERP]

    我想知道您为什么认为这是争用问题。 Saelae 的数字端显示微控制器正在尝试读取 PHY 地址0、您能否检查 PHY 是否超出复位范围?  如果 PHY 地址正确配置为地址0。  

    此致、

    Sudhar

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

    信号(模拟)的这个数据部分似乎在4个地方尝试变为高电平、并且无法达到高电平。 这就是我所说的争用。  

    五位地址位于 RX_D3_RX_D2、RX_D1、RX_D0和 COL 上。 RX_D0-D3在内部下拉为低电平、因此如果未放置电阻器、则默认值为0。 但是、对于 COL、内部上拉、我们有2.2K 电阻下拉、因此我们也将该位更改为0。 这就是地址的设置方式、这应该会导致 PHY 地址为0。

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

    信号对我来说似乎可以  

    遵循模式:

    <01><10> 如 PHY 数据表中所示的读取操作。  

    您能否在 PHY 端探测 PHY 的 RESET_N 引脚以检查它是否超出复位范围

    此致、

    Sudharsanan

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

    突出显示上图中的问题部分:

    这种波形的4个部分看起来不是完全低电平、也不是完全高电平。 图像中的两个峰值、即图像的左侧和右侧、表示高电平。 逻辑分析仪"看起来"捕获成功的消息、但如果正确的数据消息中包含这些高位、则会产生误导。 此外、此争用也没有解释(我所称的争用)。

    我将研究探测 PHY RESET_N、并返回给您。

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

    您好!  

    [引用 USER="Paul Lan"]逻辑分析器“似乎”捕获成功的消息,但如果正确的数据消息中包含这些高位,则会产生误导。 [/报价]

    好的。 我看到这个。 希望现在没有组装 R263。  

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

    PHY 上的 RESET_N 显示3.29伏、因此为高电平、这意味着复位未激活。

    我们已经针对上拉电阻器测试了多种配置:

    最初组装了 R263、这表明存在竞争

    然后、R263被移除、R275被组装、继续看到争用、在 GPIO_PIN_TYPE_STD、GPIO_PIN_TYPE_OD_WPU、然后 GPIO_PIN_TYPE_OD 上切换 MDIO 引脚上的软件设置、不幸运。

    现在、我们已删除 R275并很幸运地更改了软件引脚类型。

    如果您可以突出显示并确认哪些硬件/软件配置应该起作用? 我可以再次尝试这些以进行确认。