This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

UCD90120A: Failed to reprogram on a Xilinx ZC706 evaluation board

Part Number: UCD90120A

Hello,

I need to change the VADJ voltage on a ZC706 Xilinx evaluation board. I found quite a few tutorials for that and it seemed to fit my needs. (https://www.xilinx.com/support/answers/56811.html and https://www.xilinx.com/support/answers/53599.html). They consist essentially in scripts that can be loaded in the TI Digital Power Manufacturing tool to reprogram the UCD90120A in charge of the power rail I want to adjust.

However, following carefully the procedure I failed to change VADJ on the target, no matter what version of the script I pick for that (1.8V, 2.5V [default] or 3.3V). The TI Digital Power Manufacturing tool stops at some point during programming and reads the following:

ON_OFF_CONFIG write Mode: OPERATION Only [0x18] on UCD90120A @ PMBus Address 101d error: WRITE VERIFICATION READ BACK FAILED; can not continue with project import

Before that, there were 3 read attempts on this very register:

SAA: ReadByte (Address 101d, Cmd 0x02) error: NACK

I don't quite understand what's going on; it seems that some register fails to be read? What could prevent this specific register from being read? some timing issue making the device stuck?
I used the USB to GPIO adapter from TI for the device programming and its firmware is up to date. I can read the device ID so the UCD90120A seems to be alive.

Hopefully the board is still working fine; the rail I wanted to adjust reads the same voltage though (so nothing seems to have been programmed)

Regards,
Quentin

  • Hello

    If you can read the Device ID without issue, the UCD90120A is fully functional. 

    The error message indicates that the script assumes that UCD90120A has PMbus address 101. Does it match your board? 

    which version of Manufacturing tool is used?

    Could you share both old and new scrip file?

    Regards

    Yihe

  • Hi,

    Thanks for your answer.
    Address 101 should be correct: it matches with the schematic and during device scan I see the target UCD90120A showing up at address 101 so everything is fine regarding this.
    I'm operating with the Digital Power Manufacturing v.7.4.1 and USB adapter v1.0.11
    Let me know if there are other details I can provide you.

    Please find here below the XML file given by Xilinx I tried to use.

    ZC706_RevB_TI_Addr101_R1.xml
    <?xml version="1.0" encoding="utf-8"?>
    <FactoryScript xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" FactoryScriptVersion="1.0.3" Cancellable="true" Description="ZC706 CM Power System Program and Validate" Required_Num_Devices="1">
      <factoryDeviceScripts>
        <FactoryDeviceScript Part_ID="UCD90120A" Match_Any_Address="false" Address="101" Description="">
          <Task_Groups>
            <FactoryTaskGroup Name="Startup" Description="Program UCD90120A at Addr101">
              <Tasks>
                <FactoryTask Task_Attribute_Name="Configure_and_Validate" description="Configure all parameters on device based on project file from Fusion Power Design GUI." NameSpace="TIDP.Factory.TaskLibrary" classType="Manufacturing" Assembly="TIDP.Factory.TaskLibrary" dependencies="" Version="1.0.0" Reason_For_Last_Update="" Assembly_File_Version="1.2.15.0" Assembly_Version="1.2.15.0" Technical_Description="Takes project file and identifies the set of parameters to take from a project file based on the config_value.  There is also the option to store to the device after the configuration is completed.&#xD;&#xA;            A parameter check is done to compare which parameters differ between the device and project file.  A write is then done on those select differences.  &#xD;&#xA;            However if you set &lt;b&gt;force_write_of_all to true&lt;/b&gt; then it will write every parameter from the project file to the device." TaskType="PMBUS">
                  <Parameters>
                    <FactoryTaskArgument Name="file_location">
                      <Value xsi:type="xsd:string">..\Inputs\ZC706_1_0_U48_Addr101_2V5vadj_0.6vscale_r11.xml</Value>
                      <Description>The project file that contains the device configuration desired.</Description>
                      <Arg_Type>System.String</Arg_Type>
                      <Input_Type>FILE</Input_Type>
                    </FactoryTaskArgument>
                    <FactoryTaskArgument Name="store_to_flash">
                      <Value xsi:type="xsd:boolean">true</Value>
                      <Description>Set to true to store the newly configured parameters to flash. [Default: True]</Description>
                      <Arg_Type>System.Boolean</Arg_Type>
                      <Input_Type>NORMAL</Input_Type>
                    </FactoryTaskArgument>
                    <FactoryTaskArgument Name="device_choice">
                      <Value xsi:type="ConfigValue">
                        <Specific_Address>101</Specific_Address>
                        <Config_Option>SPECIFIC</Config_Option>
                      </Value>
                      <Description>Choose which device setting you want to use to locate device in project file.</Description>
                      <Arg_Type>TIDP.Factory.CustomerTypes.ConfigValue</Arg_Type>
                      <Input_Type>NORMAL</Input_Type>
                    </FactoryTaskArgument>
                    <FactoryTaskArgument Name="force_write_of_all">
                      <Value xsi:type="xsd:boolean">true</Value>
                      <Description>Set to true if you want all project file parameters to be written to the device even if they are the same. [Default: False]</Description>
                      <Arg_Type>System.Boolean</Arg_Type>
                      <Input_Type>NORMAL</Input_Type>
                    </FactoryTaskArgument>
                  </Parameters>
                </FactoryTask>
                <FactoryTask Task_Attribute_Name="Clear_Faults" description="Clears faults on device." NameSpace="TIDP.Factory.TaskLibrary" classType="Manufacturing" Assembly="TIDP.Factory.TaskLibrary" dependencies="" Version="1.0.0" Reason_For_Last_Update="" Assembly_File_Version="1.2.15.0" Assembly_Version="1.2.15.0" Technical_Description="Displays status in log before and after call to clear faults on device." TaskType="PMBUS">
                  <Parameters />
                </FactoryTask>
                <FactoryTask Task_Attribute_Name="Clear_Logged_Faults" description="Clears the logged faults on device as opposed to faults." NameSpace="TIDP.Factory.TaskLibrary" classType="Manufacturing" Assembly="TIDP.Factory.TaskLibrary" dependencies="" Version="1.0.0" Reason_For_Last_Update="" Assembly_File_Version="1.2.15.0" Assembly_Version="1.2.15.0" Technical_Description="" TaskType="PMBUS">
                  <Parameters />
                </FactoryTask>
                <FactoryTask Task_Attribute_Name="Set_Manufacturing_Date" description="Based on the string format will set the mfr_date accordingly." NameSpace="TIDP.Factory.TaskLibrary" classType="Manufacturing" Assembly="TIDP.Factory.TaskLibrary" dependencies="" Version="1.0.0" Reason_For_Last_Update="" Assembly_File_Version="1.2.15.0" Assembly_Version="1.2.15.0" Technical_Description="Format examples:&lt;ol&gt;&lt;li&gt;yyMMdd would represent June 10 2008 as 080610&lt;/li&gt;&lt;li&gt;MMddyy would represent June 10 2008 as 061008&lt;/li&gt;&lt;li&gt;ddMMyy would represent June 10 2008 as 100608&lt;/li&gt;&lt;li&gt;yy_MM would represent June 10 2008 as 08_06&lt;/li&gt;&lt;/ol&gt;&lt;b&gt;&lt;u&gt;many possiblities keep in mind that the mfr_date field has a limited number of characters if it is exceded then the task will fail.  For UCD9240 it is 6 characters.&lt;/u&gt;&lt;/b&gt;" TaskType="PMBUS">
                  <Parameters>
                    <FactoryTaskArgument Name="date_format">
                      <Value xsi:type="xsd:string">yyMMdd</Value>
                      <Description> [Default: yyMMdd]</Description>
                      <Arg_Type>System.String</Arg_Type>
                      <Input_Type>NORMAL</Input_Type>
                    </FactoryTaskArgument>
                  </Parameters>
                </FactoryTask>
                <FactoryTask Task_Attribute_Name="Set_Serial_Number" description="Sets serial number for the device(MFR_SERIAL).  This is either obtained from the user via a dailog &#xD;&#xA;            or is automatically obtained if &lt;b&gt;Automated&lt;/b&gt; is set to true.  Starting value and increment are used in both automation or manual.  If in manual it will &#xD;&#xA;            propose the next value to the user so they would only need to press enter as opposed to entering it." NameSpace="TIDP.Factory.TaskLibrary" classType="Manufacturing" Assembly="TIDP.Factory.TaskLibrary" dependencies="" Version="1.0.0" Reason_For_Last_Update="" Assembly_File_Version="1.2.15.0" Assembly_Version="1.2.15.0" Technical_Description="It should be noted that even though the serial number is incremented on subsequent runs it will start back from the starting_value set if the GUI is restarted." TaskType="PMBUS">
                  <Parameters>
                    <FactoryTaskArgument Name="Automated">
                      <Value xsi:type="xsd:boolean">false</Value>
                      <Description>If set to true will not prompt the user for a serial number [Default: False]</Description>
                      <Arg_Type>System.Boolean</Arg_Type>
                      <Input_Type>NORMAL</Input_Type>
                    </FactoryTaskArgument>
                    <FactoryTaskArgument Name="Starting_Value">
                      <Value xsi:type="xsd:int">5000</Value>
                      <Description>For the first board run with this script when the Manufacturing GUI starts will start with this number [Default: 5000]</Description>
                      <Arg_Type>System.Double</Arg_Type>
                      <Input_Type>NORMAL</Input_Type>
                    </FactoryTaskArgument>
                    <FactoryTaskArgument Name="Increment">
                      <Value xsi:type="xsd:int">1</Value>
                      <Description>This increment will be added to the Starting value and will either propose the number to the user if Automated is false or will add it automatically and write to MFR_SERIAL. [Default: 1]</Description>
                      <Arg_Type>System.Double</Arg_Type>
                      <Input_Type>NORMAL</Input_Type>
                    </FactoryTaskArgument>
                  </Parameters>
                </FactoryTask>
                <FactoryTask Task_Attribute_Name="Store_Default" description="Stores the values on the device to the non-voltile memory of the device." NameSpace="TIDP.Factory.TaskLibrary" classType="Manufacturing" Assembly="TIDP.Factory.TaskLibrary" dependencies="" Version="1.0.0" Reason_For_Last_Update="" Assembly_File_Version="1.2.15.0" Assembly_Version="1.2.15.0" Technical_Description="Stores to flash." TaskType="PMBUS">
                  <Parameters />
                </FactoryTask>
              </Tasks>
            </FactoryTaskGroup>
            <FactoryTaskGroup Name="End">
              <Tasks>
                <FactoryTask Task_Attribute_Name="Clear_Faults" description="Clears faults on device." NameSpace="TIDP.Factory.TaskLibrary" classType="Manufacturing" Assembly="TIDP.Factory.TaskLibrary" dependencies="" Version="1.0.0" Reason_For_Last_Update="" Assembly_File_Version="1.2.15.0" Assembly_Version="1.2.15.0" Technical_Description="Displays status in log before and after call to clear faults on device." TaskType="PMBUS">
                  <Parameters />
                </FactoryTask>
                <FactoryTask Task_Attribute_Name="Clear_Logged_Faults" description="Clears the logged faults on device as opposed to faults." NameSpace="TIDP.Factory.TaskLibrary" classType="Manufacturing" Assembly="TIDP.Factory.TaskLibrary" dependencies="" Version="1.0.0" Reason_For_Last_Update="" Assembly_File_Version="1.2.15.0" Assembly_Version="1.2.15.0" Technical_Description="" TaskType="PMBUS">
                  <Parameters />
                </FactoryTask>
              </Tasks>
            </FactoryTaskGroup>
            <FactoryTaskGroup Name="Reset_101">
              <Tasks>
                <FactoryTask Task_Attribute_Name="Device_Reset" description="Resets the device via PMBus and waits a default amount of time." NameSpace="TIDP.Factory.TaskLibrary" classType="Manufacturing" Assembly="TIDP.Factory.TaskLibrary" dependencies="" Version="1.0.0" Reason_For_Last_Update="" Assembly_File_Version="1.2.15.0" Assembly_Version="1.2.15.0" Technical_Description="" TaskType="PMBUS">
                  <Parameters />
                </FactoryTask>
                <FactoryTask Task_Attribute_Name="Pause" description="This task pauses the process by the number of milliseconds entered." NameSpace="TIDP.Factory.TaskLibrary" classType="Manufacturing" Assembly="TIDP.Factory.TaskLibrary" dependencies="" Version="1.0.0" Reason_For_Last_Update="" Assembly_File_Version="1.2.15.0" Assembly_Version="1.2.15.0" Technical_Description="Basically a Thread.Sleep() with logging." TaskType="OTHER">
                  <Parameters>
                    <FactoryTaskArgument Name="pause_time_msec">
                      <Value xsi:type="xsd:int">150</Value>
                      <Description>number of milliseconds to pause for</Description>
                      <Arg_Type>System.Int32</Arg_Type>
                      <Input_Type>NORMAL</Input_Type>
                    </FactoryTaskArgument>
                  </Parameters>
                </FactoryTask>
                <FactoryTask Task_Attribute_Name="Message_With_Image" description="This task causes a pop-up dialog with image.  This can be used to validate that a board looks like a golden image.  If the user clicks ok then it is considered a pass.&#xD;&#xA;            If the user clicks cancel then it is considered a fail." NameSpace="TIDP.Factory.TaskLibrary" classType="Manufacturing" Assembly="TIDP.Factory.TaskLibrary" dependencies="" Version="1.0.0" Reason_For_Last_Update="" Assembly_File_Version="1.2.15.0" Assembly_Version="1.2.15.0" Technical_Description="Picture is stretched.  If no picture is desired use Message task." TaskType="OTHER">
                  <Parameters>
                    <FactoryTaskArgument Name="title">
                      <Value xsi:type="xsd:string">Cycle Board Power Now</Value>
                      <Description>Title for pop-up</Description>
                      <Arg_Type>System.String</Arg_Type>
                      <Input_Type>NORMAL</Input_Type>
                    </FactoryTaskArgument>
                    <FactoryTaskArgument Name="message">
                      <Value xsi:type="xsd:string">Cycle Board Power Now</Value>
                      <Description>Main contents of dialog that appears below the picture.</Description>
                      <Arg_Type>System.String</Arg_Type>
                      <Input_Type>NORMAL</Input_Type>
                    </FactoryTaskArgument>
                    <FactoryTaskArgument Name="image_location">
                      <Value xsi:type="xsd:string">..\Inputs\power_of_on.GIF</Value>
                      <Description>Location of file.</Description>
                      <Arg_Type>System.String</Arg_Type>
                      <Input_Type>FILE</Input_Type>
                    </FactoryTaskArgument>
                  </Parameters>
                </FactoryTask>            
              </Tasks>
            </FactoryTaskGroup>
            <FactoryTaskGroup Name="Validate_101">
              <Tasks>
                <FactoryTask Task_Attribute_Name="Validate_Vout_Device_All_Rails" description="Verify READ_VOUT on each output rail is within +-percent_pass% of VOUT_COMMAND on all configured rails." NameSpace="TIDP.Factory.TaskLibrary" classType="UCD9240" Assembly="TIDP.Factory.TaskLibrary" dependencies="" Version="1.0.0" Reason_For_Last_Update="" Assembly_File_Version="1.2.15.0" Assembly_Version="1.2.15.0" Technical_Description="" TaskType="TEST">
                  <Parameters>
                    <FactoryTaskArgument Name="percent_pass">
                      <Value xsi:type="xsd:double">5</Value>
                      <Description>The allowed percentage variation. [Default: 5]</Description>
                      <Arg_Type>System.Double</Arg_Type>
                      <Input_Type>NORMAL</Input_Type>
                    </FactoryTaskArgument>
                  </Parameters>
                </FactoryTask>
              </Tasks>
            </FactoryTaskGroup>
            <FactoryTaskGroup Name="End">
              <Tasks>
                <FactoryTask Task_Attribute_Name="Clear_Faults" description="Clears faults on device." NameSpace="TIDP.Factory.TaskLibrary" classType="Manufacturing" Assembly="TIDP.Factory.TaskLibrary" dependencies="" Version="1.0.0" Reason_For_Last_Update="" Assembly_File_Version="1.2.15.0" Assembly_Version="1.2.15.0" Technical_Description="Displays status in log before and after call to clear faults on device." TaskType="PMBUS">
                  <Parameters />
                </FactoryTask>
                <FactoryTask Task_Attribute_Name="Clear_Logged_Faults" description="Clears the logged faults on device as opposed to faults." NameSpace="TIDP.Factory.TaskLibrary" classType="Manufacturing" Assembly="TIDP.Factory.TaskLibrary" dependencies="" Version="1.0.0" Reason_For_Last_Update="" Assembly_File_Version="1.2.15.0" Assembly_Version="1.2.15.0" Technical_Description="" TaskType="PMBUS">
                  <Parameters />
                </FactoryTask>
              </Tasks>
            </FactoryTaskGroup>
          </Task_Groups>
        </FactoryDeviceScript>
      </factoryDeviceScripts>
    </FactoryScript>

    Regards,

    Quentin

  • Hi

    Thank you for the details. I was able to duplicate the issue and our GUI team will work on this.

    Before a solution is identified, you can use the Fusion Digital Power Designer tool to import the project file(not the script file that run by the manufacturing GUI, it is the file that under input folder from Xilinx zip file)

    You can follow the below video https://training.ti.com/fusion-power-designer-import-and-export-project-files?context=1136655-1139495-1136588 

    to import.

    Regards

    Yihe

  • Hi,

    The fix using Fusion Digital Power Designer worked just fine, I was able to run the script and successfully adjust the voltage on the targeted rail; Thanks a lot!

    If possible, fixing the problem in the future release of the Digital Power Manufacturing tool could be great in case anyone encounters the same issue while following the Xilinx tutorial, but as far as I'm concerned I'm satisfied with the current solution.

    Regards,
    Quentin

  • Hello

    I am just about to update that we have fixed this and released the new Manufacturing GUI. please download from here

    http://software-dl.ti.com/analog/analog_public_sw/fusion/TI-Digital-Power-Manufacturing-Tool-7.4.3.exe 

    Regards

    Yihe

  • Hello,

    Thank you for the update!
    I went through the whole programming procedure again with version 7.4.3 of the Digital Power Manufacturing Tool.
    I don't have the "WRITE VERIFICATION READ BACK FAILED" error I had in my original post, so from that point of view the problem is solved.

    But now, it turns out that the complete script fails to run later for another reason, apparently due to a power rail not within specs (see capture)



    I also noticed that when the TI USB adapter is connected to the ZC706 Xilinx board, many power rails are actually turned off (for instance, the cooling fan doesn't spin anymore). This can be confirmed by monitoring the rail voltages in the Digital Power Designer Tool: most of them exhibit a voltage close to 0V. This effect is observed as soon as the TI USB adapter is plugged in the ZC706 board, no matter what TI tool I use afterwards.
    Is this a side effect of having the UCD90120A connected on the PMBUS? is the UCD90120A  device in some sort of "programming" state that automatically idles the power monitoring functions?
    If so, having some power rails turned off might explain why the script stops as soon as it tries to check the voltage levels. But again, just guessing here.

    Regards,

    Quentin

  • Hi

    In your project file, all rails are controlled by the PMBUS_CTRL signal. When this signal is HIGH, rails are on otherwise they are off.

    The TI USB Adapter does control the PMBUS_CTRL signal. I suspect that it has been configured to LOW somehow . You can switch it to HIGH.

    Bottom line, the programming is successfully. 

    Regards

    Yihe