MPM54304 - Margining high/low on output voltage

I want to read the output voltage of each Buck channel and margin the output voltage up to +/-3%. Can you confirm whether the following logic holds good? Formula has been derived based on MPM54304 datasheet.

Taking Buck 1 for below explanation:

  1. Read I2C register 0x2.

  2. If Vout_Select1 (D[7] bit) is not set, then V_Ref1 (D[0-6] bits) values directly corresponds to output voltage for Buck 1:
    ===> output_voltage = V_Ref1

  3. If Vout_Select1 is set, since the output voltage is 3 times the reference voltage, the calculation will be:
    ===> output_voltage = V_Ref1 * 3.

  4. Let’s say, the V_Ref1 = 1V, and D[7] is not set. So the output_voltage = 1V.

  5. To margin output voltage low to 3%:
    low_voltage = (output_voltage * (1 - 0.03)) = (1 * (1 - 0.03)) = 0.97 V or 970 mV.

    /* formula derived as per datasheet reference voltage truth table */
    low_voltage = (low_voltage - 550)/10 = 42 or 0x2A

    0x2A corresponds to 970mV as per datasheet truth table (Page: 27).

  6. Write the margined voltage (low_voltage) at device I2C address offset 0x2.

Hello,

Your logic is sound. I realize that the truth table does not show some values in this case as well, but the calculation lines up well. The only thing is that the register for Buck 1 is 0x42. This nomenclature corresponds to all associated registers as seen on Page 22:

Is your only aim to account for this 3% discrepancy and to display the voltage accurately?

Best,
Krishan

Yes, I need to margin output voltage high/low up to 3% in run-time of the device and read back the margined voltage value. So i will update to I2C register address 0x2 (Page 29 in datasheet) directly during run-time instead of writing to MTP register 0x42. I believe MTP address region is only used to hold the default configuration for the device.

Please clarify if my understanding is not correct, and whether writing to register 0x2 with new voltage value will take effect immediately on the corresponding output voltage pin.

Your logic seems sound and is worth testing if you are able to. If you don’t see these changes, write into your desired register using the GUI end write via volatile memory such that you don’t hold the default configuration for the device as you mentioned you are not trying to do. Please test and see if this works.

Best,
Krishan