ZYNQ FreeRTOS使用双网口笔记与爬坑

正点原子领航者7020的开发板上有两个网口,想着用起来。上面一个是PS网口,一个是外挂在PL网口。
使用vitis版本为2019.2
PL网口通过emio挂载在网络控制器1上,PS网口挂载在网络控制器0上。配置串口0。

踩坑1:在vivado里面单独配置网络0或者网络1, 都能够ping通,但是两个都配置,通过vitis生成tcp client的例程,初始化的时候在xemac_add函数里面,选择 XPAR_XEMACPS_0_BASEADDR ,能ping通PS网口。

xemac_add(&psNet0_netif, NULL, NULL, NULL, mac_ethernet0_address, XPAR_XEMACPS_0_BASEADDR)

初始化的时候在xemac_add函数里面,选择 XPAR_XEMACPS_1_BASEADDR ,不能ping通PL网口。

经过检查和分析,发现生成的代码,在\ZYNQ_PLPS_wrapper\ps7_cortexa9_0\freertos10_xilinx_domain\bsp\ps7_cortexa9_0\include\xparameters.h文件里面,没有宏定义

#define XPAR_GMII2RGMIICON_0N_ETH1_ADDR      8

需要手动添加该宏定义, 此处参考大佬的文章,因为我也是用的地址8,所以宏定义也是8.
设置完后,即可ping通两个网口。

踩坑2:修改export里面的没有用。

踩坑3:开始使用裸机编写,参考大佬文章,因为时间问题,到最后也没有解决裸机情况下双网口的使用。还是谢谢大佬提供了思路

踩坑4:使用了FreeRTOS, vitis生成的tcp client代码,手动修改,新建线程,发现在不改动底层的情况下,两个网口都能够正常的建立连接,数据收发都是分开的,但是此时,不能断开连接,断开连接后,重新连接,会以最后一个初始化的网口作为连接端口,而链接了两个同样的IP(端口不同)。
于是想起了胡杨大佬的,修改底层ip4_route函数。修改完后结果发现,能在断开后连接正常了,欣喜若狂,特此记录一下。准备周末运行两天,看看是否会出现错误。
附录例程

你可能感兴趣的:(ZYNQ,网络)