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.

[参考译文] TMS320F28388D:无法获取"enet_lwip"运行示例

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/956874/tms320f28388d-cannot-get-enet_lwip-example-to-run

器件型号:TMS320F28388D
主题中讨论的其他器件:C2000WARE

尊敬的 TI 支持团队:

我将 C2000Ware_3_03_00_00中的"cm_common_config_C28x"和"enet_lwip"导入到了 CCS 中。
然后、我通过预定义的符号在"cm_common_config_C28x"项目中设置以下宏:
-以太网
- USE_20MHz_XTAL (我的 controlCARD 为修订版 MCU063A-)
由于我的 LAN 位于192.168.11.x 上、我在"enet_lwip"中设置
  无符号长整型 ipaddr = 0xC0A80B20;
我还更改了2838x_flash_lnk_cm_lwip.cmd 中的以下行
.const          :> SRAM
更改为
.const          :> CMBANK0_SECTOR0
接下来、我为闪存编译两个项目并对两个内核进行编程。
 
遗憾的是、CM 不响应 ping 192.168.11.32
我的以太网电缆已插入卡背面的单个连接器。

controlCARD 上是否需要任何硬件配置?

有关如何进行调试的其他建议吗?

谢谢、
心搏

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

    您好、

    以太网的 DMA 无法访问闪存扇区。 如果不将.const SRAM 更改为 CMBANK0_Sector、它是否起作用? 为了使其独立工作、您可以执行类似的操作。 从闪存加载 const、在以太网初始化之前将其复制到主函数中的 SRAM。

    链接器命令更改:

    const:{} load = CMBANK0_SECTOR0 | CMBANK0_SECTOR1、
    run = SRAM、
    Load_start (constLoadStart)、
    load_size (constLoadSize)、
    Load_End (constLoadEnd)、
    RUN_START (constRunStart)、
    run_size (constRunSize)、
    RUN_END (constRunEnd)

    主函数添加:

    memcpy (&constRunStart、&constLoadStart、(size_t)&constLoadSize);

    谢谢、

    Yashwant

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

    您好、Yashwant、

    感谢您的快速回答和解释。

    我尝试了您的修改、但仍然无法 ping 通 CM。 让我进一步调查并向您提供更多信息。

    同时、您能否给我一个文档、说明您的端口支持 lwip 的哪些部分。 例如、我在代码中看到以下注释:"当前实施仅适用于静态 IP 地址。"

    此致、

    心搏

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

    您好、Yashwant、

    今天晚上我又尝试了一些,但没有成功。

    您是否能够作为独立应用从闪存运行演示、或者您是否始终通过 CCS 加载/调试?

    谢谢、

    心搏

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

    您好、

    我们目前仅通过 JTAG (调试)对其进行了测试。 对于未来版本、我们将测试独立模式。

    您是否也使用了 cm_common_config_C28x 中的闪存配置? 因为需要从闪存更新 CM 的引导模式。

    谢谢、

    Yashwant

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

    Yashwant、

    是的、定义了"_flash"。 "cm_common_config_c28"也错过了主函数末尾的无限循环、我添加了该循环。

    我怀疑问题出在 CM 侧。 可能是器件初始化(闪存、外设时钟、看门狗?) 在没有 CCS 配置的情况下启动时。

    您认为何时可以发布更新的版本?

    此外、您对此是否有任何反馈:

    同时、您能否给我一个文档、说明您的端口支持 lwip 的哪些部分。 例如、我在代码中看到以下注释:"当前实施仅适用于静态 IP 地址。"

    谢谢、

    心搏

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

    您好、

    是否可以确认您正在使用最新的 C2000Ware?

    此致、

    Vivek Singh

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

    您好、Vivek、

    肯定: C2000Ware_3_03_00_00

    谢谢、

    心搏

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

    您好、

    这些是已针对独立模式进行测试的最新文件。 您能否尝试使用新的更新。

    关于 lwip 支持、注释显而易见。  

    e2e.ti.com/.../5556.f2838xif.c

    e2e.ti.com/.../3731.enet_5F00_lwip.ce2e.ti.com/.../2352.startup_5F00_ccs.c

    e2e.ti.com/.../2838x_5F00_flash_5F00_lnk_5F00_cm_5F00_lwip_5F00_cmd.txt

    谢谢、

    Yashwant

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

    Yashwant、

    我是否需要为此更新的 driverlib_cm?

    似乎找不到"Ethnet_disableDmaInterrupt"和"Ethnet_enableMTLInterrupt"函数。

    此外、您希望我在哪里寻找这些"显而易见"的评论?

    此致、

    心搏

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

    心搏、

    您可以在 enet_lwip.c 文件中定义以下函数。 这些计划在下一版中提供。

    void Ethernet_disableDmaInterrupt (
    uint32_t base、
    uint32_t 通道数量、
    uint32_t 标志)

    HWREG (基址+(通道数* Ethernet_channel_offset)+
    EtherNet_O_DMA_CH0_INTERRUPT_ENABLE)和=~标志;

    void Ethernet_enableMTLInterrupt (
    uint32_t base、
    uint32_t queueNum、
    uint32_t 标志)

    HWREG (基址+(queueNum * Ethernet_queue_offset)+
    EtherNet_O_MTL_Q0_INTERRUPT_CONTROL_STATUS)|=标志;

    谢谢、

    Yashwant

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

    Yashwant、

    您希望我在哪里查找这些"显而易见"的评论?

    谢谢、

    心搏

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

    心搏、

    有关启用的协议、请参阅 位于 C2000Ware_3_03_00_00\libraries\communications\ethernet/third_party/lwip\examples\enet_lwip\cm 的 Readme.txt 。

    要尝试其他功能、请查看 lwipopts.h 文件中的定义。

    谢谢、

    Yashwant

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

    Yashwant、

    我还尝试获取 lwip 示例、以便在具有 C2000Ware_3_03_00_00的 TMS320F28388D 评估板上独立运行(从闪存)。

    我遵循了您的最新笔记:

    替换了文件(5556.f2838xif.c、3731.enet_lwip.c、2352.startup_ccs.c、2838x_flash_lnk_cm_lwip_cmd.txt)。

    2.添加了函数(Ethernet_disableDmaInterrupt、 Ethernet_enableMTLInterrupt)。

    通过这些修改,我可以从闪存中运行程序(也可以在关闭电源后运行,没有 CCS),但我仍然有一些问题。

    当从 CCS (通过 JTAG)运行时、程序完全正常运行、但当在下电上电后从闪存运行时、连接不稳定。

    特别是,如果我按下 Web 服务器上的按钮“getDataFromServer”,应答将延迟(2-5秒),这会导致 ping 在该时间内失败。 当我从 CCS 运行时、来自服务器的答案是立即的(服务器立即发送更新的数字)、并且 ping 永远不会丢失。

    如果我只是对电路板执行 Ping 操作、从 CCS 运行时、它绝不会错过 Ping 操作、但当从闪存运行一次时、Ping 操作会丢失(在~20秒内执行一次)

    有什么想法为什么?

    谢谢、

    帝汶

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

    东帝汶

    当您从 CCS 运行时、您使用的是 RAM 配置还是闪存配置?

    在将器件复位以进行下电上电时、请在断开以太网电缆后尝试执行此操作、然后将其复位并重新连接。  

    来缩小问题范围。  

    此致、

    Yashwant  

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

    我正在使用闪存配置。

    我尝试在电缆断开的情况下重置。 没有区别。

    P.S.我的笔记本电脑直接连接到电路板。 之间没有以太网交换机。

    还有事要检查吗?

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

    我假设您已对最新源文件进行以下更新:

    1) 1)链接器 cmd 文件更改从闪存加载并从 RAM 运行的.const 子段。

    2) 2)向矢量表添加了 STARTUP_CCS 通用以太网中断函数。

    3) 3) enet_lwip.c 添加了 cm_init、将闪存段复制到 RAM 以运行。 通用以太网中断功能的定义。

    此致、

    Yashwant

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

    是的、我正在使用所有这些更新。 如果没有这些更新、该程序根本不会单独运行。

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

    小更新:

    我不认为这是问题的原因、但我认为 在您发送的示例中 lwIPTimer 没有正确触发。

    在 SysTickIntHandler 中、它使用 lwIPTimer (SysTick PeriodValue)调用、而 SysTick PeriodValue=15000000。

    lwIPTimer 的调用应具有从最后一次调用传递的毫秒值。

    我进行了以下更改:

    1. sysstickPeriodValue=1250000

    2.在 SysTickIntHandler 中:lwIPTimer(100);

    这会每隔100ms 更新一次 lwip 计时器

    似乎没有什么帮助、但可能是它的一大优势...

    此外、我还将 Ethernet_NO_of RX_packets 从2U 更改为5U。 这有助于解决一点问题。

    当独立运行与连接调试器(来自 CCS)运行时、看起来运行速度非常慢。 这会导致处理请求的速度非常慢、因此响应会延迟、ping 会丢失。 我可以说、它不是主时钟、因为我添加了 LED 闪烁(CPU1和 CM)、并且闪烁速率在独立时和 CCS 之间不会改变。

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

    我们正在调查此问题、一旦我们有潜在客户、我们将向您提供最新信息。

    此致、

    Yashwant

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

    你(们)好 有任何进展吗?

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

    您好帝汶、

    我尝试重新创建问题、但未成功。 在我的一侧、ping 和 getDataFromWebServer 在独立(闪存)模式下工作正常。  

    在所附图像中、您可以看到按钮点击了345次、同时还有 ICMP 请求。

    您的应用程序中是否有任何其他中断服务例程?

    您还可以尝试向应用程序添加 VLAN 以限制传输到设备的数据包。 您可以在 e2e 中搜索有关 VLAN 的疑问。

    此致、

    Yashwant