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函数。修改完后结果发现,能在断开后连接正常了,欣喜若狂,特此记录一下。准备周末运行两天,看看是否会出现错误。
附录例程

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值