Other Parts Discussed in Thread: HALCOGEN, DP83640, TMS570LC4357
主题中讨论的其他器件:HALCOGEN、 DP83640、
目前、我们编写了一个在上运行的应用程序
(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 电气