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.

[参考译文] TM4C1292NCPDT:无法从定制 PCB 板获取 IP 地址

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1233728/tm4c1292ncpdt-unable-to-get-ip-address-from-custom-pcb-board

主题中讨论的其他器件:TM4C1292NCPDTUNIFLASH

您好!

我在 定制电路板中使用 TM4C1292NCPDT 来验证外部 PHY (KSZ8765)和控制器之间的接口。  我使用了 Thread 的代码(RTOS/TM4C1292NCPDT:通过 MII 接口在外部 PHY 配置中出现问题-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛 )并根据我的应用进行了修改。  

已随附修改后的代码。/cfs-file/__key/communityserver-discussions-components-files/908/tcpEcho_5F00_B.zip

我能够配置开关。

但无法在 Wireshark 和终端窗口上获得输出。 请参阅下面的

 

请分享您的反馈或建议。

谢谢。

Kiran

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

    您好!

     我们没有与外部 PHY 连接的示例。 纵观您的代码、您似乎将 lwIP 与 TI-RTOS NDK 混合在一起。  您是否尝试同时使用两个堆栈? 这完全是两个不同的 TCP/IP 堆栈。 此外、TI-RTOS 包含 C:\ti\tirtos_tivac_2_16_00_08\products\TivaWare_C_Series-2.1.1.71b、但您的包含路径似乎使用 TivaWare_2.1.4.178、而您的包含路径则具有针对 TivaWare_2.2.0.295的其他搜索路径。 您将需要自己进行调试。 您参考的帖子应该会为您提供良好的起点。 我将建议您使用 lwIP 堆栈或仅使用 TI-RTOS NDK 堆栈、不能同时使用这两个堆栈。 也许您可以从 TI-RTOS 示例 tcpEcho 示例开始。 同样、请确保先在 LaunchPad 上使用库存示例。 捕获 Wireshark。 接下来、修改该示例、以连接定制电路板上的外部 PHY。 捕获 Wireshark 并在两者之间进行比较。 确保您能够通过 MDIO 接口配置外部 PHY、并且可将时钟从外部 PHY 传输到 EMAC。 这些是我可以提出的东西。  

     您可以按如下方式找到库存 TI-RTOS tchpEcho 示例。  

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

    尊敬的 Charles:

    谢谢你的建议!!

    请找到更新后的代码文件以供您查看。  /cfs-file/__key/communityserver-discussions-components-files/908/tcpEcho_5F00_Kiran_5F00_extPhy.zip

    请参阅控制台输出下方的:

    我可以从添加的"网络"中了解什么? 请建议!!

    MAC 地址:

    Wireshark 窗口:

    请验证串行端口设置和连接的以下设置。 是这样吗?

    谢谢。

    Kiran

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

    尊敬的 Charles:

    我在仅示波器上没有获得 MII 信号时钟出现(MII_RX_CLK 和 MII_TX_CLK)

    您能否验证我修改的代码中的 MII 部分? 为什么示波器上没有接收到 MII 信号?

    非常感谢您的支持!!

    谢谢。

    Kiran   

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

    我迷路了。

    问题是、如果您尝试使用 00:00:00:00:00:00对 MAC 进行编程。 下面是我在您的屏幕截图中看到的内容。  

     

    如果 MAC 地址为00:00:00:00:00:00:00、如何获得192:168.1.100的 DHCP IP 地址?  00:00:00:00:00:00是无效的 MAC 地址。 您需要使用与您公司相关的 OUI 字段(MAC 的前3个字节)对有效 MAC 地址进行编程。 在 LaunchPad 上、MAC 被预编程为包含与 TI 相关的有效 MAC 地址。  

    为什么不使用有效的 MAC 地址来尝试库存 tcpEcho TI-RTOS 示例。 您应该能够与服务器建立连接并交换消息。 稍后、如果将 MAC 重新编程为全0、则该示例将不起作用、因为 MAC 地址等于 00:00:00:00:00不是有效地址。

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

    尊敬的 Charles:

    感谢您的评论!!

     您可以按如下所示找到库存 TI-RTOS tchpEcho 示例。

    您能否分享库存 TI-RTOS 的链接? 请共享此文件的路径。

    我没有得到您建议的文件。 请参阅下面的  

    https://dev.ti.com/tirex/explore

    谢谢。

    Kiran

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

    1.我通常从 CCS 中打开 Resource Explorer。 请参见下方的。  

    2.打开"资源浏览"后,单击页面右上角的三个栏。 请参见下方的。  

    3.选择"软件包管理器"。

    4.向下滚动、直到看到适用于 TivaC 的 TI-RTOS

    5.向右滚动,选择并安装。  

    6.完成此操作后、您应该看到 TI-RTOS for Tiva、如下所示。  

    如果仍无法从 Resource Explorer 导入,则可以通过 File->Import 直接导入。 请参见下方的。  

    选择要导入的 CCS 项目。  

    当系统提示输入 CCS 工程目录路径时、您可以提供以下路径来发现工程。  

    它将会发现几个以太网示例。 您只需选择要导入到 CCS 中的导入项。  

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

    尊敬的 Charles:

    我将按照您的建议尝试使用示例、但我无法在"Debug and Run"中使用 CCS Uniflash 或 CCS 编译器更改 MAC 地址。  

    编程的 MAC 地址:

    MAC 地址时出现的错误。 请参阅下面的  

    下面是更改 MAC 地址的代码更改:

    请分享您的评论。

    谢谢。

    Kiran

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

    您好!

     MAC 地址存储在 USER_REG0和 USER_REG1中。 这些是非易失性寄存器。 换句话说、这些寄存器只能一次性编程。 将 MAC 地址编程到这些寄存器后、您无法再次进行编程。 您必须执行批量擦除操作、这是一个解锁操作。 请参阅数据表说明。

    如果使用的是 LaunchPad、则可以使用 LM 闪存编程器首先解锁器件。 器件解锁(恢复为出厂设置)后、您可以再次对新的 MAC 地址进行编程。 请参见下方的。  

     

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

    尊敬的 Charles:

    如果您使用的是 LaunchPad,则可以使用 LM 闪存编程器先解锁器件。 器件解锁(恢复为出厂设置)后、您可以再次对新的 MAC 地址进行编程。 [/报价]

    -->我的定制板使用 XDS200调试探针对设备进行编程,所以 LM Flash Programmer 不支持。

     我使用 CCS Uniflash 实用程序我在上一篇文章中给出的屏幕截图结果来自定制板。

    MAC 地址存储在 USER_REG0和 USER_REG1中。 这些是非易失性寄存器。 换句话说、这些寄存器只能一次性编程。 将 MAC 地址编程到这些寄存器后、您无法再次进行编程。 您必须执行批量擦除操作、这是一个解锁操作。

    --> 根据建议,我执行了解锁操作,并再次尝试编程 MAC 地址。 它会更改参考板中的 MAC 地址、但在定制板中不会进行更改。 请参阅下面的

    我在解锁过程中是否遗漏了任何东西?

    此外,在数据表中,我发现了以下:

    MAC 地址默认为0x0010A1FFFFFF 吗?  

    此致、

    Kiran

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

    您好!

     您是否成功解锁? 解锁后、是否可以先读取 MAC 地址、然后再编程新地址? 如果解锁成功、则将读取 FF-FF-FF-FF-FF-FF。 如果您读取00-00-00-00-00-00-00-00-00-00-00-00、则解锁失败、即使控制台并未成功进行。 您可以 参阅本应用手册的第5.3.2节、以使用 dbgjtag.exe 通过 XDS200解锁器件。  

    https://www.ti.com/lit/pdf/spma075

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

    尊敬的 Charles:

    我按同样的步骤解锁。

    但"读取 MAC 地址"返回为0-0-0-0-0

    我按了定制电路板上的"复位"按钮、并在 CCS Uniflash 实用程序中按下了"解锁"。

    在此之后、释放 Reset (重置)按钮并按下"Finish Unlock"(完成解锁)。 然后、我对电路板进行下电上电。

    如果我漏掉了一些东西、请告诉我。

    谢谢。

    Kiran  

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

    您好!

    我按照相同的步骤解锁。

    您尝试了哪些相同的步骤? 看起来您仍在使用 CCS/Uniflash 进行解锁、是这样吗?

     在我的上次回复中、我建议您尝试使用 dbgjtag.exe 命令行来解锁 XDS200的器件。 您有机会尝试一下吗? 请参阅此应用手册中的第5.3.2节。  https://www.ti.com/lit/pdf/spma075

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

    尊敬的 Charles:

    在我上次的回复中,我建议您尝试使用 dbgjtag.exe 命令行来解锁 XDS200的设备。 您有机会尝试一下吗? 请参阅此应用手册中的第5.3.2节

    我没有得到  dbgjtag.exe。 请参阅以下内容:

    我又找到一个 FMA 用于 MAC 地址的线程。

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/424406/tiva-4c129-bootcfg-issues?pifragment-323257=2

    请浏览这篇文章并提供一些步骤建议。  

    谢谢。

    Kiran

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

    Kiran,

     我不知道您使用的是哪个 CCS 版本。 您可以在 CCS12的 CCS 安装程序中找到 dbgjtag.exe。 请参见下方的。  

    如果要由应用程序将 MAC 地址编程到 USER_REG0/USER_REG1、而不是使用 Uniflash 或 LM 闪存编程器工具、则使用 FMA/FMC。 但在使用 FMA/FMC 方法对 MAC 地址进行编程之前、必须先解锁器件。  

    在屏幕截图中、MAC 显示全0。 为了确保它真的为零、您能否在 CCS 寄存器窗口中读取 USER_REG0/USER_REG1。 请参见下方的。

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

    尊敬的 Charles:

    我建议您尝试使用 dbgjtag.exe 命令行来解锁 XDS200
    设备

    是的、我在命令提示符下尝试了 dbgjtag.exe、但成功解锁。 MAC 地址现在读取为 FF-FF-FF-FF-FF-FF。

    感谢您的建议。

    我也对新的 MAC 地址进行了编程、但看不到 Wireshark 流量。 请参阅下面的

    此外、请参阅下面的控制台输出。 如果我必须在项目中的全局性查找字符串(即在项目的所有文件中), 我该怎么做? 我尝试了 Ctrl+H 选项、但它不起作用。 在本文中、我想在文件正在下方的"控制台"窗口中打印"网络已添加"时查找。

    一般而言,调试时,我如何找出代码流,就像它从一个文件移动到另一个文件如何跟踪?

    请指南。

    谢谢。

    Kiran

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

    尊敬的 Charles:

    我怎样才能得到 IP 地址还有一个问题吗?

    谢谢。

    Kiran

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

    我也对新的 MAC 地址进行了编程、但看不到 Wireshark 流量。 请参阅下面的

    [/报价]

    您能看到常用以太网示例的 Wireshark 流量吗?

    此外、请参阅下面的控制台输出。 如果我必须在项目中的全局性查找字符串(即在项目的所有文件中), 我该怎么做? 我尝试了 Ctrl+H 选项、但它不起作用。 在本文中、我想在文件正在下方的"控制台"窗口中打印"网络已添加"时查找。

    [/报价]

    我认为您不能在 CCS 工作区全局搜索字符串"Network Added"我认为"Network Added"来自 NDK 库中 NDK 安装位置而不是 CCS 工作区中的某个位置。 抱歉、我不知道 NDK 的内部工作情况、不知道它来自哪个文件。 我想它正在变为 netctrl.c、但不确定。  

    一般情况下,在调试时,我如何找出代码流,就像它从一个文件移动到另一个文件如何跟踪?
    [/quote]

    您可以放置一个断点或单个步进进行调试并查看调用栈窗口。  如果在一行中放置一个断点、到达该行之后、您可以看到调用栈以查看如何从显示调用层次结构的调用栈调用函数。 您可以单击其中的任何一个(例如、请参阅黄色突出显示的部分)以转到调用函数的文件。  

    如原线程的开头所述、我没有外部 PHY 的相关经验。 我强烈建议您先了解一个简单的库存 TI-RTOS 以太网示例。 现在请勿修改。 使其首先编译并工作。 之后、您将进行修改以使用外部 PHY。 再说一次、您只应更改与支持外部 PHY 初始化相关的代码。 如果您可以使其正常工作、那么您可以逐渐添加您自己的应用特定代码。 这是我给你的最好的建议。  

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

    尊敬的 Charles:

    您能看到常用以太网示例的 Wireshark 流量吗?

    请参阅以下内容:

    我使用以下示例

    Wireshark:

    如果您有任何建议或意见、请告诉我。

    谢谢。

    Kiran

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

    尊敬的 Charles:

    ,我想查找文件正在下方的控制台窗口中打印"网络已添加"的情况。

    在 LaunchPad 上、我们有 RJ45端口、但由于 控制器板上有光纤端口、我们正在使用以太网介质转换器作为定制板。

    在没有介质转换器的情况下、它是否会根据与的比较创建任何修改 IP 地址?   

    谢谢。

    Kiran

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

    Wireshark:

    [/报价]

    您好!

     将来、请始终首先在 LaunchPad 上运行库存示例。 它将是您的最佳参考。 看看上面的 Wireshark 捕获、我假设您在定制电路板上运行库存示例。 是这样吗? 虽然我不是讲解所有无线流量的专家、但如果您看一下 Wireshark 捕获、就会发现有很多[RST, ACK)。 您可以对导致要发送的[RST、ACK]数据包的原因进行 google 搜索。 这里只是部分示例。 大多数情况下、当 服务器上的应用程序不想与客户端 IP 通信时(应用程序仅在握手后才会收到相关通知)、您可能会看到[RST、ACK]。 发送 RST 的不是 TCP 堆栈本身、它之所以这样做、是因为应用程序关闭了套接字。

    https://osqa-ask.wireshark.org/questions/5533/rst-ack-immediately-after-sending-data/

    https://osqa-ask.wireshark.org/questions/1652/what-would-cause-rstack/#:~:text=What%20would%20cause%20this%3F&text=This%20is%20very%20simply%20that,possibly%20it%20has%20been%20firewalled

    https://osqa-ask.wireshark.org/questions/51332/tcp-server-sends-ack-rst-right-after-ack/

     这是我建议您进行故障排除的操作。  

    1. 在连接到网络上简单交换机的 LaunchPad 上运行库存示例。 确保它工作正常。 它应该可以开箱即用。 捕获 Wireshark。 您应始终将其用作黄金参考。  

    2.  在连接到 以太网介质转换器的 LaunchPad 上运行库存示例。 我不确定您的以太网介质转换器的细节、不知道您是否可以将 LaunchPad 连接到它。 如果您可以在连接到以太网介质转换器的 LaunchPad 上运行库存示例、那么您将知道 与交换机相比以太网介质转换器是否产生了任何问题。 捕获 Wireshark。 对服务器执行 ping 操作。 您是否可以通过 ping 成功到达服务器?

    3.在连接到 以太网介质转换器的定制电路板上运行库存示例。 捕获 Wireshark。  对服务器执行 ping 操作。 您是否可以通过 ping 成功到达服务器?

    4.比较1和3中 Wireshark 的捕获。 由于软件是相同的、因此1和3之间的区别在于 以太网介质转换器以及 LaunchPad 中的集成 PHY 与定制板中的外部 PHY。 您需要查明问题、 以了解问题是由以太网介质转换器还是由与外部 PHY 的连接引起的。  

     a.检查是否已成功配置外部 PHY。 您是否可以读取/写入外部 PHY 上的寄存器?

     B.您是 MII 模式还是 RMII 模式?

     c.  如果以 RMII 模式运行、则会从外部 PHY 到 MCU 上的 EMAC 控制器使 EN0REF_CLK 以50MHz 的频率运行? 阅读有关时钟的数据表。  

     

     

    d.在0xFC4处配置 EMACPC 寄存器时、您的 MII 或 RMII 模式是否正确?

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

    在 Wireshark 捕获上、还有一点是、您已设置 TCP 端口23。 常用示例使用 TCP 端口1000、而不是23。 请参见下方的。  

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

    Nhi Charles:

    1.  在连接到网络上简单交换机的 LaunchPad 上运行库存示例。 确保它工作正常。 它应该可以开箱即用。 捕获 Wireshark。 您应始终将其用作黄金参考。  [/报价]

    Wireshark 和套接字输出:

    控制台输出:

    现在、在输出的库存示例中、控制台打印"Network Added"来自何处? 我在您提到的文件中找不到它、即 netctrl.c。 对在哪里可以找到它有什么建议吗?

    现在、我将在您的指导下修改 ext phy 的相同代码。

    此致、

    Kiran

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

    尊敬的 Charles:

    我已经在 TCP stock 示例中进行了修改。

    如何在此项目中添加我自己的 EMACSnow.c 文件(即 tcp_EMACSnow.c)以及用于外部 PHY 的函数、因为" tidrivers"库路径中已经有一个 EMACSnow.c 文件、并且在编译工程时重新定义的函数中显示错误。

    另外、EMAC 与 EMACSnow 之间有何区别?

    下面是我的代码附件:

    CFS 文件/__key/communityserver-components-multipleuploadfilemanager/9cc8a509_2D00_2227_2D00_4364_2D00_8f19_2D00_deb0f50246a3-532865-complete/tcpEcho_5F00_Kiran_5F00_EK_5F00_TM4C1294XL_5F00_TI2_5F00_extPhy.zip

    谢谢。

    Kiran

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    现在,在输出的库存示例中,控制台打印"网络已添加"来自何处? 我在您提到的文件中找不到它、即 netctrl.c。 关于在哪里可以找到它的任何建议?

    好的。 库存示例适用于您。 因此、将 Wireshark 捕获作为将来与修改后的代码进行比较的黄金参考。 尽管如此、我真的不知道"添加的网络"来自哪个文件。 我认为它深深嵌入到了 NDK 库或生成的 NDK 代码中、我对它们知之甚少。 抱歉。

     

    如何在该项目中添加我自己的 EMACSnow.c 文件(即 tcp_EMACSnow.c),带有外部 PHY 的函数,因为" tidrivers'库路径中已经有一个 EMACSnow.c 文件,并且在构建项目时重新定义的函数中显示错误。

    我不会在将 EMACSnow.c 复制到本地工程目录时遇到任何问题。 请参见下方的。 您可以对其进行修改并与项目的其余部分一同构建。 在尝试使用自定义代码之前、请始终先从库存示例开始。 将  EMACSnow.c 复制到常用示例目录并重新编译常用示例、确保先工作。 此外、如果您只是想更改 PHY 配置、实际上并不需要修改 EMACSnow.c。 可以在应用中定义 EMAC_PHY_CONFIG。  

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

    尊敬的 Charles:

    确定。 库存示例适用于您。 因此、将 Wireshark 捕获作为将来与修改后的代码进行比较的黄金参考。 尽管如此、我真的不知道"添加的网络"来自哪个文件。 我认为它深深嵌入到了 NDK 库或生成的 NDK 代码中、我对它们知之甚少。 抱歉。

    非常感谢您的支持。

    您能否访问以下有关此问题的链接?

    https://software-dl.ti.com/simplelink/esd/simplelink_msp432e4_sdk/2.20.00.20/docs/ndk/NDK_Users_Guide.html

    https://software-dl.ti.com/simplelink/esd/simplelink_msp432e4_sdk/2.20.00.20/docs/ndk/NDK_Users_Guide.html#network-control-functions

    下面提到的功能负责"网络已添加"

    因此、我在库存示例代码上检查了相同的内容、但发现了以下内容:

    我的结果是否正确? 如果是、则我无法找到 printf 命令。 请告知。

    谢谢。

    Kiran

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

    尊敬的 Charles:

    我没有任何问题,只需将 EMACSnow.c 复制到本地项目目录即可。 请参见下方的。 您可以对其进行修改并与项目的其余部分一同构建。 在尝试使用自定义代码之前、请始终先从库存示例开始。 将  EMACSnow.c 复制到常用示例目录并重新编译常用示例、确保先工作。 此外、如果您只是想更改 PHY 配置、实际上并不需要修改 EMACSnow.c。 可以在应用中定义 EMAC_PHY_CONFIG。  [/报价]

    正如建议的那样,EMACSnow.c 中进行了以下更改:

    控制台输出:

    但我在 Wireshark 上看不到输出。

    如果我漏掉了什么内容、请提供建议。

    谢谢。

    Kiran

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

    下面提到的功能负责"网络已添加"

    因此、我在库存示例代码上检查了相同的内容、但发现了以下内容:

    我的结果是否正确? 如果是、则我无法找到 printf 命令。 请告知。

    [/报价]

    我想弄清楚 printf 在哪里。 它位于生成的 NDK 代码中。

    1.转到 tcpEcho_pem4f.c 文件。 请参见下方的。  

    2.在  tcpEcho_pem4f.c 中、转到调用 NC_NetStart 的行。 NC_NetStart 将调用 ti_NDK_CONFIG_Global_NetworkIPAddr。  

    3.如果跟踪 ti_ndk_config_Global_NetworkIPAddr,则正在此处打印"已添加网络"。  

    但我在 Wireshark 上看不到输出。

    [/报价]

    正如我之前提到的、我没有外部 PHY 的相关经验。 您需要在这里进行一些调试。 首先、了解外部 PHY 是否正常运行。 我之前已经为您提供了一些调试提示。  

     a.您的外部 PHY 器件型号是什么? 您如何配置 PHY? 可以通过 MDIO 接口或 SPI 接口等来实现?

     b.检查是否已成功配置外部 PHY。 您是否可以读取/写入外部 PHY 上的寄存器?

     c.在0xFC4处配置 EMACPC 寄存器时、MII 是否正确?

     d.从 PHY 到 MCU 是否有适当的时钟?

     

     

     即外部 PHY 链路是否建立? 请参见下方的。 实际上、我建议您比较 LaunchPad 和您的定制板之间的所有寄存器。 我认为它可以帮助您缩小集成 PHY 与外部 PHY 之间的寄存器差异。  

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

    尊敬的 Charles:

    我想我知道 printf 在哪里。 它位于生成的 NDK 代码中。

    非常感谢您的支持!!

    a. 您的外部 PHY 器件型号是什么? 您如何配置 PHY? 通过 MDIO 接口或 SPI 接口或其他接口?

    器件型号:KSZ8765

    我们使用 SPI 接口  

    b.检查是否已成功配置外部 PHY。 您是否可以读取/写入外部 PHY 上的寄存器?

    是的、我们可以做到这一点。 请参阅下面的

    c.当您在0xFC4处配置 EMACPC 寄存器时,您的 MII 是否正确?

    您是否要验证上述图片?  

    d. 从 PHY 到 MCU 是否有合适的时钟?

    MOSC 范围:

    ENORXCK 和 ENOTXCK:请验证下图。 这是不是格式正确?

    如何验证门控系统时钟?

    外部 PHY 链路是否建立? 请参见下方的。 实际上、我建议您比较 LaunchPad 和您的定制板之间的所有寄存器。 我认为它可以帮助您缩小集成 PHY 与外部 PHY 之间的寄存器差异。  [/报价]

    我无法在数据表中找到 EPHYBMSR。 您能不能在提及页面编号的地方共享该页面?

    谢谢。

    Kiran

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    b.检查是否已成功配置外部 PHY。 您是否可以读取/写入外部 PHY 上的寄存器?

    是的、我们可以做到这一点。 请参阅下面的

    [/报价]

    上面的屏幕截图只显示了 MAC 地址。 我认为 MAC 地址是由 TI-RTOS 输出的、对吧? 我问您是否可以读取和写入   KSZ8765寄存器? 您需要确保正确设置 SPI、并且可以 成功读取/写入 KSZ8765。  

    c.在0xFC4处配置 EMACPC 寄存器时、MII 是否正确?

    [/报价]

    似乎 EMACPC 中的大多数位都仅适用于具有集成 PHY 的 MCU。 由于您使用的是 TM4C1292NCPDT、因此 大多数位不应适用 -换而言之、它们将为空。 请参见下方的。 但是、非常重要的是、位31应该显示已使用外部 PHY、尽管 TM4C1292NCPDT 数据表中未详细记录此情况。 您需要确保位31处于高电平。  

    d.从 PHY 到 MCU 是否有适当的时钟?

    MOSC 范围:

    ENORXCK 和 ENOTXCK:请验证下图。 这是不是格式正确?

    [/报价]

    您的时钟看起来很好。

    我无法在数据表中找到 EPHYBMSR。 您是否可以在提及的位置共享页号?
    [/quote]
    [/quote][/quote]

    抱歉、EPHBMSR 用于内部 PHY。 由于您使用的是外部 PHY、因此没有此寄存器。 但仅供参考、下面的寄存器用于 MCU 集成 PHY。  

    请检查以下所有内容并报告。  

    1.确保没有启用内部 PHY。 库存示例使用内部 PHY。 您不得使用内部 PHY。 对于 TM4C1292NCPDT、无论如何都无法访问内部 PHY。 您必须按如下方式使用外部 PHY。 我想您已经这么做了。 但确保此寄存器反映在 EMACCC 寄存器和 EMACPC 中。 使用 MII 时、CLKEN 位应该为0。 EMACCC 寄存器中的 PTPCEN 应为1。 EMACPC 寄存器的位31必须为高电平才能选择外部 PHY。  

    #define EMAC_PHY_CONFIG EMAC_PHY_TYPE_EXTERNAL_MII

    2.您的应用必须包含代码来配置 GPIO 管脚的 MII 功能。 您的 应用必须使用 GPIOPinTypeEthernetMII()配置 MII 管脚。 我不确定您是否在这样做。 这一点非常重要。 如果您不将 GPIO 多路复用电路配置为用于以太网 MII、则它们仅保留为 GPIO 引脚。 因此请仔细检查、确保所有相关引脚均已正确配置。 如果没有正确的引脚多路复用、EMAC 就无法与外部 PHY 进行通信。 如果您的电路板具有这些连接、请再次查看数据表中的 MII 引脚。  

    如果您使用了 GPIOPinTypeEthernetMII 来配置这些引脚以匹配您的硬件连接、请检查您的引脚复用。  

    3.我想您已经为 SPI 功能配置了 GPIO 引脚以便读取/写入您的外部 PHY 寄存器。  

    4.您的外部 PHY 必须有一个寄存器、用于指示 PHY 是否正常运行。 您应检查此类寄存器以确保 PHY 已启动。   

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

    尊敬的 Charles:

    以上屏幕截图仅显示 MAC 地址。 我认为 MAC 地址是由 TI-RTOS 输出的、对吧? 我问您是否可以读取和写入   KSZ8765寄存器? 您需要确保正确设置 SPI、并且可以 成功读取/写入 KSZ8765。  [/报价]

    请参阅下面的以太网交换机和以太网 IC 端口配置的代码片段:

    3. 我想您已经为 SPI 功能配置了 GPIO 引脚以便读取/写入您的外部 PHY 寄存器。  [/报价]

    是的、它们是为 SSI 配置的、请参阅 下面的函数 iocEthernetSwitchConfig_ksz8765。

    void iocEthernetSwitchConfig_ksz8765(void)
    {
    //    UARTprintf("%s() : iocEthernetSwitchConfig : Configuring...\n",__FUNCTION__);
    
        // This "MII BYPASS" is actually txer5 from the ksz8765,
        // and therefore must be set to an input, since it's not used.
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);
        GPIOPinTypeGPIOInput(GPIO_PORTG_BASE, GPIO_PIN_6);      // U45-55     MII_BYPASS     U46-28_MII_BP
    
        // PME is an output from the ksz8765, and must be set as input.
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOK);
        GPIOPinTypeGPIOInput(GPIO_PORTK_BASE, GPIO_PIN_1);
    
        // TODO why does OLD eth chip have this set as input here?  this is driving its rst input.
    //    GPIOPinTypeGPIOInput(GPIO_PORTK_BASE, GPIO_PIN_1);
        GPIOPinTypeGPIOOutput(GPIO_PORTK_BASE, GPIO_PIN_1);
    
        /* MDIO and MDC as Input pins */
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
        GPIOPinTypeGPIOInput(GPIO_PORTF_BASE, GPIO_PIN_2); // PF2 PIN 44 NC
        GPIOPinTypeGPIOInput(GPIO_PORTF_BASE, GPIO_PIN_3); // CAN'T FIND
        GPIOPinTypeGPIOInput(GPIO_PORTC_BASE, GPIO_PIN_6); // rst_n to ksz8765
        GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_6, GPIO_PIN_6);
    
        /* SPI-2 DATA2 and DATA3 pins as input */
        // U45 TM4C1292NCPDTI3 to U21 LAN9252
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
        GPIOPinTypeGPIOInput(GPIO_PORTD_BASE, GPIO_PIN_6);       // CONT_ECAT_QSPI_DATA3
        GPIOPinTypeGPIOInput(GPIO_PORTD_BASE, GPIO_PIN_7);       // CONT_ECAT_QSPI_DATA2
    
        // U45 TM4C1292NCPDTI3 to U46 KSZ8463FMLI
        SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI2);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
        GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_2);      // U45-3    CONT_QSPI_CS     CONT_ETHSW_CS_N     U46-42_SPI_CSn
        GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_2, GPIO_PIN_2);   // Set CS HI
        GPIOPinConfigure(GPIO_PD3_SSI2CLK);                      // U45-4    CLK_QSPI_CONT    CLK_CONT_ETHSW      U46-44_SPI_SCLK
        GPIOPinConfigure(GPIO_PD1_SSI2XDAT0);                    // U45-2    CONT_QSPI_DATA0  CONT_ETHSW_MOSI     U46-45_SPI_DI
        GPIOPinConfigure(GPIO_PD0_SSI2XDAT1);                    // U45-1    CONT_QSPI_DATA1  ETHSW_CONT_MISO     U46-41_SPI_DO
        GPIOPinTypeSSI(GPIO_PORTD_BASE, GPIO_PIN_3 | GPIO_PIN_1 | GPIO_PIN_0 );
    
    //    UARTprintf("%s() : iocEthernetSwitchConfig : Resetting...\n",__FUNCTION__);
    
        /* Ethernet Switch Reset */
        GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_6, 0X00);
        SysCtlDelay(10000);
        GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_6, GPIO_PIN_6);
    
    //    UARTprintf("%s() : iocEthernetSwitchConfig : Reset done\n",__FUNCTION__);
    
    
        /* Reset Ethernet Switch */
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
        GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_6);
        GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_6, GPIO_PIN_6);
    
        System_printf("\nMII and SPI configured for Ethernet Switch\n");
        System_flush();
    
    }

    void ioc_EthernetPortConfig_ksz8765(bool bMode,bool dbg)
    {
    
    //    if(bMode == TIVA)
    //        UARTprintf("%s() : Starting...\n",__FUNCTION__);
    //    else
    //        ioc_UartPrint("%s() : Starting...\n",__FUNCTION__);
    
        // Global registers
    
    
        // LED Mode
        // OLD (ks8463)
        //  IOCNAME  bits [9:8] in SGCR7      00          01          10          11
        //  LINKx    P1LED1/P2LED1            Speed       ACT         Duplex      Duplex
        //  100Mx    P1LED0/P2LED0            Link/ACT    Link        Link/ACT    Link
        // NEW (ksz8765)
        //  IOCNAME  bits[5:4]                00          01          10          11
        //  LINKx    LEDx_1                   Speed       ACT         Duplex      Duplex
        //  100Mx    LEDx_0                   Link/ACT    Link        Link/Act    Link
        ioc_PhyWriteOperation_ksz8765(0x0B,0x10,bMode,dbg);
    
        // Force 100-full, since autonegotiation is not supported in 100Base-FX (Fiber)
        // 0b11111111 = 0xFF
        ioc_PhyWriteOperation_ksz8765(0x1C,0xFF,bMode,dbg);
        //ioc_PhyWriteOperation_ksz8765(0x2C,0xFF,bMode,dbg);
    
    //    // Disable Auto MDX
    //    // 0b00000110 = 0x06
    //    ioc_PhyWriteOperation_ksz8765(0x1D,0x06,bMode,dbg);
    //    ioc_PhyWriteOperation_ksz8765(0x2D,0x06,bMode,dbg);
    
        // Port registers
        // Register 86 (0x56): Port 5 Interface Control 6
        ioc_PhyWriteOperation_ksz8765(0x56,0xA8,bMode,dbg);
        System_printf("Ethernet Switch is Configured\n");
               System_flush();
       // ioc_ksz8765_rdall(0,1);
    }

    在功能的末尾,它们 分别打印"\n 为以太网交换机配置的 MII 和 SPI"和"Ethernet 交换机已配置\n",而 MAC 地址打印之前,它们将在控制台中打印。 除了打印此文件外、如何检查它是否实际已成功配置? 即使我检查 SPI 波形、是否会确保 SPI 数据成功传输到开关?

    似乎 EMACPC 中的大多数位都只适用于具有集成 PHY 的 MCU。 由于您使用的是 TM4C1292NCPDT、因此 大多数位不应适用 -换而言之、它们将为空。 请参见下方的。 但是、非常重要的是、位31应该显示已使用外部 PHY、尽管 TM4C1292NCPDT 数据表中未详细记录此情况。 您需要确保位31处于高电平。  [/报价]

    在 EMACSnow.c 文件中、函数  

    EMCPHYConfigSet (EMAC0_BASE、EMAC_PHY_CONFIG);

    在函数  int EMACSnow_NIMUInit (STKEVENT_Handle hEvent)内调用  

    并且我们已经定义了 #define EMAC_PHY_CONFIG      EMAC_PHY_TYPE_EXTERNAL_MII (您可以签入共享的代码)

    在 EMACSnow.c 文件中、这意味着 EMAC_PC 中的值应为 0x80000000、但未达到预期值、那么我们需要在其中进行更改时是否存在其他文件/函数/定义?  

    您的应用程序必须包含代码,以便为 MII 功能配置 GPIO 引脚。 您的 应用必须使用 GPIOPinTypeEthernetMII()配置 MII 管脚。 我不确定您是否在这样做。 这一点非常重要。 如果您不将 GPIO 多路复用电路配置为用于以太网 MII、则它们仅保留为 GPIO 引脚。 因此请仔细检查、确保所有相关引脚均已正确配置。 如果没有正确的引脚多路复用、EMAC 就无法与外部 PHY 进行通信。 如果您的电路板具有这些连接、请再次查看数据表中的 MII 引脚。  [/报价]

    我们使用函数  PinoutSet () 配置以太网 MII 引脚,该函数 仅使用 GPIOPinTypeEthernetMII 功能配置 MII 引脚。 请检查下面的屏幕截图

    如果您使用 GPIOPinTypeEthernetMII 来配置这些与您的硬件连接相匹配的引脚,请检查您的引脚复用。  [/报价]

    包括 EN0MDC 和 EN0MDIO 在内的所有引脚均针对 MII 信号进行了配置。 请参阅下面的

    MAP_GPIOPinConfigure(GPIO_PP0_EN0INTRN);
    	GPIOPinTypeEthernetMII(GPIO_PORTP_BASE, GPIO_PIN_0);
    
        //
        // Configure the GPIO Pin Mux for PK4
    	// for EN0RXD3
        //
    	MAP_GPIOPinConfigure(GPIO_PK4_EN0RXD3);
    	GPIOPinTypeEthernetMII(GPIO_PORTK_BASE, GPIO_PIN_4);
    
        //
        // Configure the GPIO Pin Mux for PK6
    	// for EN0TXD2
        //
    	MAP_GPIOPinConfigure(GPIO_PK6_EN0TXD2);
    	GPIOPinTypeEthernetMII(GPIO_PORTK_BASE, GPIO_PIN_6);
    
        //
        // Configure the GPIO Pin Mux for PG5
    	// for EN0TXD1
        //
    	MAP_GPIOPinConfigure(GPIO_PG5_EN0TXD1);
    	GPIOPinTypeEthernetMII(GPIO_PORTG_BASE, GPIO_PIN_5);
    
        //
        // Configure the GPIO Pin Mux for PA6
    	// for EN0RXCK
        //
    	MAP_GPIOPinConfigure(GPIO_PA6_EN0RXCK);
    	GPIOPinTypeEthernetMII(GPIO_PORTA_BASE, GPIO_PIN_6);
    
        //
        // Configure the GPIO Pin Mux for PG7
    	// for EN0RXDV
        //
    	MAP_GPIOPinConfigure(GPIO_PG7_EN0RXDV);
    	GPIOPinTypeEthernetMII(GPIO_PORTG_BASE, GPIO_PIN_7);
    
        //
        // Configure the GPIO Pin Mux for PF2
    	// for EN0MDC
        //
    	MAP_GPIOPinConfigure(GPIO_PF2_EN0MDC);
    	GPIOPinTypeEthernetMII(GPIO_PORTF_BASE, GPIO_PIN_2);
    
        //
        // Configure the GPIO Pin Mux for PG3
    	// for EN0TXEN
        //
    	MAP_GPIOPinConfigure(GPIO_PG3_EN0TXEN);
    	GPIOPinTypeEthernetMII(GPIO_PORTG_BASE, GPIO_PIN_3);
    
        //
        // Configure the GPIO Pin Mux for PF3
    	// for EN0MDIO
        //
    	MAP_GPIOPinConfigure(GPIO_PF3_EN0MDIO);
    	GPIOPinTypeEthernetMII(GPIO_PORTF_BASE, GPIO_PIN_3);
    
        //
        // Configure the GPIO Pin Mux for PQ5
    	// for EN0RXD0
        //
    	MAP_GPIOPinConfigure(GPIO_PQ5_EN0RXD0);
    	GPIOPinTypeEthernetMII(GPIO_PORTQ_BASE, GPIO_PIN_5);
    
        //
        // Configure the GPIO Pin Mux for PM6
    	// for EN0CRS
        //
    	MAP_GPIOPinConfigure(GPIO_PM6_EN0CRS);
    	GPIOPinTypeEthernetMII(GPIO_PORTM_BASE, GPIO_PIN_6);
    
        //
        // Configure the GPIO Pin Mux for PK5
    	// for EN0RXD2
        //
    	MAP_GPIOPinConfigure(GPIO_PK5_EN0RXD2);
    	GPIOPinTypeEthernetMII(GPIO_PORTK_BASE, GPIO_PIN_5);
    
        //
        // Configure the GPIO Pin Mux for PG4
    	// for EN0TXD0
        //
    	MAP_GPIOPinConfigure(GPIO_PG4_EN0TXD0);
    	GPIOPinTypeEthernetMII(GPIO_PORTG_BASE, GPIO_PIN_4);
    
        //
        // Configure the GPIO Pin Mux for PG2
    	// for EN0TXCK
        //
    	MAP_GPIOPinConfigure(GPIO_PG2_EN0TXCK);
    	GPIOPinTypeEthernetMII(GPIO_PORTG_BASE, GPIO_PIN_2);
    
        //
        // Configure the GPIO Pin Mux for PQ6
    	// for EN0RXD1
        //
    	MAP_GPIOPinConfigure(GPIO_PQ6_EN0RXD1);
    	GPIOPinTypeEthernetMII(GPIO_PORTQ_BASE, GPIO_PIN_6);
    
        //
        // Configure the GPIO Pin Mux for PK7
    	// for EN0TXD3
        //
    	MAP_GPIOPinConfigure(GPIO_PK7_EN0TXD3);
    	GPIOPinTypeEthernetMII(GPIO_PORTK_BASE, GPIO_PIN_7);
    
        //
        // Configure the GPIO Pin Mux for PM7
    	// for EN0COL
        //
    	MAP_GPIOPinConfigure(GPIO_PM7_EN0COL);
    	GPIOPinTypeEthernetMII(GPIO_PORTM_BASE, GPIO_PIN_7);
    

    4. 外部 PHY 必须具有一个寄存器、用于在 PHY 开启且正在运行时指示链路状态。 您应检查此类寄存器以确保 PHY 已启动。
    [/quote]
    [/quote][/quote]
    [/quote][/quote][/quote]
    [/quote][/quote][/quote][/quote]

    是否在任何地方检查了文件"EMACSnow.c"中的函数"EMACSnow_isLinkUp"或"EMACSnow_emacPoll"?  

    而不是线路  

    newLinkStatus =
    (EMCPHYRead (EMAC0_BASE、0、EPHY_BMSR)和 EPHY_BMSR_LINKSTAT);

    我需要输入  

    newLinkStatus = IOC_PhyReadOperation_ksz8765 (0x1E、1、0);

    以在我的外部 PHY 中检查链路的状态。 我应该在哪里替换它? (0x1E 是用于检查我的外部 PHY 中链路的状态寄存器地址)

    此致、

    Kiran

    [/quote][/quote][/quote][/quote][/quote]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,它们是为 SSI 配置的,请参阅 下面的函数 iocEthernetSwitchConfig_ksz8765。

    如果在示波器上看到正确的 SPI 事务、则应该没有问题。  

    在函数末尾,它们 分别打印"\n 为以太网交换机配置的 MII 和 SPI"和"Ethernet 交换机已配置\n",这是在打印 MAC 地址之前在控制台中打印的。

    print 语句并不表示 SPI 事务成功。 这就是为什么我要求检查您是否也可以读回所写入的内容以确保写入成功的原因。 您还可以查看示波器。  

    、所以这意味着 EMACSnow.c 文件中的值应为 0x80000000但未达到预期值、我们是否需要在其他文件/函数/定义中进行更改?  [/报价]

    您是否可以使用 HWREG ()手动向寄存器写入值为0x8000000的数据?

    包括 EN0MDC 和 EN0MDIO 在内的所有引脚均针对 MII 信号进行了配置。 请参阅下面的

    全屏
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    MAP_GPIOPinConfigure (GPIO_PP0_EN0INTRN)
    GPIOPinTypeEthernetMII (GPIO_PORTP_BASEGPIO_PIN_0)
    //
    //为 PK4配置 GPIO 引脚多路复用器
    //用于 EN0RXD3
    //
    MAP_GPIOPinConfigure (GPIO_PK4_EN0RXD3)
    GPIOPinTypeEthernetMII (GPIO_PORTK_BASEGPIO_PIN_4)
    //
    //为 PK6配置 GPIO 引脚多路复用器
    //用于 EN0TXD2
    //
    MAP_GPIOPinConfigure (GPIO_PK6_EN0TXD2)
    GPIOPinTypeEthernetMII (GPIO_PORTK_BASEGPIO_PIN_6)
    //
    //为 PG5配置 GPIO 引脚多路复用器
    //用于 EN0TXD1
    //
    [/报价]

    如果您已经为 MII 功能配置 GPIO 引脚、则确定。  

    是否在任何地方检查了文件"EMACSnow.c"中的函数"EMACSnow_isLinkUp"或"EMACSnow_emacPoll"?  

    而不是线路  

    newLinkStatus =
    (EMCPHYRead (EMAC0_BASE、0、EPHY_BMSR)和 EPHY_BMSR_LINKSTAT);

    我需要输入  

    newLinkStatus = IOC_PhyReadOperation_ksz8765 (0x1E、1、0);

    [/报价]

    是的、您需要从 KSZ PHY 获取链路状态。 现有代码正在从集成 PHY 读取链接状态、这是 TM4C1292器件上没有的功能。  

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

    尊敬的 Charles:

    感谢您的答复。

    我还有一个关于   ENORXCK 和 ENOTXCK 范围的问题。

    定制电路板和工作电路板范围之间的比较。   

    定制电路板的范围:

    工作委员会的范围:

    与工作板相比、我是否在自定义板中获得了正确的波形? 它会影响微控制器的功能吗?  

    请告知。

    谢谢。

    Kiran

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

    定制电路板的范围:

    工作委员会的范围:

    [/报价]

    您有一个可正常工作的电路板、这意味着什么? 您是说您可以在其上运行示例的工作板吗?  

    观察定制板的时钟、我认为应该没问题。 即25MHz。  

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

    尊敬的 Charles:

    您的工作板是什么意思?

    工作委员会指的是我们先前所提到的参考委员会。

    在定制电路板中时钟信号失真或有噪声、这就是我要求的原因。

    谢谢。

    Kiran  

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

    尊敬的 Charles:

    文件"EMACSnow_isLinkUp"或"EMACSnow_emacPoll"中的函数"EMACSnow.c"是否在任何地方被检查?  [/报价]

    在哪里可以检查? 请提供建议。

    线的 nstead  

    newLinkStatus =
    (EMCPHYRead (EMAC0_BASE、0、EPHY_BMSR)和 EPHY_BMSR_LINKSTAT);

    我需要输入  

    newLinkStatus = IOC_PhyReadOperation_ksz8765 (0x1E、1、0);

    [/报价]

    我应该在现有代码中的什么位置编写这个代码?

    谢谢。

    Kiran

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

    尊敬的 Charles:

    您可以使用 HWREG()手动写入值为0x8000000的寄存器吗?

    我 在文件'emac.c'中对 EMACPHYConfigSet()函数进行了如下更改(将值直接写入 EMAC_PC )

    是的,您需要从 KSZ PHY 获取链接状态。 现有代码正在从集成 PHY 读取链接状态、这是 TM4C1292器件上没有的。

    我还对 文件 EMACSnow.c 中的 EMACSnow_sLinkUp()和 EMACSnow_emacPoll ()函数进行了更改,以检查链接状态。 请参阅以下内容:

    此外、检查了3个板(TI Launchpad、参考工作板和我们的定制板)上的 SPI 时钟信号(MDC)、它们各自的示波器捕获结果如下:

    发射盘

    参考板

    自定义板

    更新后的代码如下:

     /cfs-file/__key/communityserver-discussions-components-files/908/tcpEcho_5F00_Kiran_5F00_EK_5F00_TM4C1294XL_5F00_TI2_5F00_extPhy-_2800_2_2900_.zip

    Wireshark 流量不会同时包含在参考板和定制板中。

    请指导背后的原因。

    此致、

    Kiran

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

    此外、检查了3个板(TI Launchpad、参考工作板和我们的定制板)上的 SPI 时钟信号(MDC)、它们各自的示波器捕获结果如下:

    发射盘

    参考板

    自定义板

    [/报价]

    您能解释一下吗?

    -您使用哪个 SSI 与外部 PHY 通信? 我假设它是基于您的代码的 SSI2。  是这样吗?

    -您正在显示 LaunchPad 正在 SSI2上与 KSZ PHY 成功通信。 是这样吗?

    -请确认您是否可以读回使用 Launchpad 通过 SSI2接口写入 KSZ 的内容?

    -在您的参考板和定制板捕获图上、您显示的是 SPICLK、对吗?

    -您是否在所有三个板上运行相同的代码? 如果您在使用 SSI2与参考和定制板上的 KSZ 进行通信时遇到问题、则可能是硬件问题。 您的代码完全不了解 LaunchPad、参考板和定制板之间的区别。  

     -为什么不专注于 SSI2代码。 也许您可以删除除 SSI2代码之外的所有其他代码。 在添加与以太网相关的额外代码之前、请让 SSI2与所有三个电路板上的 KSZ 进行通信。 如果您甚至无法使用 SPI 接口在参考板和定制板上设置 KSZ、则无法继续以太网应用。 您的以太网代码将依赖于正常工作的 PHY。 这就是我之前多次询问是否可以通过 SPI 接口成功读取和写入外部 PHY 的原因。  

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

    尊敬的 Charles:

    您使用哪个 SSI 来与外部 PHY 通信? 我假设它是基于您的代码的 SSI2。  是这样吗?

    -您正在显示 LaunchPad 正在 SSI2上与 KSZ PHY 成功通信。 是这样吗?

    [/报价]

    是的、我们正在使用 SSI2与 KSZ 通信

    LaunchPad 未连接到 KSZ、我们并非 Launchpad 上所有这些连接都能够实现与 KSZ 的成功连接、因此我们在不使用 KSZ 连接的情况下仅检查 LaunchPad

    是的、我将展示适用于参考板和定制板的 SPICLK

    是的、在所有电路板上运行相同的代码、但参考代码在现有项目中网络运行良好、因此可能在代码中出现问题

    谢谢。

    Kiran

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是,在所有开发板上运行相同的代码,但参考代码在现有项目中运行良好,因此可能在代码中出现问题

    您好!

     我迷路了。 如果 LaunchPad 生成正确的 SPICLK 波形、那么为什么除非是硬件问题、否则相同的代码不会为参考板生成相同的波形? 为什么您认为这是代码问题?  在这里、我们只讨论 SPI 功能、而不是以太网功能。 设想一下、SSI2CLK 位于 PD3引脚上。 从软件的角度来看、SSI2不知道它没有运行 LaunchPad 或在您的参考板上运行。 你同意吗?  您的参考板上连接了什么 PD3? 为什么不在实验中将 PD3从 MCU 连接到任何器件? 您看到的仍然是错误的 SSI2CLK 吗? 如果您没有将任何部件连接到参考板上的 PD3、并且仍然有错误的 SPI2CLK、那么我们可以再次查看代码。 但我仍然不知道同样的代码在 SSI2CLK 的 LaunchPad 上有效、但在您的参考板上不起作用、除非这是硬件问题。  

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

    尊敬的 Charles:

    我在 TI Launchpad 和 KSZ8765的 EV 板之间进行了 SPI 验证、并验证了 SCL_MDC 和 SDA_MDIO。  

    请参阅以下内容:

    测试设置:

    EV 板 KSZ8765原理图:

    我无法理解为什么在参考板和定制板上不能看到相同的信号。 即使我使用的是相同的代码。

    请分享您的反馈并建议一些步骤。

    谢谢。

    Kiran

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

    您要将 LaunchPad 上的 X11连接器的哪些引脚连接到 KSZ EVM?  图片太小了。 使用的似乎是 PL0和 PL1。 这两个引脚的用途是什么? 您是否也对 SSI3CLK 和 SSI3TX 使用了 PQ0和 PQ2?

    我无法理解为什么在参考板和定制板上没有获得相同的信号。 即使我使用相同的代码

    那么、您会在参考板上获得哪些信号? 他们是完全平坦的、还是做了一些不正确的事情? 显示了波形。 我无法直观地理解什么是"没有得到相同的"含义。

    您为什么不创建一个简单的代码来首先切换 PQ0和 PQ2? 它们是否会在您的参考板和定制板中切换? 该测试将检查您的电路板上的这两个引脚是否至少在变摆。  

    SPI 信号的参考板原理图是什么? 它们还连接到什么其他设备?  

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

    尊敬的 Charles:

    感谢您的答复!!

    您要从 LaunchPad 上的 X11连接器的哪些引脚连接到 KSZ EVM?  图片太小了。 使用的似乎是 PL0和 PL1。 这两个引脚的用途是什么? 您是否也将 PQ0和 PQ2用于 SSI3CLK 和 SSI3TX?

    如代码中所述、我使用的是 PD0、PD1、PD2和 PD3。 请参阅以下内容:

    您在参考板上收到哪些信号? 他们是完全平坦的、还是做了一些不正确的事情? 显示了波形。 我无法直观地看到"没有得到相同的"含义。

    参考板和定制板的范围应与 KSZ EVM 的范围相同。

    您为什么不创建一个简单的代码来首先切换 PQ0和 PQ2? 它们是否会在您的参考板和定制板中切换? 该测试将检查您的电路板上的这两个引脚是否至少在变摆。  [/报价]

    我在定制板上再次检查相同的代码。 请参阅以下内容:

    KSZ EVM 的范围:

    能否比较两个示波器结果? 我无法理解哪里出了问题。 请提供建议。

    您的 SPI 信号参考板原理图是什么? 它们还连接到什么其他设备?  [/报价]

    定制板和参考板具有相同的 SPI 原理图。  

    请分享您的反馈。

    谢谢。

    Kiran  

    [/quote]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    参考板和定制板的范围应与 KSZ EVM 的范围相同。

    我在定制板上再次检查相同的代码。 请参阅以下内容:

    [/报价]

    如果这是您在参考板和定制板上看到的、则您的板肯定存在问题。  

    您有多少个参考板和定制板? 您是否在所有板上都看到相同的波形?

    为什么不做一些实验?

    -从 KSZ EVM 上断开 PD0、1、3、这意味着不要在这些引脚上放置任何负载。 您看到相同的波形吗? 显示范围。

     从 KSZ EVM 断开 PD0、1、3 ,只需在 GPIO 模式下多次切换这三个引脚即可。 例如 反复多次写入0、然后依次写入1、0和1。  显示范围。  

    -将 PD0、1、3连接到 KSZ EVM 并在 GPIO 模式下多次切换这三个引脚。 显示范围。  

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

    尊敬的 Charles:

    非常感谢您的支持。  

    我们的 RTOS 代码在某处卡住、无法验证 PHY 和微控制器之间的通信。

    谢谢。

    Kiran

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

    尊敬的 Kiranjit:

     非常高兴您解决了这个问题。 您能否详细说明您是如何解决问题的、这样社区就能从您的解决方案中受益。 请您回答几个问题吗?

     -现在 MCU 可以与您的外部 PHY 通信吗? 问题是什么、您是如何解决的? 问题是否与硬件或软件相关?

     -您的参考板和定制板上的 SPI 信号有问题,但是 LaunchPad 运行相同的代码似乎很好。  您的参考电路板和定制电路板上的问题是什么、您是如何解决的? 问题是否与硬件或软件相关?

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

    尊敬的 Charles:

    由于引入了额外的 I2C 总线、代码被挂起了、之前没有考虑到这些线路、因此可能是由于 I2C 总线故障、未建立连接

    此致、

    Kiran