用了最新版的netlib,例子只修改了IP地址,依然经常ping不通(ping不通的时候UDPSocket也是不同。通过调试,PHY变化以及包的接收是正常的)。实在对netlib绝望了,不知道哪里问题。打算用rt-thread,更绝望的是库里面不像ch32v307那样带_eth.c那个库。我想问问能否直接拿307的库来用?
更新:看了一下,应该不能直接用。但是官网上下载的1.7已经是可以稳定使用的版本么?如ETH_DMATxDescChainInit明显就只初始化一个buf。意味着ETH_TXBUFNB只能为1。
看参考手册又叫我直接看网络库的使用。描述也很少,自己弄rt-thread适配实在有难度。
您好,首先V307的库是不可以直接拿到V208使用的,建议将mounriver studio更新至最新版,如果您只是使用最新的netlib和旧版的EVT程序,您需要在ch32v20x.h中将宏修改成D8W,若您完全使用最新的EVT例程,则不需要,如图:
目前1.7版本是可以正常使用的,用rt-thread添加以太网需要进入机器模式,另外需要注意rt-thread的系统节拍不要和以太网例程中为以太网库提供时间函数产生冲突,后续可通过邮箱联系我:kx@wch.cn
在RTT用,自己搞驱动现在还不会,先不搞了。还有疑问,ETH_TXBUFNB目前只能为1,如果我程序上我连续发好几条信息,NETLIB会内部进行缓冲等空闲再发送吗?会不会丢帧?
你好,方便说一下测试的环境吗?没有ARP包的应答,很大的可能是开发板未收到ARP包。先建议将电脑的防火墙关一下再进行测试。
刚才跟电脑直连测试,能应答。之前那根网线是正常的,而且指示灯也显示正常,还能收到数据。就认为是其他问题了。还有问题就是上面的了,ETH_TXBUFNB只能为1,会不会导致发送丢帧。
您好,根据您的测试结果来看,硬件没问题(电脑、网线、开发板没问题),软件没问题(ARP这种基础功能我司都是经过长时间测试验证过的),那还是建议您从网络环境上找找原因,如果有网络分析仪,可以逐级查一下网络包的传输。
关于您的问题:
1、UDP包协议栈中是不会缓存的,TCP包受限于RAM空间也只会缓存几包。
2、如果快速发送数据,协议栈中就会对数据进行判断是否能发送成功,数据的发送状态可以从发送函数的返回值以及返回的发送数据长度来判读。您需要根据这个状态来进行数据的重传等操作。
3、硬件部分是不会丢包的,包的管理由协议栈处理。一个发送描述符是够用的,在网络环境简单的条件下,收发基本都可以跑到满速。