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.

[参考译文] TMS570LC4357:lpIP - HALCOGEN 驱动程序初始化问题

Guru**** 2942040 points

Other Parts Discussed in Thread: HALCOGEN, DP83640, TMS570LC4357

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/907979/tms570lc4357-lpip---halcogen-driver-initialisation-issue

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGENDP83640


目前、我们编写了一个在上运行的应用程序
(Hercules TMS570LC43x 开发套件板)使用协议栈 lwIP
和 HALCOGEN 驱动程序。

到目前为止、我们的测试程序工作正常、可以发送(Tx)或接收(Rx)突发
UDP-ICMP 数据包、不会出现任何问题。

但是、我们遇到了一个烦人的问题。 驱动程序初始化之后
相位、我们需要在开始第一次传输之前添加等待延迟(1秒)。

如果没有延迟、则发送前2或3帧(一个接一个地发送)
迷失在某个地方...

在驱动器 Tx 侧(输出)上跟踪此问题后、我们可以看到所有的帧(从1到 N)都被发送
通过驱动器正常方式;DMA 传输开始(通过设置 TX HDP 寄存器)、
TX 中断处理程序被调用、最后 ACK 中断。 所有请求采用相同的模式。

但是、如果我们检查电缆上栅栏的另一侧(使用 Wireshark)
我们看不到第一个帧的任何传输。

我们发现了一个解决此问题的方法、即增加1秒的等待延迟
驱动程序初始化和传输之间的时间(可能更短)
第一帧。 通过此修复、所有传输都会发生、不会丢失任何东西、我们可以看到所有
在网络上发送的帧。

问题:

1.我们是否可以考虑驱动程序初始化后链接处于"稳定状态"?
   (我已经看到、在过去、速度变化需要100ms  
   稳定)


在 hdkif.c 驱动器前端的 hardware_init 中、有一个点
   以下函数在初始化代码中调用

  MDIOPhyRegRead (mdioBaseAddr、phyAddr、(uint32) PHY_BSR、链接状态);

   后跟

L inkStatus =(uint16) MDIOPhyLinkStatusGet (mdioBaseAddr);

  实际上、在速度成功自动关联之前调用它们
 (100Mbps -全双工)。 自动关联后、不检查 PHY 链路是否就绪
 状态..

我们需要在 DP83640 PHY (或 EMAC)上检查哪个寄存器才能获得 链接
   按应用程序列出的完全功能状态。


此致、


Yvon 电气

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

    Yvon、您好!

    如果您在 TX ISR 中注释 EMACCoreIntAck (hdkif->EMAC_BASE、EMAC_INT_CORE0_RX)和 在 RX ISR 中注释 EMACCoreIntAck (hdkif->EMAC_BASE、EMAC_INT_CORE0_TX)、LWIP 项目是否起作用?

    我的理解是、将 C0RX 密钥或 C0TX 密钥写入 MACEOIVECTOR 就足够了。

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

    到目前为止、在这两种情况下都可以正常工作(未注释)。

    在 Tx/Rx 中流量非常高的情况下、我想知道在处理 Tx 中断时是否会发生这种情况

    (或 Rx 中断)我想知道处理程序是否可以通过某种方式过早地"终止"(或终止)

    其他处理程序的事务处理。 这可能会导致去同步

    驱动程序 EMAC 逻辑中的描述符序列处理和数据包丢失。

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


    一个多星期后、我意识到我没有得到任何问题的答案:


    TMS570LC4357:LPIP - Halcogen 驱动程序初始化问题。


    这个问题描述了我们必须在驱动程序初始化后延迟(1秒)才能获得
    所有第一个数据包都 正确发送、并且不会丢失这些数据包。


    在您看来、此问题可能与另一个问题(事实上是一个问题)混淆在一起  
    我在同一天打开、

    TMS570LC4357:清除 TMS570LC43驱动程序的 Tx/Rx 中断(kdkkif.c 处理程序)

    第二个问题上周已得到解决。

    因此、您能否重新打开第一个问题。


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

    Yvon、您好!

     调用 hdkif_link_setup()以设置自动协商。 在该函数中、添加了一个延迟、以便 MII 稳定下来。

    并行检测和自动协商大约需要2-3秒才能完成。  

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

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


    我发现"稳定"延迟如下所示。

    静态 ERR_t hdkif_link_setup (struct hdkif * hdkif)

      volatile unsigned int delay = 0xFFFFFFF;

     (笑声)

      Dp83640自动协商(…) ;

     (笑声)

     /*等待 MII 稳定*/

      同时(延迟–);

    问题;

    1.-此延迟是否保证 EMAC - PHY 已启动并运行(同步)、或者我必须重新调整该值
       如有必要(我们使用的是硬 RTOS)。

    2.-如果我们不使用自动定位,但使用固定速度,我们是否仍需要此延迟?  

    我之所以对该问题提出挑剔、是因为我们正在运行 Avionic 应用程序
    时间、可预测性和确定性是强制性的。  

    此致

    Yvon 电气

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

    Yvon、您好!

    否 用户应检查 基本模式状态寄存器(BMSR)、以确保自协商完成、并且建立了有效链路。 HALCOGen 生成的代码会检查 BMSR 的预定义次数。 您需要根据设置调整尝试次数。

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

    感谢您的回答。 我意识到、在我的设置中、HCLK 时钟被设置为300MHz、但在中
    演示该值设置为150MHz。 EMAC 稳定时间环路(while (delay---)和 PHY BMSR
    自动关联循环可以根据多次尝试而停止、它不是完全的 sff (确定性)代码。

    您的下 一版本驱动程序代码应包含一些增强功能。

    此致、

    Yvon 电气