Change FMC voltage rail (VADJ) in ZCU104

Hi,

I want to use the pins available in the FMC socket to talk to another chip in a ZCU104 board. I notice that you can get the voltage levels of the rails with get_rails(). The FMC rail is at 1.2V, which I can confirm by probing the VADJ pin in an FMC breakout board.

Is there any way, through PYNQ or through something else, to change that rail to 1.8V so that my signals also work at 1.8V?

Thanks for your help!

We don’t have a way of doing this from PYNQ as it’s a bit risky to be poking the power regulators from a multi-process environment without dedicated driver support that we don’t have. It’s theoretically possible to bash the I2C bus from user-space but that risks frying the board without extreme care.

On the ZCU104 the PYNQ image should during the very early boot stage interrogate the FMC card and set VADJ appropriately. If you want to override this the best bet is probably to patch that part of the FSBL. This part of the boot process is built on top of Petalinux so you can follow the guides on patching the FSBL with xfsbl_board.c being the file of interest.

Hopefully this is sufficient to get started.

Peter

Thank you for your reply, especially during the long holiday weekend in the USA.

I ended up solving the issue in a different way. From this post https://forums.xilinx.com/t5/Xilinx-Evaluation-Boards/Enabling-VADJ-on-ZCU104/td-p/861259, I found out that there is a bug in the FSBL. Instead of reading the EEPROM of the FMC card, it interrogates the EEPROM of the ZCU104 board. Since I have the Infineon USB005 dongle to write to the EEPROM on the ZCU104 through I2C, I used it to reprogram the value to 1.8 V and it worked.

Patching the FSBL is probably the more elegant solution, but I am a bit time constrained at the moment. Also, I am more confident messing with HW rather than SW or firmware.

Thanks for the help!
Dante

PS: unfortunately, I cannot mark both answers as a solution. So, I will mark this as a solution since it is the one I tested.

Hi Dante,
Would you mind explaining how you set the VADJ voltage to 1.8V using the dongle? I used that and can change the VOUT_command to 1.8V and then write using Store_User_All command, but as soon as I turn on and off the board, I see the VOUT_Command changed to 1.2V but the remaining changes has remained unchanged. Also when I use XILINX SCUI software to change VADJ and then check voltage with USB005 dongle, I can see the voltage on switcher D is 1.8V but now instead of green the switch is yellow!
Also you mentioned hacking the FSBL file. Could you give more info about it as I am very new? Where is this file and how it should be modified? Because it seems that when the PYNQ image is booting from the microSD, it changes the FMC voltages to 1.2V.
Thanks