ZYNQ-PS端使用PL端网口-uboot配置

本文记述了在zynq7000通过emio扩展ps端网口,在vitis上通过lwIP可以连通网络,但在uboot环境下网络却不通的问题。主要报错及解决方式如下:

  • Reference to non-existent node or label "phy1":设备树添加phy1节点

  • zynq_gem ethernet@e000b000: failed to set tx clock rate 125000000:修改驱动

  • arp retry count:设置环境变量ipaddrnetmaskgatewayip

由于PL端添加了GMII2RGMII的IP核,所有uboot里也需要添加GMII2RGMII的驱动

我的BOOT.BIN里只有fsbl和u-boot,并且uboot也是由源码自行编译

单独加载比特流文件的tips:

fsbl包含PS端的硬件信息,并且承担着加载PL端比特流的任务。PS端使用PL端的网口,通过EMIO扩展需要使用PL端的逻辑电路,因此当未加载比特流文件的时候,PS端无法使用PL端的网口。

初始化函数更新

cp ${petalinux项目根目录}/project-spec/hw-description/ps7_init.c ${uboot根目录}/board/xilinx/zynq/
cp ${petalinux项目根目录}/project-spec/hw-description/ps7_init.h ${uboot根目录}/board/xilinx/zynq/

这部分操作是更新postconfig,由于我的system.bit并未打包到BOOT.BIN里,因此需要手动加载比特流文件并post config,而xilinx的uboot源码并没有这个函数,所以需要从petalinux项目里移植过来。关于postconfig的配置请见文末参考链接[1]。

驱动修改:gem0的 EMIO 时钟使用检测

参考了一篇被rejected的patch,修复了EMIO时钟设置失败的问题,详情见文末参考链接[2]。

diff --git a/drivers/clk/clk_zynq.c b/drivers/clk/clk_zynq.c
index e3cefe2e0c72..78e6886a000c 100644
--- a/drivers/clk/clk_zynq.c
+++ b/drivers/clk/clk_zynq.c
@@ -42,6 +42,8 @@
#define CLK_CTRL_DIV3X_SHIFT 20
#define CLK_CTRL_DIV3X_MASK (ZYNQ_CLK_MAXDIV << CLK_CTRL_DIV3X_SHIFT) +#define CLK_CTRL_GEM_EMIO (1u << 6)
+
DECLARE_GLOBAL_DATA_PTR; #ifndef CONFIG_SPL_BUILD
@@ -161,7 +163,7 @@ static enum zynq_clk_rclk zynq_clk_get_gem_rclk(enum zynq_clk id)
else
clk_ctrl = readl(&slcr_base->gem1_rclk_ctrl); - srcsel = (clk_ctrl & CLK_CTRL_SRCSEL_MASK) >> CLK_CTRL_SRCSEL_SHIFT;
+ srcsel = (clk_ctrl & CLK_CTRL_GEM_EMIO);
if (srcsel)
return emio_clk;
else

设备树补充:在gem0的mdio节点里补充phy1节点

reg的值是phy的物理地址


&gem0 {
phy-handle = <&phy1>;
phy-mode = "gmii";
status = "okay";
xlnx,ptp-enet-clock = <0x69f6bcb>;
ps7_ethernet_0_mdio: mdio {
#address-cells = <1>;
#size-cells = <0>;
phy1: phy1@4 {
reg = <0x4>;
device_type = "ethernet-phy";
};
gmii_to_rgmii_0: gmii_to_rgmii_0@8 {
compatible = "xlnx,gmii-to-rgmii-1.0";
phy-handle = <&phy1>;
reg = <8>;
};
}; };

如果你使用的是petalinux的uboot,在project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi里补充phy1节点即可。

GMII2RGMII驱动添加

由于PL使用了gmii2rgmii的IP核,所以uboot也要添加相应驱动,可以在make menuconfig里直接搜索路径添加,也可以直接添加到自己的config里,这里我就配置到config里。

CONFIG_PHY_XILINX_GMII2RGMII=y

参考链接

  1. Wlanxww-U-Boot 加载 Bit 文件
  2. Patch-clk: zynq: Fix EMIO clock use detection for gem0
  3. Device Tree-Xlinx GMII2RGMII converter
  4. U-Boot Error zynq_gem ethernet@e000b000: failed to set tx clock rate

ZYNQ-PS端使用PL端网口-uboot配置的更多相关文章

  1. ZYNQ笔记(1):PL端——led灯

    ZYNQ分为PS和PL,此博客实际上是FPGA中一个完整的FPGA工程的创建. PS:处理系统 (Processing System) 即ARM的Soc部分 PL:可编程逻辑(Programable ...

  2. 第十二章 ZYNQ-MIZ702 PS读写PL端BRAM

      本篇文章目的是使用Block Memory进行PS和PL的数据交互或者数据共享,通过zynq PS端的Master GP0端口向BRAM写数据,然后再通过PS端的Mater GP1把数据读出来,将 ...

  3. 第十一章 ZYNQ-MIZ701 PS读写PL端BRAM

      本篇文章目的是使用Block Memory进行PS和PL的数据交互或者数据共享,通过zynq PS端的Master GP0端口向BRAM写数据,然后再通过PS端的Mater GP1把数据读出来,将 ...

  4. ZYNQ PS端IIC接口使用-笔记

    ZYNQ7000系列FPGA的PS自带两个IIC接口,接口PIN IO可扩展为EMIO形式即将IO约束到PL端符合电平标准的IO(BANK12.BANK13.BANK34.BANK35): SDK中需 ...

  5. zedboard如何从PL端控制DDR读写(七)

    前面已经详细介绍了从PL端如何用AXI总线去控制DDR的读写,并且从AXI_BRESP的返回值来看,我们也是成功写入了的.但是没有通过别的方式来验证写入的数据的话,总是感觉差了点什么. 今天试了一把从 ...

  6. zedboard如何从PL端控制DDR读写(一)

    看了一段时间的DDR手册,感觉大体有一点了解了,想要实际上板调试,然而实验室可用的开发板不多,拿了一块zynq板看了看,DDR确实有,但是已经集成了控制器,而且控制器还放到了PS端,PL只能通过AXI ...

  7. zedboard如何从PL端控制DDR读写(五)

    有了前面的一堆铺垫.现在终于开始正式准备读写DDR了,开发环境:VIVADO2014.2 + SDK. 一.首先要想在PL端通过AXI去控制DDR,我们必须要有一个AXI master,由于是测试,就 ...

  8. zedboard如何从PL端控制DDR读写(四)

    PS-PL之间的AXI 接口分为三种:• 通用 AXI(General Purpose AXI) — 一条 32 位数据总线,适合 PL 和 PS 之间的中低速通信.接口是透传的不带缓冲.总共有四个通 ...

  9. pc端和android端应用程序测试有什么区别?(ps面试题)

    pc端和android端应用程序测试有什么区别?(ps面试题) [VIP7]大连-凭海临风(215687736) 2014/4/10 8:56:171.测试环境不同PC平台一般都是windows an ...

  10. [原创]基于Zynq PS与PL之间寄存器映射 Standalone & Linux 例程

    基于Zynq PS与PL之间寄存器映射 Standalone & Linux 例程 待添加完善中

随机推荐

  1. Spring Boot项目基于POI框架导出Excel表格

    1.    依赖 我的项目是基于Spring Boot的,这里只贴出POI框架需要依赖的两个包,其他的都无所谓,只要能提供Controller让浏览器访问即可.在pom.xml配置文件中增加如下两个包 ...

  2. CSP-S 2020全国开放赛前冲刺模拟训练题1信友队集训队员周镇东出题 小结

    题目&官方题解下载 我的题解 CSP-S 2020模拟训练题1-信友队T1 四平方和 CSP-S 2020模拟训练题1-信友队T2 挑战NPC 我仍未看懂那天所看到的T3的题解 CSP-S 2 ...

  3. ArkUI-X与Android消息通信

    平台桥接用于客户端(ArkUI)和平台(Android或iOS)之间传递消息,即用于ArkUI与平台双向数据传递.ArkUI侧调用平台的方法.平台调用ArkUI侧的方法.本文主要介绍Android平台 ...

  4. (包含5w字提示词开源)手把手教你搭建开源提示词优化平台

    前言:为什么要自己搭建? 各位技术同学们,还在为ChatGPT的网络限制而苦恼吗?还在担心敏感数据泄露给第三方吗?今天给大家带来一个超级实用的解决方案--自部署AI提示词优化平台! 想象一下: 数据完 ...

  5. bigdecimal去除末尾多余的0 ,stripTrailingZeros()科学计数法解决

    BigDecimal是处理高精度的浮点数运算的常用的一个类 当需要将BigDecimal中保存的浮点数值打印出来,特别是在页面上显示的时候,就有可能遇到预想之外的科学技术法表示的问题. 一般直接使用 ...

  6. Vue.js作者谈:Vue 3 最新进展_VueConf 2018

    本文只是针对视频内容的重点整理,如若不清楚的地方请看文末链接的现场视频内容. Vue3.0会带来些什么: 更快 更小 更易于维护 更好的多端渲染支持 其他新功能 更快: 重构虚拟DOM:更多虚拟时的优 ...

  7. 使用Lean4进行形式化建模(以Java线程池为例)

    前言 前段时间,我们处理了一则Java线程池配置不当导致的线上问题(参见 好端端的线程池,怎么就卡死了?),本文将以此为案例,使用形式化语言,从数学角度进行证明. 形式化证明简介 首先需要搞清楚一个概 ...

  8. ATE测试工程师是做什么的?

    这是IC男奋斗史的第28篇原创 本文1437字,预计阅读4分钟. 前两天我们一个做封装的同事问我说,目前ATE测试工程师在就业市场上很火,很多公司都在急招,猎头也让他帮忙有偿推荐候选人.ATE测试工程 ...

  9. 3.Java SDK源码分析系列笔记-LinkedList

    目录 1. 是什么 2. 如何使用 3. 原理分析 3.1. uml 3.2. 构造方法 3.2.1. 队列的节点Node 3.3. add方法 3.3.1. 插入到链表尾部 3.3.2. 构造新节点 ...

  10. Server-sent-events与 WebSocket的区别是什么?

    SSE 与 WebSocket 作用相似,都是建立浏览器与服务器之间的通信渠道,然后服务器向浏览器推送信息.总体来说,WebSocket更强大和灵活.因为它是全双工通道,可以双向通信:SSE是单向通道 ...