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.

[参考译文] TPS65.9037万:有关模具温度转换和"已知问题"解决方案的问题

Guru**** 2328790 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/579649/tps659037-question-regarding-die-temperature-conversion-and-known-issues-solutions

部件号:TPS65.9037万

尊敬的各位:

我有几个关于TPS65.9037万 PMIC的问题:

1.是否有关于将片上温度(通道0xC)转换为塞尔斯度的信息?

我可以开始单次转换:

I2C dev 0;i2c MW 0x59 0xCD 0x9C 1;i2c md 0x59 0xCD 3
00cd:8C de 0c ...

但这些值没有意义.....因为没有电阻计电压(最高1.25 V)到摄氏度的映射

使用外部风扇冷却设备时,我可以观察到数值下降,因此我认为它可以正常工作。

2.我正在为GPADC [1]([1]中的第3点)实施"已知问题"修复。

如果我们从冷复位或热复位启动,2.1 是否有方法从TPS65.9037万读取?

2.2 如何触发(使用已构建设备)行为以测试软件是否工作?  

(现在,我刚刚实施了要在系统启动时运行的伪代码)。

2.3 是否可以测试解决方案是否存在"已知问题"-虚拟转换-例如片上温度读数?

文档:

[1] SLIA087–2015年5月- TPS6.5903万x和TPS6591x器件中GPADC使用指南

[2] SLIU015–2015年10月- TPS65.9037万注册图

[3] SLIS165C–2014年12月–2015年11月修订-文档

此致,

Łukasz

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好Lukasz:

    1.对于ADC温度读数,可以使用以下公式:
    电压= 2.64mV*TEMP + 0.753V

    这意味着从ADC代码到温度的完整方程是:

           ((ADC_READ_Data / 2^12)* 1.25)–0.753V
    Temp =------------------
                         2.64mV

    2.1。没有明确的方法来读取冷复位或热复位。 但您可以翻转未使用的位以检查是否已重置。 例如,在加电时设置POWER_CTRL.enable1_mask =0。 如果有热复位,则它将保持在0。 如果有冷复位,则将复位为1。
    另一个选项是在每次重置后执行虚拟读取,无论冷态还是热态。 这意味着您有一些额外的读取,但它不应该有任何其他影响。

    2.2 错误读取是随机的,取决于热重置发生时设备的内部状态。 没有办法强迫这种情况发生。 但这应该发生在当时的50 % 上,所以我希望如果您发出10次热重置,您至少会看到几次错误读取。

    2.3 是,如果GPADC处于此状态,则任何GPADC读取都将返回0。 然后,所有未来GPADC读数都将正确,直至下一次热复位。 因此,您读取的是哪个频道并不重要。

    此致,
    卡尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [报价用户="Karl Wallinger]Hello Lukasz,

    1.对于ADC温度读数,可以使用以下公式:
    电压= 2.64mV*TEMP + 0.753V

    这意味着从ADC代码到温度的完整方程是:

    ((ADC_READ_Data / 2^12)* 1.25)–0.753V
    Temp =------------------
    2.64mV

    [/引述]

    温度转换:
    -----------------------
    >>>((0xca0 / 4096.0)* 1.25 - 0.753)/ 0.0.0264万
    88.38186553030303
    >>>((0xcc8 / 4096.0)* 1.25 - 0.753)/ 0.0.0264万
    93.00574100378788

    因此这些值似乎是正确的。

    [引述]

    2.1。没有明确的方法来读取冷复位或热复位。 但您可以翻转未使用的位以检查是否已重置。 例如,在加电时设置POWER_CTRL.enable1_mask =0。 如果有热复位,则它将保持在0。 如果有冷复位,则将复位为1。

    [/引述]

    当我从u-boot使用"reset"命令和从Linux使用"reboot"命令时-我确实将此位设置为1,因此对于"normal"操作,我的硬件无法强制执行"warm (热)"重置。

    [引述]
    另一个选项是在每次重置后执行虚拟读取,无论冷态还是热态。 这意味着您有一些额外的读取,但它不应该有任何其他影响。

    [/引述]

    这似乎是最佳选项-我将在每次重新启动后执行虚拟读取。

    [引述]

    2.2 错误读取是随机的,取决于热重置发生时设备的内部状态。 没有办法强迫这种情况发生。 但这应该发生在当时的50 % 上,所以我希望如果您发出10次热重置,您至少会看到几次错误读取。

    2.3 是,如果GPADC处于此状态,则任何GPADC读取都将返回0。 然后,所有未来GPADC读数都将正确,直至下一次热复位。 因此,您读取的是哪个频道并不重要。

    [/引述]

    好的,我将读取芯片上的温度以用于此目的


    感谢解释:-)

    此致,

    Łukasz

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Karl,您好!

    如果可以,我将尝试再现TPS6.5903万x上的第二个“已知问题的解决方法”,即自动转换卡住的情况:

    启用自动转换
    ===================================================
    GPADC_Auto_SELECT -通道0 - CONV1
    I2C dev 0;i2c MW 0x59 0xC8 0x00

    GPADC_Thres_CONV1_LSB
    I2C MW 0x59 0xD2 0xFF
    GPADC_Thres_CONV1_MSB
    I2C MW 0x59 0xD3 0x00

    GPADC_Auto_CTRL (间隔1/32s +启用AUTO_CONV1_EN)- 0x20:
    I2C MW 0x59 0xC3 0x20

    一行[1]:
    I2C dev 0;i2c MW 0x59 0xC8 0x00;i2c MW 0x59 0xD2 0xFF;i2c MW 0x59 0xD3 0x00;i2c MW 0x59 0xC3 0x20

    读取结果/状态[2]:
    GPADC_Auto_CONV1_LSB + GPADC_Auto_CONV1_MSB并测试GPADC_Stuck
    I2C dev 0;i2c MD 0x59 0xC7 1;i2c MD 0x59 0xCB 2

    禁用自动转换[3]:
    I2C MD 0x59 0xC3 1;i2c MW 0x59 0xC3 0x00;i2c MD 0x59 0xC3 1

    在u-boot i问题[1]中。
    然后使用"reset"命令(无电源循环)重置主板,并在启动代码中检查GPADC_Stuck Register (地址= 2C7h)中的"Staged"位以进行设置。

    “不幸的是”它总是有效:-)。

    即使显式禁用自动转换(使用[3])并执行[2],也不会显示“卡滞”状态。

    此致,
    Łukasz
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Lukasz:

    关于"锁定GPADC"问题,只有在实际转换过程中重置或禁用时才会发生这种情况。 转换本身仅需~100us,最快的自动转换时间为1/32s =~32ms。 因此,转换期间发生任何重置的概率约为100us/32ms = 0.3 % ,这意味着这种情况不会经常发生。

    我的复制过程是启动自动转换,等待30毫秒,然后发出重置。 如果我循环300次,我可以始终看到GPADC锁定。 我认为30毫秒的等待时间可以是任何一个数字,你只需要一些变化,这样一个重置就会与许多循环中的转换重叠。

    此致,
    卡尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Karl,您好!

    我采取了一些不同的方法:

    CNT =1万; 
    while (--cnt){ tps6.5903万x_errecta_start_auto();
    udelay(10); tps6.5903万x_errat_stop_auto(); ret = tps6.5903万x_errate_locked_GPADC(); if (ret) error("tps6.5903万x errata-locked GPADC failed!"); }

    和起动/停机代码本身:
    int tps6.5903万x_errect_start_auto (void)
    {
    	Palmas_i2c_write_u8 (TPS6.5903万X_chip_P2,0xC8,0x00);
    	Palmas_i2c_write_u8 (TPS6.5903万X_chip_P2,0xD2, 0xFF);
    	Palmas_i2c_write_u8 (TPS6.5903万X_CHIP_P2,0xD3,0x00);
    	Palmas_i2c_write_u8 (TPS6.5903万X_CHIP_P2, 0xC3,0x20);
    
    	返回0;
    }
    
    int tps6.5903万x_erran_stop_auto(void)
    {
    	Palmas_i2c_write_u8(TPS6.5903万X_CHIP_P2, 0xC3, 0x00);
    
    	返回0;
    }
    

    然而,到现在才是运气......

    附注 通过虚拟读取,在重新启动后,我会不时地观察到软件转换结果为0x0000。 然后我能够从PMIC读取适当的片上温度。



    此致,
    Łukasz

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Karl,您好!

    我已修改此代码以启动自动转换,等待30毫秒,然后重新启动。
    (它与您建议的完全相同:-))。

    现在,一段时间后,我就能看到GPADC_stuck。stuck双边设置。
    执行"修复程序"后,SW触发的温度转换正常工作。

    总结:
    --------

    通过上述指南,我可以再现GPADC "已知问题"和测试建议的解决方案代码。

    感谢您的支持,

    Łukasz

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很高兴听到它现在在工作! 如果您有任何其他问题,请告诉我。

    此致,
    卡尔