电源技术论坛
直播中

蒋美燕

8年用户 967经验值
私信 关注
[问答]

LTC3888无法进行STORE_USER_ ALL把配置保存到EEPROM,怎么解决?

//设置0x40寄存器
[UTM2C(io0) /pwr/ltc3888]$ write 0x40 0xffe
[40] VOUT_OV_FAULT_LMT ....> 0ffe
[UTM2C(io0) /pwr/ltc3888]$ read 0x40
[40] VOUT_OV_FAULT_LMT ....> 0ffe (1.000V)
//保存到EEPROM
[UTM2C(io0) /pwr/ltc3888]$ write 0x15
[15] STORE USER DATA ......> send 0x15
[UTM2C(io0) /pwr/ltc3888]$ read 0x40
[40] VOUT_OV_FAULT_LMT ....> 0ffe (1.000V)
//重新加载EEPROM的信息,却还是default的值,说明没有保存成功
[UTM2C(io0) /pwr/ltc3888]$ write 0x16
[16] RESTORE USER DATA ....> send 0x16
[UTM2C(io0) /pwr/ltc3888]$ read 0x40
[40] VOUT_OV_FAULT_LMT ....> 0e15 (0.880V)

回帖(1)

三心四意

2025-6-26 17:50:02

根据您的描述,LTC3888无法将配置保存到EEPROM(通过STORE_USER_ALL命令),具体表现为:设置寄存器0x40(VOUT_OV_FAULT_LMT)为0x0ffe(1.000V)后,尝试保存到EEPROM(write 0x15),但随后从EEPROM恢复(write 0x16)时,值回退到默认值0x0e15(0.880V)。这表明EEPROM写入未成功。


问题原因


LTC3888的EEPROM写操作需要先解锁写保护机制,默认状态下EEPROM是写保护的,以防止意外修改。您的操作序列中缺少解锁步骤(MFR_EE_UNLOCK命令),导致STORE_USER_ALL(命令0x15)无法生效。其他可能的原因包括:



  • 解锁未执行:LTC3888要求在执行STORE_USER_ALL前,必须发送MFR_EE_UNLOCK命令(命令代码0xBD)并写入特定值(0x3C)以解锁EEPROM。

  • EEPROM写入延迟:EEPROM写入操作可能需要几毫秒到几十毫秒完成,如果系统在写入过程中被重置或读取太快,可能导致失败。

  • 硬件或通信问题:如果电源不稳定、I2C/SMBus信号质量差或EEPROM硬件故障,也可能导致写入失败(但解锁是首要解决点)。

  • 寄存器锁定:某些关键寄存器(如配置寄存器)被锁定,但根据您的序列,这不像是主要问题,因为您能正确写入0x40。


解决方案


为解决问题,您需要修改操作序列,添加EEPROM解锁步骤和必要的等待时间。以下是完整的步骤说明,基于标准LTC3888数据手册(参考ADI LTC3888 datasheet)。操作使用您的命令行接口(类似于PMBus工具的命令,如writeread)。


1. 添加EEPROM解锁步骤



  • 发送MFR_EE_UNLOCK命令(命令代码0xBD),写入值0x3C以解锁EEPROM写操作。

  • 命令示例:$ write 0xBD 0x3C

    • 这里,0xBD是命令代码(十进制189),0x3C是解锁值(必须写这个值,否则解锁无效)。


  • 为什么需要解锁? LTC3888默认启用EEPROM写保护,解锁后只对当前操作有效(设备重启后写保护会恢复)。


2. 执行保存操作(STORE_USER_ALL)



  • 发送STORE_USER_ALL命令(命令代码0x15)以保存当前配置到EEPROM。

  • 命令示例:$ write 0x15(与您的原始操作相同)。

  • 关键:在执行后添加短暂等待(例如10–20ms),因为EEPROM写入需要时间。您可以在发送命令后使用工具提供的延时功能(如sleep 0.02),或读取状态寄存器检查操作是否完成(建议方法见第4步)。


3. 重新加载并验证配置



  • 发送RESTORE_USER_DATA命令(命令代码0x16)以从EEPROM加载配置。

  • 命令示例:$ write 0x16

  • 读取目标寄存器(如0x40)以验证保存是否成功:$ read 0x40

    • 如果值保持为0x0ffe(1.000V),则保存成功;如果还是默认值,则可能有问题。



4. 检查状态寄存器(可选但推荐)



  • 在解锁、保存和恢复操作后,读取状态寄存器(例如MFR_STATUS或PMBus状态字)以确认是否有错误。

  • 命令示例:

    • 读取状态字(PMBus命令代码0x79):$ read 0x79

    • 如果状态非零,表示有错误(如EEPROM写入失败)。常见错误位包括VOUT_OV_FAULT或其他MFR相关错误。

    • LTC3888还提供MFR_EE_STATUS(命令代码0xBD)来检查EEPROM状态,如果值为0表示操作成功。



完整操作序列示例


以下是修改后的序列,包括解锁和等待步骤。假设使用您的命令行工具,每条命令后等待响应(如果工具支持延时,添加sleepdelay)。


# 步骤1:设置寄存器0x40(过压故障限制)
$ write 0x40 0x0ffe
# 验证设置:值应为0x0ffe
$ read 0x40

# 步骤2:解锁EEPROM写操作
$ write 0xBD 0x3C  # 发送MFR_EE_UNLOCK命令,写入0x3C

# 步骤3:保存配置到EEPROM
$ write 0x15  # 发送STORE_USER_ALL命令
# 等待EEPROM写入完成(推荐10-20ms延迟)
# 如果工具不支持自动延时,添加:sleep 0.02 或类似
# 或读取状态:$ read 0x79 检查错误(应为0)

# 步骤4:恢复EEPROM配置进行验证
$ write 0x16  # 发送RESTORE_USER_DATA命令
# 验证恢复后的值:应为保存的值0x0ffe
$ read 0x40

# 可选:重新锁定EEPROM(如果不手动锁定,重启后也会自动恢复)
# $ write 0xBD 0x00  # 写0xBD 0x00重新锁定,但通常不需要

附加建议




  • 工具和通信检查



    • 确保您的PMBus/I2C工具(如i2csetpmbus命令或自定义接口)正确连接。LTC3888的I2C地址通常是0x5C(默认),但需确认。

    • 使用示波器检查I2C/SMBus信号质量,噪声或信号失真可能导致命令失败。

    • 如果使用脚本,添加错误处理(如重试机制或状态检查)。




  • EEPROM写入时间



    • LTC3888的EEPROM写入时间典型值为5ms,最大20ms(参考数据手册)。在发送STORE_USER_ALL后,强制添加延时(例如Linux下使用sleep 0.02),以避免提前读取。




  • 固件或硬件问题



    • 如果解锁和保存后问题依旧,检查电源电压:LTC3888的操作电压范围(通常2.25V至5.5V),EEPROM写入需要稳定电源。

    • EEPROM寿命有限(约100,000次写入),如果频繁操作,可能硬件损坏。必要时更换芯片。

    • 更新Linduo软件或固件:ADI提供Linduo工具,支持LTC3888的完整配置(包括GUI方式执行保存操作)。




  • 参考文档



    • LTC3888数据手册:ADI LTC3888 Datasheet,查看第7.3节(EEPROM Operations)和第48页(Command Codes)。

    • 关键命令代码:

      • STORE_USER_ALL: 0x15

      • RESTORE_USER_DATA: 0x16

      • MFR_EE_UNLOCK: 0xBD(写入0x3C解锁,写入0x00锁定)


    • 状态寄存器:PMBus状态字(0x79)或MFR_EE_STATUS(0xBD)。




通过添加解锁步骤(write 0xBD 0x3C),您应该能成功保存配置。如果问题仍然存在,提供更多细节(如工具输出、状态寄存器值或系统环境)以进一步分析。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分