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.

[参考译文] TM4C129DNCPDT:配置 MCD 和 MDIO 线路以访问外部收发器寄存器值

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1067370/tm4c129dncpdt-configuration-of-mcd-and-mdio-lines-to-access-external-transceiver-register-values

部件号:TM4C129DNCPDT
线程中讨论的其他部件:TLK10031

您好,

我正在尝试使用 TM4C129DNCPDT 微控制器的 MDC 和 MDIO 引脚(PB2和 PB3)读取和写入 TLK10031收发器的寄存器。

因此,要在 MDC 和 MDIO 功能中使用这些 GPIO 引脚(PB2和 PB3),我需要执行哪些配置?

与任何特定 API 一样,是否有启用 MDC 和 MDIO 功能的功能?

目前,我已将这些 GPIO 引脚配置为仅输出引脚。

还有一个问题是如何使用此微控制器产生精确的1微秒延迟。 据我所知,SysClardDelay() API 仅将时钟周期用作输入。 因此,我尝试使用以下方法生成1微秒延迟。 请告诉我它是正确的还是我需要使用任何其他方法。

SystlDelay((Clock_frequency/3)* 0.000001);//clock_freency 是我们的系统时钟,即40MHz。

请提前感谢。

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

    您好,Balaji,

    设备上的 MDIO / MDC 针脚用于以太网功能,特别用于与外部以太网 PHY 连接。 我不相信它们可以与 TLK10031一起使用,看数据表,我不相信任何 TM4C MCU 都配备有与此类设备的接口。

    D/S 关于该功能的摘录:

    以太网 MAC 能够通过外部 EN0MDIO 和 EN0MDC 信号对外部 PHY 进行编程。 EN0MDC 信号是一个2.5 MHz 时钟,它来自系统时钟(SYSCLK),然后通过在以太网 MAC MII 地址(EMACMIIIADDR)寄存器中编程 CR 字段,将其分为所需频率。 PHY 的可用地址为0x01到1F。

    [引用 userid="476365" url="~/support/microcontrollers/arm-based microcontroller-group/arm-based microcontrollers/f/arm-based microcontroller-forum/1067370/tm4c129dncpdt-configuration-of -mcd-and -mio-lines 到 access -externale-register-tranter-register-quotract-one”微控制器来生成第二个精确的延迟和延迟1个问题。] 据我所知,SysClardDelay() API 仅将时钟周期用作输入。 因此,我尝试使用以下方法生成1微秒延迟。 请告诉我它是正确的还是我需要使用任何其他方法。

    只有在不发生中断的情况下,该方法才是精确的。 中断可能会使延迟更长。 请参阅 API 注释以全面了解其功能:

    //! This function provides a means of generating a delay by executing a simple
    //! 3 instruction cycle loop a given number of times.  It is written in
    //! assembly to keep the loop instruction count consistent across tool chains.
    //!
    //! It is important to note that this function does NOT provide an accurate
    //! timing mechanism.  Although the delay loop is 3 instruction cycles long,
    //! the execution time of the loop will vary dramatically depending upon the
    //! application's interrupt environment (the loop will be interrupted unless
    //! run with interrupts disabled and this is generally an unwise thing to do)
    //! and also the current system clock rate and flash timings (wait states and
    //! the operation of the prefetch buffer affect the timing).
    //!
    //! For better accuracy, the ROM version of this function may be used.  This
    //! version will not suffer from flash- and prefect buffer-related timing
    //! variability but will still be delayed by interrupt service routines.
    //!
    //! For best accuracy, a system timer should be used with code either polling
    //! for a particular timer value being exceeded or processing the timer
    //! interrupt to determine when a particular time period has elapsed.

    此致,

    拉尔夫·雅各比

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

    您好,Balaji,

    要在此处添加更多详细信息,TLK10031声明如下: 它可以用作10GBASE-KR 的 XAUI 收发器,通用8b/10b 多速率4:1,2:1或1:1串行器/串行器,或者可以在1G-KX 模式下使用。

    TM4C129x 系列在  全双工和半双工(CSMA/CD)操作中支持10/100 Mbps 以太网。 因此,我不认为可以根据 TLK10031规范中的描述将此以太网接口与 TLK10031连接。

    此致,

    拉尔夫·雅各比

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

    感谢您的回复 Ralph Jacobi,

    根据数据表,TM4C129x 确实支持10/100 Mbps。 但我们正在使用 MDC/MDIO 引脚连接以太网 PHY。 我们只是想使用它们来访问 TLK10031寄存器。

    我们已分别将 MDC 和 MDIO 线路(TM4C129DNCPDT)连接到了 MDC 和 TLK10031收发器的 MDIO 线路。

    MDC/MDIO 线路功能是否随不同的微控制器而变化?

    正如我所知,MDC/MDIO 引脚的功能与任何微控制器都相同。 如果 是这样,为什么我们不能使用这些行访问(读/写) TLK10031寄存器。  

    例如,如果微控制器有 I2C 引脚,我们可以将任何 I2C 传感器与该微控制器连接吗? 同样,为什么我们不能使用 MDC 和 MDIO 引脚将 TM4C129DNCPDT 与 TLK10031连接。

    谢谢你。

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

    您好,Balaji,

    那么,目的只是使用这些线路检查寄存器,而不是从 TM4C 驱动整个 TLK10031?

    请理解,我们过去从未考虑过与 TLK10031的接口如何工作,因为它不是用于 MCU 的典型设备,所以这些问题对我们来说有点新。 如果想法只是以这种有限的方式使用 TM4C,那就有点不同了,因为当我第一次查看设备时,它似乎过于规范我们的功能。

    要使用 MDC/MDIO,您需要使用以下 API 来启用它们:

           MAP_GPIOPinConfigure (GPIO _PB2_EN0MDC);

           MAP_GPIOPinConfigure (GPIO _PB3_EN0MDIO);

    我们没有关于如何使用它们读取寄存器的实例,但我也可以向以太网专家咨询,并在此处添加任何注释。

    此致,

    拉尔夫·雅各比

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

    您好,Balaji,

     除了调用  MAP_GPIOPinConfigure 为 MDC/MDIO 引脚配置 PB2/PB3外,我认为您还使用 API GPIOPinTypeEthernetMII 为这两个引脚配置了引脚。

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

    感谢拉尔夫·雅各比的帮助,

    是的,我们的目的只是阅读 TLK 寄存器。 我们已尝试实施,但仍无法读/写。

    我们尝试使用 MII EMAC API,但无法在 MDC 引脚上设置正确的时钟,因为我们没有任何用于设置 MDC 时钟和使用 MDIO 引脚读/写的参考代码。

    我们找到了一个用于读/写操作的源代码,它们只使用 GPIO 读和写(它们没有使用任何特定的方法与 MII/EMAC 相关)。 直接使用 GPIO 寄存器,它们可以读/写。

    因此,我们只尝试使用 GPIO 读写 API (根据我们在 Web 中找到的代码),但仍然无法读/写。

    我正在附上我编写的代码和我从网站上找到的参考源文档。 请检查并告诉我我们在哪里出错。

    我对延迟生成有疑问,我们是否在 MDC 计时中使用了正确的延迟。

    在源代码中,他们使用以下两种方法生成延迟

    #define delay()__nop();__nop();__nop();

    静态无效延迟(无效){;};

    但我们使用的是 SystlDelay(1);//系统时钟为120MHz。  

    请检查代码并告诉我们在哪里做,或者我们的方法是否完全错误?

    谢谢你。

    e2e.ti.com/.../tm4c_5F00_mdc_5F00_mdio.ce2e.ti.com/.../referance_5F00_code.ce2e.ti.com/.../mdc_5F00_mdio_5F00_programming.pdf

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

    感谢蔡振国的回应,

    我已经更新了我们目前的实施状况和我们面临的问题。 请帮助我们解决该问题。  

    谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="476365" url="~ë/support/icros/arm-based 微处理器-组/基于 ARM 的微控制器/f/arm-based 微控制器- forum/1067370/tm4c129dncpdt-configuration-of -mcd-and -mdio-lines 到 access - external 收发器-寄存器-值#5403957]#5403957"

    但我们使用的是 SystlDelay(1);//系统时钟为120MHz。  

    [/引用]

    您好,Balaji,

     我不是很熟悉 MDC 协议,而是在维基百科中阅读 MDC 描述,有人提到,最大 MDC 时钟为2.5MHz。 也许您的跑步速度太快。 请仔细检查。  请注意,对 SystlDelay(1)的调用等于3个周期,而不是一个周期。  调试这种情况的最佳方法是使用范围或逻辑分析器根据协议查看 MDC/MDIO 波形。 检查您是否符合时间安排和协议。   

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

    感谢蔡振国的建议。

    我们已经尽了我们所知的一切可能。 仍然无法访问 PHY 寄存器。  

    使用 EN0MDC 和 EN0MDIO 线路访问外部 PHY (任何外部 PHY)是否有任何示例/演示代码?

    谢谢你。

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

    您好,

     抱歉,我们没有访问外部 PHY 的任何示例代码。 您正在尝试对 MDIO/MDC 信号进行位感叹号,对吗?  如果您认为您的波形正确,但仍无法访问外部 PHY, 我建议您使用接口论坛打开一个新线程(将部件号指定为 TLK10031),以便专家提供指导。 如果您的波形不正确,请在此处显示您的波形。 请详细说明哪些不起作用? 是在写入过程中还是在读取过程中? 什么是写入 PHY,什么是被读回的?

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

    嗨,蔡先生,

    是的,我们正在尝试对 MDC/MDIO 信号进行位感叹号方法。

    我们项目的当前进展是,我们能够读取 TLK10031中的少量寄存器,而无法读取的寄存器则很少。 因此,我在接口论坛上打开了新的主题。 我想我会从接口论坛获得进一步的指导。 感谢你的帮助。