UCD3138: UCD3138RJAR UV setting via PMBus

Part Number: UCD3138

Tool/software:

Hi expert,

My customer would like to adjust the UVP setting of UCD3138RJA. Can you please comment how to adjust the UVP setting thru the PMBus?

Best regards,

Randy

  • Hello Randy,

    I will provide a response by Friday.

    Regards,

    Jonathan Wong

  • Hi Jonathan,

    Will you provide the suggestion today?

    All the best

    Colin Huang

  • Hello Colin,

    Do you want to change the UV in the Fusion GUI or the PMBus code? Changing the UV threshold in the Fusion GUI is fairly straightforward.

    If you want to change how the UV handling is done in the UCD3138, then you can go to pmbus_topology.c to see how the UCD3138 will respond to a UV command. For example, if the Fusion GUI or some PMBus controller sends the 0x44 pmbus command (defined as VOUT_UV_FAULT_LIMIT per the PMBus spec), then the UCD3138 will execute the pmbus_read_write_vout_uv_fault_limit() function. If you want to change what the UCD3138 will do in response to this command, then you can do so here.

    Below is a snippet of the code related to the UV Fault in the UCD3138 LLC code, as an example. The below is located in pmbus_topology.c

    //UV Fault
    inline Uint8 pmbus_write_vout_uv_fault_limit(void)
    {
    	pmbus_dcdc_config[0].vout_uv_fault_limit = pmbus_buffer[1] + (pmbus_buffer[2] << 8);
    	configure_fault_levels();
    	return PMBUS_SUCCESS;
    }
    inline Uint8 pmbus_read_vout_uv_fault_limit(void)
    {
    	pmbus_read_two_byte_handler(pmbus_dcdc_config[0].vout_uv_fault_limit);
    	return PMBUS_SUCCESS;
    }
    
    Uint8 pmbus_read_write_vout_uv_fault_limit(Uint8 pmbus_read)
    {
    	if(pmbus_read)
    		return pmbus_read_vout_uv_fault_limit();
    	else
    		return pmbus_write_vout_uv_fault_limit();
    }
    
    //UV fault response
    
    
    inline pmbus_read_vout_uv_fault_response(void)
    {
    	  pmbus_read_one_byte_handler(pmbus_dcdc_config[0].vout_uv_fault_response);
    	  return PMBUS_SUCCESS;
    }
    
    inline pmbus_write_vout_uv_fault_response(void)
    {
    	pmbus_dcdc_config[0].vout_uv_warn_limit= pmbus_buffer[1];
    	return PMBUS_SUCCESS;
    }
    
    Uint8 pmbus_read_write_vout_uv_fault_response(Uint8 pmbus_read)
    {
    
    	if(pmbus_read)
    			return pmbus_read_vout_uv_fault_response();
    		else
    			return pmbus_write_vout_uv_fault_response();
    }
    
    //UV Warn
    inline Uint8 pmbus_write_vout_uv_warn_limit(void)
    {
    	pmbus_dcdc_config[0].vout_uv_warn_limit = pmbus_buffer[1] + (pmbus_buffer[2] << 8);
    	configure_warning_levels();
    	return PMBUS_SUCCESS;
    }
    inline Uint8 pmbus_read_vout_uv_warn_limit(void)
    {
    	pmbus_read_two_byte_handler(pmbus_dcdc_config[0].vout_uv_warn_limit);
    	return PMBUS_SUCCESS;
    }
    
    Uint8 pmbus_read_write_vout_uv_warn_limit(Uint8 pmbus_read)
    {
    	if(pmbus_read)
    		return pmbus_read_vout_uv_warn_limit();
    	else
    		return pmbus_write_vout_uv_warn_limit();
    }

    Regards,

    Jonathan Wong