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.

TMDSCNCD263-PMIC: TPS650332-Q1

Part Number: TMDSCNCD263-PMIC
Other Parts Discussed in Thread: TPS650332-Q1

Tool/software:

Hi, Phil Yi40,

I have a question to consult about. In order to reduce the number of kernel calls, we hope to be able to read the values of multiple consecutive registers at once.

But we read multiple registers with consecutive addresses, it seems that only the value read from the first register is correct. Is it because multiple registers cannot be read at once in TMDSCNCD263-PMIC?

for example:

I read five sets of registers, and the addresses of the registers in each set are consecutive. There are a total of 16 registers, and the values read are:

When I read the values of these 16 registers separately, the values read are:

From the above results, it can be seen that the values of registers obtained through continuous reading and individual reading are different. Why does this phenomenon occur?

We are looking forward to your reply.

  • Hi Jiafan,

      TPS650332-Q1 is a GPN which doesn't provide detail NVM settings. Can you please give me the OPN so I can check if the device I2C has CRC feature enabled. 

      If its I2C has CRC enabled; you can refer to this FAQ linked here for proper I2C reading implementation. 

    Thanks!

    Phil

  • Hi Phil,

        The OPN "TPS65033200-Q1" has I2C_CRC enabled. Eight months ago, my colleague consulted about other issues, and we were working on the same project. This is the problem details: e2e.ti.com/.../tmdscncd263-pmic-tps650332q1-fault-development

        Perhaps my description was not clear enough:

        We hope to be able to read the values of multiple consecutive register addresses through a single register read operation. Do you support this operation?

        Because these values are different between reading multiple register values by performing multiple register operations and reading multiple registers by performing one register operation. And I think it's no problem to read the values of multiple registers by performing multiple register operations, so why is it wrong to read the values of multiple registers through a single register read operation?

    Thanks!

    Jiafan

  • Hi Jiafan,

      This is the first time I heard the issue you're facing; we have many customers reading multiple register values without the issue. 

      Please make sure to insert the CRC byte for every byte reading; it's the only reason I can see now. 

    Thanks!

    Phil

  • Hi Phil,

        Can you help confirm this issue?
        When I read the value of register 0x04, it is 0x1e, where CONFIG_CRC_EN=1, which means CRC is enabled by default.

        I can directly read the value of a single register through i2castercmd, but when I read multiple consecutive registers, the resulting values seem to be problematic. As shown in the following picture :

           

        1. So I'm not sure if CRC is enabled? If it is enabled, why can I directly read the value of the register through i2cmastercmd without the need for CRC byte bits.
        2. Since I can read the value of a single register. I also want to know why reading multiple consecutive values is incorrect? Can you help verify this?
        3. Can I close CRC? If so, can you provide a method to close it

  • Hi Jiafan,

      From your reading 0x00=0xDA; 0x01=0x59; the OPN is "TPS6503320A-Q1" which has I2C_CRC_EN=1 meaning I2C_CRC enabled.

      Also, the OPN "TPS6503320A-Q1" is in mass production and no longer re-programmable which means no way to disable its I2C_CRC.

     What's the reason you need to read all registers value? Any real issues you need to fix? 

    Thanks!

    Phil

  • Hi Phil,

        Thank you for your reply.

        The purpose of reading all register values is to reduce the number of kernel calls and minimize IPC communication resources.
        Because we currently need to read a large number of registers, if we turn on the CRC function, we can only read one register at a time and cannot read in batches.

    I have another question, since CRC is enabled, why does it seem that CRC bits do not need to be added when reading a single register.

    Thanks

    Jiafan

  • Hi Jiafan,

       After checking with our design team, it's clear now: 

    1. When read a single register, the data is sent back before the CRC; that's why the reading gets correct value.
    2.  The PMIC auto-increment of register address is disabled when I2C CRC is enabled; that's why reading all register values once is not possible. 

      

    Thanks!

    Phil