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:FreeRTOS + UDP 项目帮助- RM46L852

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1380948/dp83640-freertos-plus-udp-project-help---rm46l852

器件型号:DP83640
主题中讨论的其他器件:HALCOGENRM46L852

工具与软件:

各位专家、您好!

我正在尝试通过使用 RMII 和 RM46L852 MCU 以及使用 FreeRTOS 和 UDP 堆栈的定制开发板实现以太网通信。 我正在使用 HALCoGen 生成的驱动程序代码执行硬件初始化。 我正在按照确切顺序进行的初始化包括:

1.启用中断
2.初始化 SCI 和 GIO
3.以 CPU 时钟频率初始化 MDIO 作为输入频率、以2.5MHz 作为输出频率
4.使用 EMAC_0_BASE、EMAC_PHYBASE 和 MDIO_0_BASE 的 EMACLinkSetup 执行 DP83640 PHY 链路设置。
5.使用 DP83640模块上的引脚29 (置位然后取消置位)执行 PHY 复位。
6. EMACInit 使用 EMAC_0_CTRL_BASE 和 EMAC_0_BASE。

此处、EMAC_0_CTRL_BASE、EMAC_0_BASE 等都是 HALCoGen 生成的常量。 如果可能有用、我还将在 HALCoGen 中附加 EMAC 配置以及 PINMUX:

之后我使用 FreeRTOS_IPInit()函数初始化 TCP 加 UDP 堆栈、并启动以太网任务。

我想确认初始化步骤的有效性、或者如果我缺少一些配置、因为这不起作用。 当我尝试使用调度程序时、套接字的内存分配失败、我唯一能够启动以太网任务的方法是手动将其作为一个函数调用、这让我觉得硬件配置可能是个问题。

DP83640是否未正确设置? 我这边的任何其他信息是否可以帮助您找到问题所在?

请说明、是否有使用 DP83640和 RM46L852 MCU 的 MDIO 和 RMII 测试网络连接的示例项目?

谢谢!

- Karan

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

    您好!

    我认为这可能是软件问题、就好像 PHY 可通过寄存器进行访问、建立链路、并可在应用外部进行良好通信一样。 遗憾的是、此论坛更多的是针对基于 PHY 硬件的问题、因此我们建议让负责驱动程序的团队看看此问题。 与一些具有 RMII 并实现10/100Mbps 的新型 PHY 相比、使用 DP83640的目的是什么?

    此致、

    Gerome.

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

    您好、Gerome

    感谢您的答复。

    我是这块板和这款 MCU 的新手、因此我需要测试这块板上的外设、包括以太网。 如果您能与我分享使用 DP83640的 RM46L852示例网络项目、它将非常有帮助!

    此致、

    Karan

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

    尊敬的 Karan:

    我建议与客户经理团队核实这一点。 请允许我重新分配。

    此致、

    Gerome.

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

    您好、Gerome

    当然、谢谢!

    此致

    Karan

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

    尊敬的 Karan:

    要在 RMII 接口中操作 PHYTER、请遵循以下两个线程中建议的修改:

    (+) TMS570LC4357:具有 LWIP 的 MII 和 RMII 设计-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    (+) TMS570LC4357:在网络端口上配置 RMII 模式、不使用 lwip-1.4.1 (基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛)来执行 ping 操作

    对于基于 RTOS 的免费以太网示例、您可以参考以下示例:

    (5)[常见问题解答] TMS570LC4357:适用于 Hercules 控制器的示例和演示(例如 TMS570x、RM57x 和 RM46x 等)-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    ——
    谢谢、此致、
    Jagadish。

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

    尊敬的 Jagadish:

       我是否需要修改 MPU 相关权限?

    因为在 RMII 模式下、当调用 EMAC 的输出接口时、在 TX_EN TXD_0 TXD_1上未检测到信号

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
     请问是否需要修改 与 MPU 相关的权限?

    我认为、除非我们有缓存、否则我们不需要进行任何与 MPU 相关的修改。 但对于此器件没有高速缓存、因此我认为无需进行任何与 MPU 相关的修改。

    在缓存器件中、我们将遇到与默认配置的一致性问题、因此我们将对 MPU 设置进行一些更改。

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

    尊敬的 Jagadish:

     感谢您的支持。

       我正在使用官方程序: git ://git.ti.com/hercules_examples/hercules_examples.git

    BUILD-RM46可以使用静态 IP、VCC 和 RESET 默认为高级别正常编译和刻录。

    SCH 如下(RMII 设计):

    问题:在 TX_EN TXD_0 TXD_1上未检测到信号?如何修改它、

    谢谢!

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

    尊敬的 Rongpeng Que:

    我对拖延答复表示歉意。

    我已验证您的原理图、它看起来对我没有问题、但我对 RESET_N 连接有疑问。

    看起来您已将 PHY 的该引脚连接到 MCU G1引脚、该引脚的默认状态似乎下拉、那么您是否在此引脚上写入逻辑高电平?

    但它应该不会因在  TXD_0和 TXD_1上传输数据而引起问题。 您能否提供完整的项目以供验证? 如果您使用的是 Hercules 示例、请准确说出您正在使用的应用、因为 LaunchPad 和 HDK 有单独的示例、那么您正在使用哪个示例?

    ——
    谢谢、此致、
    Jagadish。

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

    尊敬的 Jagadish:

      这是一个测试项目、已从官方程序中更改。

       e2e.ti.com/.../TI_5F00_LwIP_5F00_by_5F00_RongPeng.rar

    谢谢!

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

    您好!

    感谢这个项目,我昨天病假,现在我将完成你的项目,并在明天之前提供我的最新情况。

    ——
    谢谢、此致、
    Jagadish。

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

    尊敬的 Rongpeng Que:

    刚才我在您的原理图中发现了一个问题、  

    我想我们在 X1和 X2之间连接了50MHz 晶体。

    但是根据 PHY 数据表、对于 RMII 从模式、我们应该只连接50MHz 振荡器源、而对于 RMII 从模式、我们不应该连接晶体。

    我认为、在 RMII 从模式下、它不会从50MHz 晶体生成时钟。 这或许就是我们 HDK 板(它可以同时支持 RMII 和 MII 模式)中提供振荡器源配置的原因、而不是如下所示的晶体。  

    如果我们提供了晶体、那么对于 MII 模式、没问题、但是对于 RMII 模式、晶体不会有用。为此、我们提供了振荡器源以实现 MII 和 RMII 模式的兼容性。

    ——
    谢谢、此致、
    Jagadish。

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

    尊敬的 Jagadish:

       感谢您的分析。

    我的硬件设计与 MII 不兼容、因此为 RMII 从模式提供了50M 晶体振荡器。

    PHY 寄存器的值可通过 MDIO 获得、如下所示

    寄存器=[0x0] reg_value=[0x3100]  
    寄存器=[0x1] reg_value=[0x78ed]  
    寄存器=[0x2] reg_value=[0x2000]  
    寄存器=[0x3] reg_value=[0x5ce1]  
    寄存器=[0x4] reg_value=[0x1A1]  
    寄存器=[0x5] reg_value=[0xdde1]  
    寄存器=[0x6] reg_value=[0xF]  
    寄存器=[0x7] reg_value=[0x2801]  
    寄存器=[0x8] reg_value=[0x0]  
    寄存器=[0x9] reg_value=[0x0]  
    寄存器=[0xA] reg_value=[0x0]  
    寄存器=[0xb] reg_value=[0x0]  
    寄存器=[0xc] reg_value=[0x0]  
    寄存器=[0xd] reg_value=[0x0]  
    寄存器=[0xe] reg_value=[0x0]  
    寄存器=[0xF] reg_value=[0x0]  
    寄存器=[0x10] reg_value=[0x4815]  
    寄存器=[0x11] reg_value=[0x0]  
    寄存器=[0x12] reg_value=[0x2c00]  
    寄存器=[0x13] reg_value=[0x0]  
    寄存器=[0x14] reg_value=[0x10]  
    寄存器=[0x15] reg_value=[0x0]  
    寄存器=[0x16] reg_value=[0x100]  
    寄存器=[0x17] reg_value=[0x21]  
    寄存器=[0x18] reg_value=[0x0]  
    寄存器=[0x19] reg_value=[0x8021]  
    寄存器=[0x1A] reg_value=[0x904]  
    寄存器=[0x1b] reg_value=[0x0]  
    寄存器=[0x1c] reg_value=[0x2]  
    寄存器=[0x1d] reg_value=[0x6011]  
    寄存器=[0x1E] reg_value=[0x83e]  
    寄存器=[0x1f] reg_value=[0x0]

    该图显示 PHY 处于 RMII 从模式。

    回到前面的问题、PHY 的状态是否会影响 MAC 的输出?

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的硬件设计与 MII 不兼容、因此为 RMII 从模式提供了50m 晶体振荡器。

    您能否确认您提供的是晶体源还是振荡器源?

    以下是振荡器源:

    如您所见、该图采用电源、其中包含内部振荡器电路、因此可以直接生成时钟、而无需使用 DP83640 PHY IC 中的振荡器电路。

    以下是"仅使用晶体":

    这里的晶体不采用任何电源、它将使用 DP83640 PHY IC 中的内部振荡器电路来生成时钟。

    现在、如果您验证您的原理图、您使用的是晶体、而不是振荡器源?

    这不同于我们在晶振电路中讨论的电源及其连接方式。

    DP83640 PHY 数据表中的晶体无法在 RMII 从模式下连接、我们只能连接可生成50MHz 时钟的振荡器源。 这是因为 PHY 中的内部振荡器电路不能从晶体生成50MHz 时钟。

    正如您看到的提到仅针对 RMII 主模式的同一产品说明书所述、我们可以使用晶体或振荡器源、也可以使用其中的任何一种。 但他们没有提到 RMII 从设备的晶体或振荡器源。 因此、在 RMII 从模式中、我们必须使用振荡器源而不是晶体。

    您可以获得 PHY 寄存器值、因为 MDIO 不依赖于上述时钟、但如果您使用50MHz 晶体、RMII 通信将不起作用。

    ——
    谢谢、此致、
    Jagadish。

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

    尊敬的 Jagadish:

    您能否确认您提供的是晶体源还是振荡器源?

    =》好的、我明白你的意思。 我将请硬件工程师再次确认该问题。

    非常感谢!

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

    你好、 Jagadish

    您能否确认您提供的是晶体源还是振荡器源?

    =》μ s、这是一个振荡器。

    和 PHY 可以在 CLK_OUT (引脚24)上输出25M 的时钟。

    谢谢!

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

    尊敬的彭荣奎:

    这是振荡器。

    但在您的原理图中、我没有看到任何振荡器。 我只能看到晶振。

    [报价用户 id="611604" url="~/support/interface-group/interface/f/interface-forum/1380948/dp83640-freertos-plus-udp-project-help---rm46l852/5318755 #5318755"]并且 PHY 可在 CLK_OUT (PIN 24)输出25M 的时钟。[/QUOT]

    您可以直接测量 X1引脚上的时钟而不是 CLK_OUT 吗? 如果您使用50MHz 振荡器源、那么我们应该在 X1引脚上获得相同的时钟。

    如果这是 X1上的50MHz 时钟、那么我们的以太网通信应该可以正常工作、如果是25MHz、那么我们应该需要更换50MHz 振荡器源。

    ——
    谢谢、此致、
    Jagadish。

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

    你好、 Jagadish

       我使用示波器测量 X1和 X2的时钟信号均为50m。

    谢谢!

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

    尊敬的彭荣奎:

    [报价 userid="611604" url="~/support/interface-group/interface/f/interface-forum/1380948/dp83640-freertos-plus-udp-project-help---rm46l852/5318887 #5318887"]   我使用示波器测得的 X1和 X2的时钟信号均为50m。

    那么没关系。

    我还验证了您的引脚多路复用设置、它们也看起来不错。

    我的建议是、不要直接尝试基于 FreeRTOS 的 UDP 示例。 我建议先尝试 HALCoGen 中的 EMAC 环回示例:

    在这里、您可以找到实现此示例的分步过程和代码:

    上面的示例成功执行后、您可以执行下面的 LwIP 演示。

    如果上述示例也成功执行、我们可以尝试使用 FreeRTOS UDP 代码。

    ——
    谢谢、此致、
    Jagadish。

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

    你好、 Jagadish

       EMAC 环回演示效果良好。 但 LwIP 演示运行异常、MAC 没有向 PHY 输出任何信息。

    谢谢!

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

    您好、荣鹏

    尝试导入项目时出错:

    请重新附上。

    ——
    谢谢、此致、
    Jagadish。

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

    你好、 Jagadish

    请按照以下步骤重试

    谢谢!

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

    尊敬的 Rongpeng:

    我发现您的项目有一个问题:

    我认为您在这里需要更改数据的顺序、

    因为、如果您验证 lwIPInit 函数的定义、它们  将假设 ipaddr、netmask 和 gwAddr 字节的顺序相反(因为小端字节序设备)、这就是它们更改以下突出显示行中这些地址的顺序的原因:

    您可以在此处看到、我们键入转换2字节数组并向右发送、因此在调用  lwIPInit 函数时、字节顺序将是 LSB 在前、MSB 在最后。

    这就是它们互换 lwip 函数定义中的字节的原因。

    因此、请在传输到该功能之前更改字节顺序、如下所示:

    或者,不要调用 htonl 函数的 IP 地址,因为你已经以正确的顺序发送它们:

    ——
    谢谢、此致、
    Jagadish。

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

    你好、 Jagadish

       感谢您的提醒。

    以下是更改后的日志:

    但在官方例程中使用 IPADDR_USE_DHCP、但由于我使用 IPADDR_USE_DHCP 来分配 IP、代码将在 hdkif_transmit 中停止、如下面的屏幕截图所示

    因此、我只能选择使用静态 IP 地址运行程序。 我已尝试将该器件用作客户端或服务器、但 MAC 到 PHY 仍然没有数据输出。

    谢谢!

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

    尊敬的 Rongpeng:

    以下是更改后的日志:

    这些日志看起来正常。

    如何处理这些日志? 它们是由静态 IP 造成的吗?

    另外、您是否可以尝试将以下 DHCP 尝试"计数"值从10增加到100

    ——
    谢谢、此致、
    Jagadish。

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

    你好、 Jagadish

       如何处理这些日志? 它们是由静态 IP 造成的吗? =>是、它们是静态 IP 造成的。

    对于 IPADDR_USE_DHCP 模式、无论我将"count"更改为100还是1000、其性能都是相同的。 在 hdkif_transmit 函数中停在这里

    /* TODO:(这是一种权变措施)等待 EOQ 位被设置*/
       while (EMAC_BUF_DESC_EOQ!=(hdkif_switze_data (CURR_BD->flags_pktlen)和 EMAC_BUF_DESC_EOQ));

    谢谢!

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

    尊敬的 Rongpeng:

    这与我们的问题一样:

    (+) TMS570LS3137:具有最低 LwIP 和 MII 开关的 TMS570LS3137PGE -基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    有可能尝试此处提供的权变措施吗?

    ——
    谢谢、此致、
    Jagadish。