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.
我尝试将微控制 器与 DP83640精密 PHYTER 器件通信、但由于 MDIO_useraccess_go 值始终为零、因此我收到错误。 我如何理解与 PHY 的通信? (注意:我从 PINMUX 中激活了 RMII、SCI、MDCLK 和 MDIO)
您好!
MDIO 时钟由 VCLK3驱动、最大 MDIO 时钟为2.5MHz。 您是否使用由 HalCoGen 生成的 MDIO 驱动程序? 您的测试中使用了什么 MDIO 时钟频率?
大家好、mdio.h 和 HalCoGen 中的时钟是不同的、即使我重新生成代码并重建 CCS 文件。
mdio.h 中的配置如下:
/* MDIO 输入和输出频率,单位为 Hz */
#define MDIO_FREQ_INPUT ((UINT32)(VCLK3_FREQ * 1000000.00F)
#define MDIO_FREQ_OUTPUT 1000000U
但在 HalCoGen 文件中、我将 VCLK3分频器从1调整为6、因此 VCLK3时钟变为22.857MHz
您的测试中使用 MDIO_CLK=1MHz。
我从 HDK 上的以太网 PHY 读取 PHY ID:
MDIO_CONTROL = 0x4100004F; //VCLK3=80MHz、MDIO_CLK=1MHz
MDIO_USERACCESS0 = 0 //读取 PHY ID 1
|(1 << 31)//[31]开始
|(0 < 30)//[30]读取
|(0 << 29)//[29]采集
|(2 << 21)//[25-21] PHY 寄存器地址
|(1 << 16)//[20-16] PHY 地址
|(0 << 0);//[15-0]数据
while (MDIO_USERACCESS0 & 0x8000000);//等待结果
无符号短整型值= MDIO_USERACCESS0;
我的 phy ID 为:
#define DP83640_PHY_ID (0x0007C0F0u)
这是由 holcogen 为 TMS570LS31生成的 hw_mdio.h 文件
/*
* hw_mdio.h
*
/*
*版权所有(C) 2009-2018 Texas Instruments Incorporated - www.ti.com
*
*
*以源代码和二进制形式重新分发和使用、有无
*如果满足以下条件、则允许进行修改
符合*:
*
*源代码的重新分发必须保留上述版权
*注意、此条件列表和以下免责声明。
*
*二进制形式的再发行必须复制上述版权
*请注意、中的此条件列表和以下免责声明
*随提供的文档和/或其他材料
*分发。
*
*德州仪器公司的名称和名称均不相同
*其贡献者可用于认可或推广衍生产品
*未经特定的事先书面许可。
*
*本软件由版权所有者和贡献者提供
*"按原样"以及任何明示或暗示的保证、包括但不包括
*仅限于对适销性和适用性的暗示保证
*一项特定目的不予承认。 在任何情况下、版权均不得
*所有者或贡献者应对任何直接、间接、偶然或
*特殊、惩戒性或后果性损害(包括但不包括)
*仅限于采购替代货物或服务;丧失使用、
*数据或利润;或业务中断)
*责任理论、无论是合同责任、严格责任还是侵权行为
*(包括疏忽或其他)因使用而以任何方式产生
*、即使被告知可能会发生此类损坏。
*
*
#ifndef _hw_mdio_H_
#define _HW_MDIO_H_
/*用户代码开始(0)*/
/*用户代码结束*/
#ifdef __cplusplus
extern "C"{
#endif
/*用户代码开始(1)*/
/*用户代码结束*/
#define MDIO_base (0xFCF78900U)
#define MDIO_REVID (0x0U)
#define MDIO_CONTROL (0x4U)
#define MDIO_ALIVE (0x8U)
#define MDIO_LINK (0xCU)
#define MDIO_LINKINTRAW (0x10U)
#define MDIO_LINKINTMASKED (0x14U)
#define MDIO_USERINTRAW (0x20U)
#define MDIO_USERINTMASKED (0x24U)
#define MDIO_USERINTMASKSET (0x28U)
#define MDIO_USERINTMASKCLEAR (0x2CU)
#define MDIO_USERACCESS0 (0x80U)
#define MDIO_USERPHYSEL0 (0x84U)
#define MDIO_USERACCESS1 (0x88U)
#define MDIO_USERPHYSEL1 (0x8CU)
/ \
*字段定义宏
《国际环境与发展会议》 /
/* REVID */
#define MDIO_REVID_REV (0xFFFFU)
#define MDIO_REVID_REV_SHIFT (0x00000000U)
/*控件*/
#define MDIO_CONTINT_IDLE (0x80000000U)
#define MDIO_CONTINT_IDLE_SHIFT (0x0000001FU)
/*--Idle Tokens---*/
#define MDIO_CONTINT_IDLE_NO (0x000000000000)
#define MDIO_CONTINT_IDLE_YesN (0x00000001U)
#define MDIO_CONTINT_ENABLE (0x40000000U)
#define MDIO_CONTINT_ENABLE_SHIFT (0x0000001EU)
#define MDIO_CONTINT_TOSTEL_USER_CHANNEL (0x1F000000U)
#define MDIO_CONTINT_TOSTEL_USER_CHANGE_SHIFT (0x00000018U)
#define MDIO_CONTRAL_PREAMBLE (0x00100000U)
#define MDIO_CONTING_PREAMARE_SHIFT (0x00000014U)
/*--前导 码令牌--*/
#define MDIO_CONTINT_FAULT (0x00080000U)
#define MDIO_CONTINL_FAULT_SHIFT (0x00000013U)
#define MDIO_CONTROL_FAULTENB (0x00040000U)
#define MDIO_CONTROL_FAULTENB_SHIFT (0x00000012U)
/*--FAULTENB 令牌---*/
#define MDIO_CONTINT_CLKDIV (0x0000FFFFU)
#define MDIO_CONTINT_CLKDIV_SHIFT (0x00000000U)
/*--CLKDIV 令牌---*/
/* Alive */
#define MDIO_ALIVE_REGVAL (0xFFFFFFFFU)
#define MDIO_Alive_REGVAL_SHIFT (0x00000000U)
/*链接*/
#define MDIO_LINK_REGVAL (0xFFFFFFFFU)
#define MDIO_LINK_REGVAL_SHIFT (0x00000000U)
/* LINKINTRAW */
#define MDIO_LINKINTRAW_USERPHY1 (0x00000002U)
#define MDIO_LINKINTRAW_USERPHY1_SHIFT (0x00000001U)
#define MDIO_LINKINTRAW_USERPHY0 (0x00000001U)
#define MDIO_LINKINTRAW_USERPHY0_SHIFT (0x000000000000)
/* LINKINTMASKED *
#define MDIO_LINKINTMASKED_USERPHY1 (0x00000002U)
#define MDIO_LINKINTMASKED_USERPHY1_SHIFT (0x00000001U)
#define MDIO_LINKINTMASKED_USERPHY0 (0x00000001U)
#define MDIO_LINKINTMASKED_USERPHY0_SHIFT (0x00000000U)
/* USERINTRAW */
#define MDIO_USERINTRAW_USERACCESS1 (0x00000002U)
#define MDIO_USERINTRAW_USERACCESS1_SHIFT (0x00000001U)
#define MDIO_USERINTRAW_USERACCESS0 (0x00000001U)
#define MDIO_USERINTRAW_USERACCESS0_SHIFT (0x00000000U)
/* USERINTMASKED */
#define MDIO_USERINTMASKED_USERACCESS1 (0x00000002U)
#define MDIO_USERINTMASKED_USERACCESS1_SHIFT (0x00000001U)
#define MDIO_USERINTMASKED_USERACCESS0 (0x00000001U)
#define MDIO_USERINTMASKED_USERACCESS0_SHIFT (0x00000000U)
/* USERINTMASKSET */
#define MDIO_USERINTMASKSET_USERACCESS1 (0x00000002U)
#define MDIO_USERINTMASKSET_USERACCESS1_SHIFT (0x00000001U)
#define MDIO_USERINTMASKSET_USERACCESS0 (0x00000001U)
#define MDIO_USERINTMASKSET_USERACCESS0_SHIFT (0x00000000U)
/* USERINTMASKCLEAR */
#define MDIO_USERINTMASKCLEAR_USERACCESS1 (0x00000002U)
#define MDIO_USERINTMASKCLEAR_USERACCESS1_SHIFT (0x00000001U)
#define MDIO_USERINTMASKCLEAR_USERACCESS0 (0x00000001U)
#define MDIO_USERINTMASKCLEAR_USERACCESS0_SHIFT (0x00000000U)
/* USERACCESS0 */
#define MDIO_USERACCESS0_GO (0x80000000U)
#define MDIO_USERACCESS0_GO_SHIFT (0x0000001FU)
#define MDIO_USERACCESS0_WRITE (0x40000000U)
#define MDIO_USERACCESS0_READ (0x00000000U)
#define MDIO_USERACCESS0_WRITE_SHIFT (0x0000001EU)
#define MDIO_USERACCESS0_ACK (0x20000000U)
#define MDIO_USERACCESS0_ACK_SHIFT (0x0000001DU)
#define MDIO_USERACCESS0_REGADR (0x03E00000U)
#define MDIO_USERACCESS0_REGADR_SHIFT (0x00000015U)
#define MDIO_USERACCESS0_PHYADR (0x001F0000U)
#define MDIO_USERACCESS0_PHYADR_SHIFT (0x00000010U)
#define MDIO_USERACCESS0_DATA (0x0000FFFFU)
#define MDIO_USERACCESS0_DATA_SHIFT (0x00000000U)
/* USERPHYSEL0 */
#define MDIO_USERPHYSEL0_LINKSEL (0x00000080U)
#define MDIO_USERPHYSEL0_LINKSEL_SHIFT (0x00000007U)
#define MDIO_USERPHYSEL0_LINKINTENB (0x00000040U)
#define MDIO_USERPHYSEL0_LINKINTENB_SHIFT (0x00000006U)
#define MDIO_USERPHYSEL0_PHYADRMON (0x0000001FU)
#define MDIO_USERPHYSEL0_PHYADRMON_SHIFT (0x00000000U)
/* USERACCESS1 *
#define MDIO_USERACCESS1_GO (0x80000000U)
#define MDIO_USERACCESS1_GO_SHIFT (0x0000001FU)
#define MDIO_USERACCESS1_WRITE (0x40000000U)
#define MDIO_USERACCESS1_WRITE_SHIFT (0x0000001EU)
#define MDIO_USERACCESS1_ACK (0x20000000U)
#define MDIO_USERACCESS1_ACK_SHIFT (0x0000001DU)
#define MDIO_USERACCESS1_REGADR (0x03E00000U)
#define MDIO_USERACCESS1_REGADR_SHIFT (0x00000015U)
#define MDIO_USERACCESS1_PHYADR (0x001F0000U)
#define MDIO_USERACCESS1_PHYADR_SHIFT (0x00000010U)
#define MDIO_USERACCESS1_DATA (0x0000FFFFU)
#define MDIO_USERACCESS1_DATA_SHIFT (0x00000000U)
/* USERPHYSEL1 */
#define MDIO_USERPHYSEL1_LINKSEL (0x00000080U)
#define MDIO_USERPHYSEL1_LINKSEL_SHIFT (0x00000007U)
#define MDIO_USERPHYSEL1_LINKINTENB (0x00000040U)
#define MDIO_USERPHYSEL1_LINKINTENB_SHIFT (0x00000006U)
#define MDIO_USERPHYSEL1_PHYADRMON (0x0000001FU)
#define MDIO_USERPHYSEL1_PHYADRMON_SHIFT (0x00000000U)
/*用户代码开始(2)*/
/*用户代码结束*/
#ifdef __cplusplus
}
#endif
#endif
您好!
您是否在 HalCoGen 引脚复用配置窗口中启用 MDIO 和 MDCLK? 当您启用 MII 或 RMII 时、这两个信号不会被选择。 您必须手动启用这两个信号。
您好!
我已经激活了它们。 我卡在这一点。
/*等待命令完成*/
/*SAFETYMCUSW 28 D MR:NA "硬件状态位读取检查"*/
while ((HWREG (baseAddr + MDIO_USERACCESS0)& MDIO_USERACCESS0_GO)== MDIO_USERACCESS0_GO)
{
}/*等待*/
您好!
您使用哪种硬件板? PHY 的时钟是否正确? MII 要求25MHz、RMII 要求50MHz。
您好!
硬件尚未验证。 我仔细检查了晶振、它为 RMII 连接生成了50MHz。 此外、我还会在 PHY 的 MDIO 和 MDCLK 输入端看到信号。 我 还怀疑 PHY 版本不兼容。
您使用的是 TI EVM 还是您自己的电路板?
如果您使用 RMII、 DP83640 RX_DV 引脚应被拉高。 要使用 MII 模式、 DP83640 RX_DV 引脚应被拉低。
它是我们自己的电路板、仅针对 RMII 设计。 DP83640 RX_DV 引脚被拉低、因此即使我为 RMII 配置了软件、我也无法使用 RMII。
是的、由于 RX_DV=LOW、MII 模式被选择、所以您不能使用 RMII 模式。 DP83640 PHY 使用50MHz 晶体、但 MII 模式要求 PHY 为25MHz 或2.5MHz、因此 MII 模式也不起作用。
请更正其中一个(RX_DV 或晶振时钟)。
1. RX_DV =高电平、低温= 50MHz -> RMII
2、RX_DV =低电平、晶振= 25MHz (对于100mips)或2.5MHz (对于10Mbps)-> MII