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 微控制器的 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
感谢蔡振国的回应,
我已经更新了我们目前的实施状况和我们面临的问题。 请帮助我们解决该问题。
谢谢你。
但我们使用的是 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中的少量寄存器,而无法读取的寄存器则很少。 因此,我在接口论坛上打开了新的主题。 我想我会从接口论坛获得进一步的指导。 感谢你的帮助。