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.

[参考译文] BUF16821-Q1:读取 NV 伽马值是四个值之一不正确

Guru**** 2587345 points
Other Parts Discussed in Thread: BUF16821

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/809629/buf16821-q1-read-nv-gamma-value-is-one-of-four-is-not-correct

器件型号:BUF16821-Q1
主题中讨论的其他器件:BUF16821

你好

我的客户使用相同的平台、相同的读/写方式、读出四个终端,只有第一个数据是正确的,会发生什么情况?

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

    您好 Fandy、

    我已就此主题通知了我们的专家。 请在19年6月12日之前回复。

    谢谢、

    Aaron

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

    您好 Fandy、

    有几个问题:

    -这是对 DAC 寄存器还是 EEPROM 的写操作?

    -这是否是对 DAC 寄存器的立即写入? (D15=1或0)

    -问题是回读? 这是 DAC 输出电压 问题、还是只是 读回问题?

    我的理解:

    - 加电后、例程写入 DAC 寄存器0至3 "376hex"并回读:

    -out1:0x376 (正确)

    -out2:0x2ff (错误)

    - OUT3:0x001 (错误)

    -out4:0x2ff (错误)

    是否发生在多个器件或仅1个器件上?

    谢谢、

    Costin

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

    您好 Costin

    谢谢、请参阅以下客户回答

    -这是对 DAC 寄存器还是 EEPROM 的写操作? A-A:EEPROM

    -这是否是对 DAC 寄存器的立即写入? (D15=1或0)-- A: D15:0;D14:1

    -问题是回读? 这是 DAC 输出电压 问题、还是只是 读回问题? 答: 只是 回读问题,实际输出电压是可以的。

    我的理解:

    - 加电后、例程写入 DAC 寄存器0至3 "376hex"并回读:

    -out1:0x376 (正确)

    -out2:0x2ff (错误)

    - OUT3:0x001 (错误)

    -out4:0x2ff (错误)

    是否发生在多个器件或仅1个器件上? a:多个部件

    ///----------------------

    //按如下方式读取 DAC 源代码,它可以吗?

    (笑声)

    对于(i=0; i<4; i++)     //读取 OUT1~4

    CTP_I2C_WriteDat_BUF16821 (0x40|addr[i]);  
    //不确定是不是正确的??
    BUF = CTP_I2C_ReadDat_BUF16821 (addr[i]);
    printf ("\n gamma dat[%d]= 0x%x;"、i、buf);
    delay_ms (50);  

    (笑声)

    ///------------------------------
    uint8_t CTP_I2C_WriteDat_BUF16821 (uint8_t dat)

    I2C_Start();  

    I2C_Send_Byte (0x74<1);
    if (I2C_WAIT_Ack ())

    I2C_Stop ();
    返回 1;


    I2C_Send_Byte (dat);


    if (I2C_WAIT_Ack ())

    I2C_Stop ();
    返回 1;


      I2C_Stop ();  

    返回 0;

    (笑声)

    //------
    uint16_t CTP_I2C_ReadDat_BUF16821 (uint8_t reg)

    uint8_t tmp1、tmp2;
    uint16_t tmp;

    I2C_Start();  

    I2C_Send_Byte (0x74<1);


    if (I2C_WAIT_Ack ())

    I2C_Stop ();
    返回 1;


      I2C_Send_Byte (reg);
    if (I2C_WAIT_Ack ())

    I2C_Stop ();
    返回 1;


    I2C_Start();  

    I2C_Send_Byte ((0x74<<1)|0x01);


    if (I2C_WAIT_Ack ())

    I2C_Stop ();
    返回 1;


    tmp1=I2C_READ_Byte ();


    I2C_Ack ();

    tmp2=I2C_READ_Byte ();


    I2C_NACK ();

    tmp = tmp1&0x03;
    tmp = (tmp<<8) + tmp2;

    I2C_Stop ();


    返回 tmp;

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

    您好 Fandy、

    在我看来、这似乎是一个迭代问题。 我建议先检查回读、而不进行寄存器迭代。

    无需从 dat[0]启动到 dat[3]、只需对每个寄存器执行一次单独的读取操作即可。

    在这种情况下、它是否失败?

    另一项测试是更改寄存器迭代范围、而不是0-3、执行1-3或1-4

    此致、

    Costin

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

    您好 Costin:

    感谢你的帮助。

    ///---------------- 测试模式1:

    {  
     BUF = CTP_I2C_ReadDat_BUF16821 (0x01);
     printf ("\n 读取0x01 = 0x%x;"、buf);
     
     BUF = CTP_I2C_ReadDat_BUF16821 (0x00);
     printf ("\n 读取0x00 = 0x%x;"、buf);
    }  

    UART 打印:

     读取0x01 = 0x2ff;
     读取0x00 = 0x1;

    ///---------------- 测试模式2:

    {  
     BUF = CTP_I2C_ReadDat_BUF16821 (0x00);
     printf ("\n 读取0x00 = 0x%x;"、buf);
     BUF = CTP_I2C_ReadDat_BUF16821 (0x01);
     printf ("\n 读取0x01 = 0x%x;"、buf);
    }  

    UART 打印:

     读取0x00 = 0x376;

     读取0x01 = 0x2ff;

    //------

    结果:只需测试 mode2第一个输出正确

    ========================================================================================

    我的问题:

    如 BUF16821 DS page14描述:

    "要读取特定 DAC/VCOM 通道的非易失性寄存器中存在的数据、主器件必须首先发出通用采集命令或选择相应 DAC/VCOM 通道的单个采集命令。"

    您能给我一个示例代码吗?  (电子邮件: guicai_wang2@tianma.cn)

    非常感谢。

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

    尊敬的  Costin:

    我发现另一个问题:

    如果将 dat "0x2ea"写入 NV 0x00地址、则读取 dat 不正确:

    //------

    ADDR[0]= 0x00;
    DAT[0]= 0x2ea
    CTP_I2C_WriteReg BUF16821 (addr[0]、0x4000|dat[0]);
    BUF = CTP_I2C_ReadDat_BUF16821 (addr[0]);
    printf ("\n gamma dat[0]= 0x%x;"、buf);

    UART 打印: gamma dat[0]= 0x2ff

    ///--------

    更改写入 dat "0x300"、并写入 NV 相同地址、读取 dat 正常:

    ///--------

    ADDR[0]= 0x00;
    DAT[0]= 0x300;  
    CTP_I2C_WriteReg BUF16821 (addr[0]、0x4000|dat[0]);  
    BUF = CTP_I2C_ReadDat_BUF16821 (addr[0]);
    printf ("\n gamma dat[0]= 0x%x;"、buf);

    UART 打印: gamma dat[0]=  0x300

    //------

    我不知道为什么?

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

    你(们)好

    写入 NV 的次数不应超过16

    我下周回来,本周我没有了

    访问数据表

    此致、

    Costin

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

    您好 Fandy、

    对于一个寄存器、您需要 "单次采集命令"、多个寄存器需要"通用采集命令"

    如果超过了 WRITE-16的最大数量、NVM 将停止正常工作。

    我将关闭此主题、让我们继续通过电子邮件发送、请在以下地址向我发送详细信息:

    costin.cazana@ti.com

    此致、

    Costin