大家好!
我想问下, 如何对UCD3xxx系列芯片的内部DFlash进行操作!
我司有电源使用该系列芯片, 在生产过程中, 发现有些参数由于器件离散性比较大, 造成某些指标不合适,
比如VIN过,欠压保护点, 不合格!
想通过在生产过程中, 通过软件调整到合格范围, 但不是很清楚, 该芯片内部对DFlash的操作,
所以, 请高手指点一下!
最好详细些! 或者有pdf文件最好!
先谢过!!
you lee1:
没人知道吗??
you lee1:
回复 you lee1:
我看到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中!
请高手指点!!!!
you lee1:
回复 you lee1:
自己顶!!
Neil Li:
回复 you lee1:
您好,
UCD3028的DFlash只存储一些数据,比如欠压保护电,过压保护点的默认值等。但您的程序中却包含了PMBus的指令,这是不合适的。
回到您的问题,如果是产品加工完毕后,因为硬件参数有漂移,打算通过软件进行calibration,可以通过TI 免费提供的Fusion design online软件在线进行。
附件是操作的步骤,请参考。当然,通过该软件实现在线的修改,前提是UCD3028的程序代码做好了定义,以实现UCD3028通过PMBus“接收”用户新写入的参数。
软件代码因涉及太多操作,建议您参考TI提供的EVM代码程序。如果您打算索取TI免费提供的代码程序,可以联系我。 Neil-li@ti.com
谢谢。
you lee1:
回复 Neil Li:
hello neil,
你可能误会了, 我在DFlash中并未包括PMBus命令!!
包括的只是PMBus命令的数据!!
注释是我用来将数据与PMBus命令进行对应而做的!!
你的建议和可以考虑! 但是把这么复杂的操作交到产线, 可能会出错, 这可能是产线生产不允许的!!
这是我的邮箱, 欢迎一起讨论!!!
mr.leeyou@hotmail.com