在程序运行的过程中拔掉网线,然后等待几分钟后重新插上,用电脑ping板子会ping不通,重新运行一遍程序之后网络才会恢复正常,但是我使用 NC_NetStop(1);重启NDK网络协议栈之后网络会卡在emac_open函数里面,感觉像是资源没有释放,同时观测eamcstatus寄存器值为00000018.我现在想解决这个问题,实现网线热插拔的功能。使用的各种插件为NDK2.21.2.43,pdk_C6657_1_1_2_6,使用的是基于mcsdk中helloworld的例程修改的网络程序。
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.
在程序运行的过程中拔掉网线,然后等待几分钟后重新插上,用电脑ping板子会ping不通,重新运行一遍程序之后网络才会恢复正常,但是我使用 NC_NetStop(1);重启NDK网络协议栈之后网络会卡在emac_open函数里面,感觉像是资源没有释放,同时观测eamcstatus寄存器值为00000018.我现在想解决这个问题,实现网线热插拔的功能。使用的各种插件为NDK2.21.2.43,pdk_C6657_1_1_2_6,使用的是基于mcsdk中helloworld的例程修改的网络程序。
MCSDK比较老了,请尝试使用最新的processor SDK里的NDK。
https://www.ti.com/tool/download/PROCESSOR-SDK-RTOS-C665X
你好感谢你的回复,我使用最新的rtospdk,编译生成测试例程后在ccs9.2上面成功实现热插拔功能,然后由于限制,只能在ccs5.5上编写我的工程,然后经过二者对比发现和pdk_C6657_1_1_2_6相比,在EMAC_commonInit中将0x02c08160寄存器配置成了000000A1,就能实现网线热插拔,pdk_C6657_1_1_2_6配置的参数是000400A1,这个寄存器是·MAC Control Register (MAC_CONTROL)第18位,
| EXT_EN |
| Control Enable. Enables the fullduplex and gigabit mode to be selected from the FULLDUPLEX_IN and GIG_IN input signals and not from the FULLDUPLEX and GIG bits in this register. The FULLDUPLEX_MODE bit reflects the actual fullduplex mode selected. |
暂时不清楚为什么导致这样,但是只需要在NC_NetStart启动的NetworkOpen()第一行将寄存器写入值为0x000000A1就能实现网线热插拔。
这个问题困扰了我很久,有一个月时间,希望能给后来的开发者提供一些帮助。