Skip to content

Instantly share code, notes, and snippets.

@V0XNIHILI
Last active February 9, 2026 14:09
Show Gist options
  • Select an option

  • Save V0XNIHILI/92d4aad58e646aea93081d0d78d89262 to your computer and use it in GitHub Desktop.

Select an option

Save V0XNIHILI/92d4aad58e646aea93081d0d78d89262 to your computer and use it in GitHub Desktop.

How to change the FMC voltage rail (V_ADJ/VADJ) on the ZCU104 from 1.2V (default) to 1.8V directly from Linux running on the board

Credits to out to @guilhermegog who figured out how to make this work!


First, find out where your channel id 2 is (chan_id 2, this is where the PMIC that controls the voltage will be listening):

i2cdetect -l

Example output:

i2c-0   i2c       Cadence I2C at ff020000        I2C adapter
i2c-1   i2c       i2c-0-mux (chan_id 0)          I2C adapter
i2c-2   i2c       i2c-0-mux (chan_id 1)          I2C adapter
i2c-3   i2c       i2c-0-mux (chan_id 2)          I2C adapter  <-- THIS IS THE ONE
...

Select the correct ID, i2c-3 (id 3), in this case, corresponding to chan_id 2.

Then run the following commands, where you replace 3 by the obtained id number:

# Select Page 3 on the PMIC
i2cset -y -f 3 0x44 0x00 0x03

# Set Vout Mode (Linear)
# 0x14 = 000 for linear mode and 10100 for the scale (=-12 in 2s complement)
# and results in a scale of 2**-12. Check the manual for more information.
i2cset -y -f 3 0x44 0x20 0x14

# Set voltage to 1.8V (word write)
# 0x1CCC = 0d7373, 7372/2**12 = 1.80V
i2cset -y -f 3 0x44 0x21 0x1CCD w

When we tested this, our id was i2c-4 therefore our commands had -y 4 instead. If you then measure the output voltage, it should have been correctly set to 1.8V!

Links:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment