ZYNQ的PS外挂88E1111千兆网PHY电路及驱动程序详解

如果电路确认使用88E1111作为千兆网PHY芯片,首先要学习芯片手册,确定电路形式。ZYNQ 的PS端千兆网控制器使用RGMII 接口,与PHY互联如下图。

PS端两个千兆网控制器管脚分配见UG585,如下图Ethernet0 管脚分配MIO16~MIO27,管脚是固定的。

实际电路如下图:

除了与ZYNQ的通信接口,88E1111的CONFIG如果通过电路提前配置好的话,软件调试起来会很简单,如下表是配置管脚的含义。

下图是CONFIG的硬件电路。

不看手册的话无法理解CONFIG管脚代表什么数值,下表是88E1111的管脚数值含义。对照上面的电路图,如P1_CONFIG4接的LED_DUPLEX则代表P1_CONFIG4的值是011,再查手册Table34即HWCFG_MODE[2:0]=011。而P1_CONFIG5接的电源,即P1_CONFIG5的值是111,则HWCFG_MODE[3]=1,这样HWCFG_MODE[3:0]=1011。

HWCFG_MODE[3:0]是配置88E1111的模式,如下表1011代表RGMII to Copper,正是ZYNQ的PS端需要的模式配置。CONFIG其它管脚如地址配置可以直接参考以上电路,电路如此设置驱动程序改动最小。

电路设计好后,拿到板子就要调试千兆网的驱动了。我的开发环境是VIVADO2018.3,调试时先找一个最简单的程序把硬件电路测试通过,再测试自己的应用程序。以各个厂家ZYNQ开发板的PS端第一个例程Hello World开始为例,PL端参照例程做配置,Block Design如下图。

ZYNQ IP核的配置除了参照Hello例程的基础配置,千兆网配置如下图,一是管脚对应上电路,二是电平对应上电路。

按照例程进行Block连线、Create HDL Wrapper、Generate Output Products,然后Export Hardware,千兆网测试不需要 PL 参与,不用包括“Include bitstream”,Launch SDK后在SDK端开始设计测试程序。

SDK加载完硬件后,新建一个千兆网测试工程,如下图可以选择lwIP TCP Perf Client或lwIP UDP Perf Client以及其它lwIP的模板,此处以UDP客户端为例。

XILINX的LWIP默认支持TI、Marvell和Realtek三个品牌的PHY 驱动,一般情况下程序不用做任何修改,网络就可以连通。我们首先分析一下模板程序的执行过程,这样才能通过网络抓包查看程序是否正确运行。

自动生成的UDP客户端模板程序main函数在进行了一系列初始化后,进入start_application函数如下图,UDP虽然是无连接的,但是协议栈运行时也是建立一个udp Client然后connect remote_addr地址的UDP_CONN_PORT端口,从函数里可以看到remote_addr绑定的是UDP_SERVER_IP_ADDRESS,查看宏定义可以找到我们的上位机目标地址是192.168.1.100目标端口是5001如图。函数里同时对要发送的数据进行了初始化,‘0’字符的assicII码是0x30,因此send_buf在0x30-0x39循环变化,长度为UDP_SEND_BUFSIZE(宏定义1440)。

start_application函数处理完后进入了主循环中如下图,在transfer_data函数里循环发送数据,进入函数我们看到实际发送数据的函数是udp_packet_send。

进入udp_packet_send函数,我们看到分配了UDP_SEND_BUFSIZE长度的pbuf并且将send_buf的数据赋值给了payload如图,赋值后我们又发现payload[0]即每包的起始四个字节再次赋值为packet_id发送包计数,而函数末尾每发送完成一次packet_id加1。

程序运行效果如图wireshark抓包软件的数据,lwIP UDP Perf Client模板程序建立了两个客户端端口49153和49154,两个端口发送数据一样。

下图是第一包和第二包的数据,我们看到包计数是0和1(覆盖了send_buf的前四字节0x30-0x33),第五字节是0x34,到0x39后是新的一个循环0x30-0x39。

如果程序运行后,没有数据通信,或者ping不通时,我们就要考虑PHY驱动了,不同的主控制器可能会需要调整一部分驱动程序。我使用的ZYNQ PS加88E1111的千兆网正好就是示例模板无法通信的例子。模板程序下载后,LED_LINK1000的指示灯正常点亮,电路如图

从手册看LED_LINK1000管脚输出低,指示千兆网1000BASE模式已经成功Link Up。但是用命令ping 192.168.1.10(模板程序的板卡IP地址)始终ping不通,网络抓包也无任何数据。

下面就需要我们一步一步找到最终的PHY驱动部分,以便网络不通时进行适配修改。见续篇。

  • 31
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值