UCD3xxx系列芯片, 如何操作内部的DFlash!
大家好!
我想问下, 如何对UCD3xxx系列芯片的内部DFlash进行操作!
我司有电源使用该系列芯片, 在生产过程中, 发现有些参数由于器件离散性比较大, 造成某些指标不合适,
比如VIN过,欠压保护点, 不合格!
想通过在生产过程中, 通过软件调整到合格范围, 但不是很清楚, 该芯片内部对DFlash的操作,
所以, 请高手指点一下!
最好详细些! 或者有pdf文件最好!
先谢过!!
没人知道吗??
我看到TI操作DFlash的程序是:
1. 定义
//初始化存储在DFlahs中存储的ADC采样结构体的常量值为0
#pragma DATA_SECTION(threshold_constants_dflash,".dflash")
const struct ADC_VALUES_STRUCT_SIGNED threshold_constants_dflash =
{
//LDG700模块代码
0, // Sint32 isec; //adc采样值:iout, RESULT0~AD02;
0, // Sint32 temp_sense; //adc采样值:基板温度,RESULT1~AD03;
0, // Sint32 vin; //adc采样值:Vin, RESULT2~AD04;
0, // Sint32 VO; //adc采样值:Vout, RESULT3~AD05;
0, // Sint32 device_temp; //adc采样值:芯片温度,RESULT4~AD15;
0, // Sint32 ishare_mon; //adc采样值:跟踪电压,RESULT6~AD07
0, // Sint32 trim; //adc采样值:Trim电压,RESULT7~AD08
0, // Sint32 tracking; //adc采样值:均流电压,RESULT5~AD06
0, // Sint32 power_out; //计算值 :输出功率=Vout*Iout
0, // Sint32 current_temp; //adc采样值:电流温度
0 // Sint32 i_pri_a; //adc采样值:原边电流
};
2. 相应的头文件定义:
extern struct ADC_VALUES_STRUCT_SIGNED threshold_constants_dflash;
3. 相应的.cmd文件中有
.dflash : {} > (DFLASH align(32))
4. 结果是:
对Dflash进行设置的, 然后在项目的.out文件中会出现相应的链接:
".\debug\LDG700.out" ==> .dflash
我照猫画虎进行如下定义:
1. 定义
#pragma DATA_SECTION(PMBus_CMD, ".dflash")
PMBUS_CMD PMBus_CMD =
{
//PMBus_Std_CMD
{
//PMBus_config
{
//PMBUS_CTRL_CMD
{
0, //page : 0x00
HARD_OFF, //operation : 0x01
PWR_ON_DIRECT, //on_off_config : 0x02
NO_WRITE_PROTECTION //write protect : 0x03
},
//PMBUS_VOUT_CONFIG_CMD
{
0, //VOUT_MODE : 0x20
0, //VOUT_COMMAND : 0x21
0, //VOUT_TRIM : 0x22
0, //VOUT_CAL_OFFSET : 0x23
0, //VOUT_MAX : 0x24
0, //VOUT_MARGIN_HIGH : 0x25
0, //VOUT_MARGIN_LOW : 0x26
0, //VOUT_TRANSITION_RATE : 0x27
0, //VOUT_DROOP : 0x28
0 //VOUT_SCALE_LOOP : 0x29
},
//PMBUS_MODEL_CONFIG_CMD
{
0, //COEFFICIENTS : 0x30
0, //POUT_MAX : 0x31
0, //MAX_DUTY : 0x32
0, //FERQUENCE_SWITCH : 0x33
0, //VI_ON : 0x35
0, //VI_OFF : 0x36
0, //INTERLEAVE : 0x37
0, //TON_DELAY : 0x60
0, //TON_RISE : 0x61
0, //TON_MAX_FAULT_LIMIT : 0x62
0, //TON_MAX_FAULT_RESPONSE: 0x63
0, //TOFF_DELAY : 0x64
0 //TOFF_FALL : 0x65
},
//PMBUS_IOUT_CONFIG_CMD
{
0, //IOUT_CAL_GAIN : 0x38
0 //IOUT_CAL_OFFSET : 0x39
}
},
//PMBus_fault
{
//PMBUS_VOUT_FAULT_CMD
{
0, //VOUT_OV_FAULT_LIMIT : 0x40
0, //VOUT_OV_FAULT_RESPONSE: 0x41
0, //VOUT_OV_WARN_LIMIT : 0x42
0, //VOUT_UV_WARN_LIMIT : 0x43
0, //VOUT_UV_FAULT_LIMIT : 0x44
0 //VOUT_UV_FAULT_RESPONSE: 0x45
},
//PMBUS_IOUT_FAULT_CMD
{
0, //IOUT_OC_FAULT_LIMIT : 0x46
0, //IOUT_OC_FAULT_RESPONSE: 0x47
0, //IOUT_OC_WARN_LIMIT : 0x48
0, //IOUT_OC_LV_FAULT_LIMIT: 0x49
0, //IOUT_OC_LV_FAULT_RESPONSE : 0x4A
0, //IOUT_UC_FAULT_LIMIT : 0x4B
0 //IOUT_UC_FAULT_RESPONSE: 0x4C
},
//PMBUS_TEMP_FAULT_CMD
{
0, //OT_FAULT_LIMIT : 0x4F
0, //OT_FAULT_RESPONSE : 0x50
0, //OT_WARN_LIMIT : 0x51
0, //UT_WARN_LIMIT : 0x52
0, //UT_FAULT_LIMIT : 0x53
0 //UT_FAULT_RESPONSE : 0x54
},
//PMBUS_MODEL_FAULT_CMD
{
0, //VIN_OV_FAULT_LIMIT : 0x55
0, //VIN_OV_FAULT_RESPONSE : 0x56
0, //VIN_OV_WARN_LIMIT : 0x57
0, //VIN_UV_WARN_LIMIT : 0x58
0, //VIN_UV_FAULT_LIMIT : 0x59
0, //VIN_UV_FAULT_RESPONSE : 0x5A
0, //IIN_OC_FAULT_LIMIT : 0x5B
0, //IIN_OC_FAULT_RESPONSE : 0x5C
0, //IIN_OC_WARN_LIMIT : 0x5D
0, //POWER_GOOD : 0x5E
0, //POWER_GOOD_OFF : 0x5F
0, //TOFF_MAX_WARN_LIMIT : 0x66
0, //POUT_OP_FAULT_LIMIT : 0x67
0, //POUT_OP_FAULT_RESPONSE: 0x68
0, //POUT_OP_WARN_LIMIT : 0x69
0 //PIN_OP_WARN_LIMIT : 0x6A
}
},
//PMBus_status
{
0, //STATUS_BYTES : 0X78
0, //STATUS_WORD : 0x79
0, //STATUS_VOUT : 0X7A
0, //STATUS_IOUT : 0x7B
0, //STATUS_INPUT : 0X7C
0, //STATUS_TEMP : 0x7D
0, //STATUS_CML : 0X7E
0, //STATUS_OTHER : 0x7F
0 //STATUS_MFR_SPECIFIC : 0x80
},
//PMBus_read
{
0, //Vin : 0x88
0, //Iin : 0x89
0, //VCAP : 0x8A
0, //Vout : 0x8B
0, //Iout : 0x8C
0, //Temp1 : 0x8D
0, //Temp2 : 0x8E
0, //Temp3 : 0x8F
// 0, //FanSpeed1 : 0x90
// 0, //FanSpeed2 : 0x91
// 0, //READ_FAN_1 : 0x92
// 0, //READ_FAN_2 : 0x93
0, //DutyCycle : 0x94
0, //Freq : 0x95
0, //POUT : 0x96
// 0 //PIN : 0x97
}
},
//PMBus_MFR_CMD
{
//PMBUS_MFR_Info
{
0, //PMBUS_REVISION : 0x98
},
//PMBus_MFR_Param
{
0, //MFR_VIN_MIN : 0xA0
0, //MFR_VIN_MAX : 0xA1
0, //MFR_IIN_MAX : 0xA2
0, //MFR_PIN_MAX : 0xA3
0, //MFR_VOUT_MIN : 0xA4
0, //MFR_VOUT_MAX : 0xA5
0, //MFR_IOUT_MAX : 0xA6
0, //MFR_POUT_MAX : 0xA7
0, //MFR_TAMBIENT_MAX : 0xA8
0, //MFR_TAMBIENT_MIN : 0xA9
0, //MFR_EFFICIENCY_LL : 0xAA
0 //MFR_EFFICIENCY_HL : 0xAB
}
},
};
2.相应头文件中定义
extern PMBUS_CMD PMBus_CMD;
3. .dflash本身就已定义
结果下载程序后无法执行程序, 现象是无法切换到PFlash中!
请高手指点!!!!
自己顶!!
您好,
UCD3028的DFlash只存储一些数据,比如欠压保护电,过压保护点的默认值等。但您的程序中却包含了PMBus的指令,这是不合适的。
回到您的问题,如果是产品加工完毕后,因为硬件参数有漂移,打算通过软件进行calibration,可以通过TI 免费提供的Fusion design online软件在线进行。
附件是操作的步骤,请参考。
当然,通过该软件实现在线的修改,前提是UCD3028的程序代码做好了定义,以实现UCD3028通过PMBus“接收”用户新写入的参数。
软件代码因涉及太多操作,建议您参考TI提供的EVM代码程序。
如果您打算索取TI免费提供的代码程序,可以联系我。 Neil-li@ti.com
谢谢。
hello neil,
你可能误会了, 我在DFlash中并未包括PMBus命令!!
包括的只是PMBus命令的数据!!
注释是我用来将数据与PMBus命令进行对应而做的!!
你的建议和可以考虑! 但是把这么复杂的操作交到产线, 可能会出错, 这可能是产线生产不允许的!!
这是我的邮箱, 欢迎一起讨论!!!
mr.leeyou@hotmail.com