更改ZCU104评估板FMC接口的I/O核心供电电压 您所在的位置:网站首页 tda1541供电电压 更改ZCU104评估板FMC接口的I/O核心供电电压

更改ZCU104评估板FMC接口的I/O核心供电电压

2024-06-25 18:05| 来源: 网络整理| 查看: 265

目录 一、前言二、原因分析三、解决方案1. 裸机系统或纯FPGA修改电压2.Petalinux下修改FMC电压 四、参考资料网页文档

一、前言

本文的环境均为2020.2版本,版本之间有一定差异,请读者自行鉴别。

本文的方法不仅只适用于ZCU104开发板,对其他如ZCU102、ZCU106开发板一样适用。

本文涉及到如何使用补丁文件对FSBL进行修改的操作,需要读者熟悉Petalinux和Git的操作方式。

若出现问题建议读者上Xilinx官方论坛进行搜索。

二、原因分析

最近在用ZCU104这块Xilinx官方的开发板配合Petalinux进行开发,但是却发现FMC接口的电平不对。本来是设置了LVCMOS18(因为FMC用的是高性能接口,所以电压只能到1V8),但是测试的时候高电平只有1.16V。赶紧去查了一下数据手册(DS925),并在手册的第19页找到电平标准的描述。

电平标准 理论上高电平最低电压也是1.4V,但是我的明显低于这个电压,更像是LVCMOS12的标准。再重新对工程检查后,意识到极有可能是Vcco的问题。Vcco是核心供电电压,直接打开ZCU104的原理图1 进行查询。

FMC所连接的区块是Bank 67/68 ,可以看到这个两个Bank连接到的是一个叫做VADJ_FMC的电源上。

Bank 67供电 查询到该电源是由IRPS5401这块PMIC2 输出的。同时也可以看到,该输出有一个测试点J172供我们测试。隔壁有个J33接地的测试点。

PMIC输出

测试点

理论上是可以通过配置PMIC来调整输出电压,开发板上也刚好留有PMIC的I2C接口供调试使用。图中的排针接口(J175),从左到右分别是 SCL SDA GND I2C调试接口 接上示波器后在启动的时候发现有I2C输出,猜测在上电的时候对PMIC进行了配置。但是查询了PMIC的数据手册之后,发现这一段其实只是在对其中一个输出端口进行配置,也就是FMC的输出电压VADJ_FMC。而PMIC的内部带有EEPROM,并不需要每次上电都需要配置,这里通过观察示波器,也发现只有这一段I2C波形。

I2C输出 推测应该是Petalinux里面对这个进行了配置,可是在config找了一圈都没有找到这个的选项,也没有找到对这个PMIC的驱动。

在搜索了一堆回答之后,有这样几个解决的办法:

第一种是使用英飞凌的官方编程器对PMIC编程。不过如果只是为了这样去买一个编程器,不太划算,而且感觉在再次启动Petalinux的时候又会重新刷新掉。使用官方SCUI工具,对开发板进行配置。有一定效果,但是和推测的一样启动Petalinux的时候又会重新刷新掉,具体操作见下文。既然关于PMIC的启动不在内核,那就极有可能在FSBL里面。关于怎么修改官方开发板的FSBL,也是有点麻烦的。这个是最终能够真正修改在Petalinux下FMC电压的办法。 三、解决方案 1. 裸机系统或纯FPGA修改电压

这里直接复制官方论坛的回答:

请查看本回答记录,它应该有助于您调整ZCU104评估板上的VADJ_FMC电压: https://www.xilinx.com/support/answers/67308.html

ZCU104 SCUI使用说明: https://www.xilinx.com/support/documentation/boards_and_kits/zcu104/2019_1/xtp502-zcu104-system-controller-c-2019-1.pdf 在这里插入图片描述

这是ZCU104系统控制器的.zip文件:

https://www.xilinx.com/member/forms/download/design-license.html?cid=2acea54e-e9d3-40ea-aa65-ee986d08cdd6&filename=rdf0456-zcu104-system-controller-c-2019-1.zip

另外,你也可以看看这些类似的论坛帖子是否能帮助你解决你的疑问:

https://forums.xilinx.com/t5/Xilinx-Evaluation-Boards/Enabling-VADJ-on-ZCU104/td-p/861259

https://forums.xilinx.com/t5/Xilinx-Evaluation-Boards/FMC-VAdj-Set-to-3-3v/td-p/860226

https://forums.xilinx.com/t5/Xilinx-Evaluation-Boards/FMC-VADJ/td-p/911056

希望能有所帮助

https://forums.xilinx.com/t5/Xilinx-Evaluation-Boards/How-can-I-adjust-VADJ-value-to-2-5-V-on-zcu102-Rev1-0-board/td-p/789311

该方法主要是通过向ZYNQ里面写入官方的开发板控制程序,然后通过软件设置电压。但是由于Petalinux的FSBL会重新写入PMIC的电压信息,所以无法用这个进行更改。

2.Petalinux下修改FMC电压

在2020.2中,官方向FSBL中添加了一些代码,可以读取FMC卡的EEPROM,然后根据EEPROM里面的电压信息,来配置VADJ电压。

但是代码中有个小问题。可能是考虑到不是所有的FMC上都有EEPROM。所以它实际上是从ZCU104的板载EEPROM读取的,而不是从FMC卡的EEPROM读取的。所以必须对FSBL的代码打补丁,重新编译新的FSBL。

先克隆官方的FSBL源码 https://github.com/Xilinx/embeddedsw,记得在分支里面选择自己的Petalinux版本。

git clone https://github.com/Xilinx/embeddedsw.git cd embeddedsw/ git checkout tags/xilinx-v2020.2 git branch my git checkout my

找到如下文件 lib\sw_apps\zynqmp_fsbl\src\xfsbl_board.c,在文件的大约290行找到如下代码。

#if defined(XPS_BOARD_ZCU104) || defined(XPS_BOARD_ZCU216) || \ defined(XPS_BOARD_ZCU208) #if defined(XPS_BOARD_ZCU104) UStatus = XFsbl_ReadMinMaxEepromVadj(I2c0InstancePtr, &LpcMin, &LpcMax); #else UStatus = XFsbl_ReadMinMaxEepromVadj(I2c1InstancePtr, &LpcMin, &LpcMax); #endif if(UStatus != XFSBL_SUCCESS) { goto END; } VadjSetting = XFsbl_CalVadj(LpcMin, LpcMax); #endif

将其修改成你所需要的电压

#if defined(XPS_BOARD_ZCU104) || defined(XPS_BOARD_ZCU216) || \ defined(XPS_BOARD_ZCU208) #if defined(XPS_BOARD_ZCU104) UStatus = XFsbl_ReadMinMaxEepromVadj(I2c0InstancePtr, &LpcMin, &LpcMax); #else UStatus = XFsbl_ReadMinMaxEepromVadj(I2c1InstancePtr, &LpcMin, &LpcMax); #endif if(UStatus != XFSBL_SUCCESS) { goto END; } VadjSetting = SET_VADJ_1V8; /* 改动部分 */ #endif

保存文件,提交修改,生成补丁文件

git commit -s git format-patch -1

在Petalinux工程下创建一个fsbl和files目录

mkdir -p /project-spec/meta-user/recipes-bsp/fsbl/files

拷贝刚刚生成的FSBL补丁文件到files目录

cp 0001-FSBL.patch /project-spec/meta-user/recipes-bsp/fsbl/files

创建一个名为 fsbl_%.bbappend的文件,然后添加到如下文件夹/project-spec/meta-user/recipes-bsp/fsbl

vim /project-spec/meta-user/recipes-bsp/fsbl/fsbl_%.bbappend

现在你工程的文件结构应该如下图所示: 工程目录 在文件fsbl_%.bbappend中添加如下内容

# Patch for FSBL # Note: do_configure_prepend task section is required only for 2017.1 release # Refer https://github.com/Xilinx/meta-xilinx-tools/blob/rel-v2017.2/classes/xsctbase.bbclass#L29-L35 do_configure_prepend() { if [ -d "${S}/patches" ]; then rm -rf ${S}/patches fi if [ -d "${S}/.pc" ]; then rm -rf ${S}/.pc fi } SRC_URI_append = " \ file://0001-FSBL.patch \ " FILESEXTRAPATHS_prepend := "${THISDIR}/files:" #Add debug for FSBL(optional) XSCTH_BUILD_DEBUG = "1" #Enable appropriate FSBL debug or compiler flags YAML_COMPILER_FLAGS_append = " -DXPS_BOARD_ZCU104" # Note: This is not required if you are using Yocto # CAUTION!: EXTERNALXSCTSRC and EXTERNALXSCTSRC_BUILD is required only for 2018.2 and below petalinux releases EXTERNALXSCTSRC = "" EXTERNALXSCTSRC_BUILD = ""

移除/components/plnx_workspace,并在重建FSBL组件之前清理您的项目工作空间。

petalinux-build -x mrproper

重新编译FSBL

petalinux-build -c bootloader

编译结束后,重新打包放到SD卡中,再次启动就可以看到FMC的电压发生改变了。

其实也可以修改读取的EEPROM地址,或是直接修改EEPROM的内容,这里不进行详细讨论,读者查阅其源码后能够很好理解。

四、参考资料 网页

[1] QA: Enabling VADJ on ZCU104 [2] QA: How to modify FMC default voltage [3] QA: ZCU104 VADJ programming [4] QA: How to enable FSBL customization in petalinux [5] Blog: Customizing FSBL in PetaLinux 2018.3 [6] Wiki: How to Patch the FSBL in a PetaLinux Project

文档

[1] DS925: Zynq UltraScale+ MPSoC Data Sheet: DC and AC Switching Characteristics [2] UG1267: ZCU104 Evaluation Board User Guide [3] XTP484 - ZCU104 Schematics (v1.0)

原理图是受管控文件,读者可到Xilinx官网自行下载,本文只截取部分少量原理图。 ↩︎

Power Management IC 集成电源管理电路 ↩︎



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有