更改ZCU104评估板FMC接口的I/O核心供电电压 | 您所在的位置:网站首页 › tda1541供电电压 › 更改ZCU104评估板FMC接口的I/O核心供电电压 |
目录
一、前言二、原因分析三、解决方案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的电源上。 查询到该电源是由IRPS5401这块PMIC2 输出的。同时也可以看到,该输出有一个测试点J172供我们测试。隔壁有个J33接地的测试点。 理论上是可以通过配置PMIC来调整输出电压,开发板上也刚好留有PMIC的I2C接口供调试使用。图中的排针接口(J175),从左到右分别是 SCL SDA GND 接上示波器后在启动的时候发现有I2C输出,猜测在上电的时候对PMIC进行了配置。但是查询了PMIC的数据手册之后,发现这一段其实只是在对其中一个输出端口进行配置,也就是FMC的输出电压VADJ_FMC。而PMIC的内部带有EEPROM,并不需要每次上电都需要配置,这里通过观察示波器,也发现只有这一段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 实验室设备网 版权所有 |