原理图设计:
程序:
CBM-TEST-CODE-网络通信
调试环境:
主控板与网口插座板通过双排线连接,串口连电脑串口调试助手。
路由器连接网线(可以是校园网,宿舍或者实验室网口引线),然后板卡网口与路由器通过网线连接(这种方式主要针对于使用了没有网口的笔记本电脑),笔记本电脑连接路由器WiFi,这样电脑与板卡就建立了连接。
上电前将网线插上板卡,初始化过程通过串口调试助手显示:
LwIP Init主要包括LAN8720A初始化、网卡初始化,其次是DHCP分配,如果前面这几部都成功,板卡会得到由路由器DHCP分配的一个IP地址和端口;得到IP之后,可以先在电脑上Ping一下该IP,如果可以Ping通,基本上网络连接已经建立。接下来在笔记本电脑上打开网络调试助手,以电脑作为TCP Client,板卡作为TCP Server为例,本程序通过串口调试助手发送1,设置板卡进入TCP Server Test,然后网口调试助手代表电脑,设置为TCP Client模式,远程主机地址和端口即板卡IP和端口,启动后即可建立连接:
RJ45LED指示,绿灯常亮,代表自动协商结果为网速100M,黄灯闪烁,代表链路接通的网络活动状态。
调试过程中主要出现的问题:
1. LAN8720A初始化不成功:
本调试程序在正点原子例程的基础上修改而来,一开始调试时LwIP一直都可以成功,并且可以显示自动协商得到的网速,因此我一直以为芯片初始化是没有问题的,但DHCP却一直超时,后边网上搜发现程序中判断初始化成功的逻辑有些弱,最好直接读LAN8720A寄存器的值,如果读出来是0x0000或者0xFFFF则说明芯片并没有正常工作。读寄存器之后,果然都是0xFFFF,说明芯片这部分有问题,于是重新检查LAN8720A各个管脚状态,发现复位管脚的高电平没拉上去,只有不到1V,这会使得芯片不断处于复位状态,而这个高电平是主控的IO控制三极管开关产生的,再往前查看主控IO状态,高电平也是没有拉上去,结合调试经验,应该是该管脚驱动能力不足,导致三极管不能正常输出,于是将串联电阻R9阻值由0Ω更换为100K,然后高电平输出正常,再去读芯片寄存器值,都与开发板相同,基本可判断这部分没啥问题了。
2. RJ45部分电路有错
选用的封装不一样了,引脚顺序有所改变,因此刚开始出现了短路和网口LED不亮等情况。
本实验中RJ45采用了直插式HR915310A,引脚顺序与常见的卧插式HR911105A有所不同,其原理图对比如下:
左图为HR911105A,右图为HR915310A,原理图设计时需注意引脚变化。