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.

[参考译文] RM48L952:lwIP 集成问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/707736/rm48l952-problems-with-lwip-integration

器件型号:RM48L952
主题中讨论的其他器件:HALCOGENDP83640TMDSRM48HDK

您好!

我需要在 IAR 嵌入式工作平台中开发的项目中集成 lwIP。

我从 RM48 HDK (processors.wiki.ti.com/.../HALCoGen_Ethernet_Driver_and_lwIP_Integration_Demonstration)上的 LWIP Web 服务器代码示例开始、在使用 Code Composer Studio 时工作正常。  我创建了一个新的 IAR 项目、导入示例的文件并为 IAR 系统配置 HALCoGen。 我找不到构建错误、但该示例不运行。 是否有人在 IAR 中开发了相同的示例?

谢谢。

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

    该演示只是一个示例、未在 IAR Workbench 上进行测试。 代码在哪里挂起、sys_start.c、lwip 驱动程序、ISR 或异常矢量?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我采用了 lwIP_Demo_v03、并执行了三个测试、仅更改了 lwip_main.c 和 lwipopts.h:

    1.动态 IP 地址,DHCP (原始代码)
    在 lwip_main.c 中
    ipaddr = lwIPInit (0、macAddress、0、0、0、 ipaddr_use_dhcp);
    网址为 lwipopts.h
    #define LWIP_DHCP 1

    测试结果:
    Hercules 微控制器
    应用工程师
    小端字节序器件
    初始化以太网(DHCP)
    调试-获取 PHY ID ...成功
    调试-使 PHY 处于活动状态...成功
    调试-获取 PHY 链路状态...成功
    调试-设置链接...成功
    已完成
    ---- 初始化硬件时出错---

    2.动态 IP 地址,无 DHCP
    在 lwip_main.c 中
    ipaddr = lwIPInit (0、macAddress、0、0、0、 ipaddr_use_dhcp);
    网址为 lwipopts.h
    #define LWIP_DHCP 0

    测试结果:
    Hercules 微控制器
    应用工程师
    小端字节序器件
    初始化以太网(DHCP)
    调试-获取 PHY ID ...成功
    调试-使 PHY 处于活动状态...成功
    调试-获取 PHY 链路状态...成功
    调试-设置链接...成功
    已完成
    ---- 初始化硬件时出错---

    3.静态 IP 地址,无 DHCP
    在 lwip_main.c 中
    uint8 ip_addr[4]={192、168、2、44};
    uint8网络掩码[4]={255、255、252、0};
    uint8 gateway[4]={192、168、2、254};
    ipaddr = lwIPInit (0、macAddress、
    *(((uint32_t *) ip_addr)、
    *((uint32_t *)网络掩码)、
    *(((uint32_t *)网关)、
    ipaddr_use_static);
    网址为 lwipopts.h
    #define LWIP_DHCP 0

    测试结果:
    Hercules 微控制器
    应用工程师
    小端字节序器件
    初始化以太网(DHCP)
    调试-获取 PHY ID ...成功
    调试-使 PHY 处于活动状态...成功
    调试-获取 PHY 链路状态...成功
    调试-设置链接...成功
    已完成

    Hercules 微控制器
    应用工程师
    小端字节序器件
    设备 IP 地址:192.168.2.44
    可访问 Web 服务器@ http:\\192.168.2.44

    但是、如果我尝试 ping IP、则无法实现目标主机。

    相同的三项测试均在 CCS 中成功。

    我是否可以尝试其他测试?

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

    我找到了问题。 IAR 项目的字节序设置中存在错误。 现在、我在同一示例中面临另一个问题。
    我在 Halcogen/PINMUX 中设置 RMII 而不是 MII、因为我需要使用此配置、现在我在 CCS 和 IAR 中都遇到了相同的问题:

    1.动态 IP 地址,DHCP (原始代码)
    测试结果:
    Hercules 微控制器
    应用工程师
    小端字节序器件
    初始化以太网(DHCP)
    调试-获取 PHY ID ...成功
    调试-使 PHY 处于活动状态...成功
    调试-获取 PHY 链路状态...成功
    调试-设置链接...成功
    已完成
    ---- 初始化硬件时出错---

    2.静态 IP 地址,无 DHCP
    测试结果:串行上没有错误,但如果我尝试 ping IP,则无法到达目标主机。

    我还添加了示例链接页面中报告的补丁、但没有任何变化。
    我是否缺少一些设置?

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

    默认硬件设置为 MII。 如果要使用 RMII、应对 HDK 进行两次硬件更改:

    1.将 Y3替换为50MHz 振荡器。 MII 需要25MHz OSC、但 RMII 需要50MHz。
    2.组装 R193 (10k Ω)以将 RX_DV (DP83640的引脚39)拉至高电平
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我没有所需的振荡器、我将购买它并尝试。 但是、RMII 是否需要50MHz 振荡器是与特定 DP83640驱动器相关的要求、还是通常是强制性要求? 因为我的目的是将示例调整为不同的物理层。

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

    RMII 模式需要该模式。 DP83640需要遵循这些标准的要求。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    尽管发生了这些变化、但问题仍然存在:

    硬件:TMDSRM48HDK、J-LINK

    开发环境:Code Composer Studio 8.1.0、HALCoGen 04.07.00

    代码:
    带有以下补丁的 lwIP_Demo_v03:
    网址为 phy_dp83640.h
    #define PHY_ID2 (3U)
    #define PHY_AutoNeg_ADV (4U)
    #define PHY_LINK_PARTNER_ABLTY (5U)
    +#define PHY_LINK_PARTNER_SPD (10U)
    #define PHY_TXTS(28u)
    #define PHY_RXTS(29u)

    extern uint64 Dp83640GetTimeStamp (uint32 mdioBaseAddr、uint32 phyAddr、phyTimeStamp_t 类型);
    extern void Dp83640 EnableLoopback (uint32 mdioBaseAddr、uint32 phyAddr);
    extern void Dp83640 DisableLoopback (uint32 mdioBaseAddr、uint32 phyAddr);
    +extern unsigned int Dp83640PartnerSpdGet (unsigned int mdioBaseAddr、unsigned int phyAddr、unsigned short * ptnerAberty);

    在 phy_dp83640.c 中
    返回时间戳;

    *********
    +*\brief 读取 PHY 的链路合作伙伴能力寄存器。
    +*
    MDIO 模块寄存器的+*\param mdioBaseAddr 基址。
    +*\param phyAddr PHY 地址。
    +*\param ptnerAblty EMAC 的合作伙伴能力
    +*
    +*\读取后返回状态\n
    +* 如果读取成功则为 true
    +* 如果读取失败则为 false
    +**/
    +unsigned int Dp83640 PartnerSpdGet (unsigned int mdioBaseAddr、
    + unsigned int phyAddr、
    + 无符号短整型* ptnerAberty)
    +{
    +返回(MDIOPhyRegRead (mdioBaseAddr、phyAddr、PHY_LINK_PARTNER_SPD、
    + ptnerAblty);
    +}

    在 hdkif.c 中
    struct txch *txch;
    struct rxch *rxch;
    struct pbuf *p、*q;
    +无符号 short partnr_spd;

    hdkif = netif->state;
    (笑声)
    /*为通道0写入 RX HDP */
    EMACRxHdrDescPtrWrite (hdkif->EMAC_BASE、(uint32) rxch->active_head、0);
    -
    +
    + Dp83640PartnerSpdGet (hdkif->MDIO_base、hdkif->phy_addr、&partnr_spd);
    + if ((partnr_spd & 2)==0)
    + EMACRMIISpeedSet (hdkif->EMAC_BASE、(u32_t) EMAC_MACCONTROL_RMIISPEED);
    +
    EMACMIIEnable (hdkif->EMAC_BASE);

    HALCoGen 设置:与示例相同、但在 PINMUX 选项卡而不是 MII 下启用 RMII 除外。

    IP 设置(在 lwip_main.c 中)和结果:
    1.动态 IP 地址、DHCP (原始代码)和动态 IP 地址,无 DHCP
    测试结果:
    Hercules 微控制器
    应用工程师
    小端字节序器件
    初始化以太网(DHCP)
    调试-获取 PHY ID ...成功
    调试-使 PHY 处于活动状态...成功
    调试-获取 PHY 链路状态...成功
    调试-设置链接...成功
    已完成
    ---- 初始化硬件时出错---

    2.静态 IP 地址,无 DHCP 和静态 IP 地址,DHCP
    测试结果:串行上没有错误,但如果我尝试 ping IP,则无法到达目标主机。
    步骤如下:
    -运行>>调试
    -继续
    代码在 EMACCore0TxIsr 中输入一次、但在 EMACCore0RxIsr 中输入一次
    -从 Windows 10的命令提示符处 ping IP
    -代码不在 EMACCore0RxIsr 和 EMACCore0TxIsr 中输入

    我如何才能面对这个问题?

    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    除了上述帖子、我忘记提到我进行了两项硬件更改:
    1.将 Y3替换为50MHz 振荡器。
    2.组装 R193以将 RX_DV (DP83640的引脚39)拉至高电平
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否已将 HDK (位于左下角)上的 DIP 开关更改为以太网打开?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、DIP 开关更改为以太网打开。
    正如提醒的那样、当使用 MII 接口和25MHz 振荡器时、该示例运行正确。 问题仅在于 RMII、但正如我所理解的、该示例和 HDK 也应与 RMII 兼容。
    还有其他更改要做吗?
    谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Smeet:

    MII 和 RMII 的引脚毫米波配置(引脚多路复用)是不同的。 我假设您已经更改了这个。

    您还需要填充 R136

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

    这就是问题所在。 现在它正在工作。
    谢谢