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.

TMS570LS1227: I2C stuck when reading EEPROM

Part Number: TMS570LS1227

Hi team,

My customer find a issue about TMS570LS1227 as follows:

When power up the 570, the 570 reading program from EEPROM. Sometimes when reading program from EEPROM at initialization, the I2C will be stuck, as the SCL remains high at 3.3V and SDA remains low, and there is nothing wrong about reading program from EEPROM.

Power down the EEPROM only, waveform can be observed from I2C interface. Then power up the EEPROM, everything goes fine.

So why sometimes the I2C will be stuck when reading EEPROM at initialization? 

Thank you for your answer.

Gary

  • Hello,

    Can you try to put some delay at initialization before start reading from EEPROM?

  • Hi Miro,

    Can you please give me a explanation about this issue? After all I can't just tell my customer to do so without any explanation.

    Thank you for your answer.

    Gary

  • Hi,

    Is there other Slave on the bus? Does they have external pull-ups on the bus?

    I propose the delay to be sure that all voltages are at the stable levels.

  • Hi Miro,

    The 570 and EEPROM is powered by the same VCC3V3, and reading EEPROM is delayed by 20ms after VCC3V3 is stable, and the waveform of 3V3 is stable.

    Now I re-communicate with the customer about the issue and the details are described as follows:

    They use an I2C EEPROM to store some flag bits, and after initializing the 570(initialization time is ~ 20 ms), the 570 begins to read/write the EEPROM. Occasionally, 570 cannot read/write EEPROM and the program will stuck in the read/write section. When this happens, they test the I2C pins and there is no waveform. The probability of occurrence is low, sometimes only once every two weeks.

    So is there maybe some incorrect software configuration or related layout issue, or some other reasons to this issue? 

    Thank you.

    Gary

  • Hello,

    As I understood there is a possibility on the board for disconnecting power supply of the EEPROM. If so, we can understand who is holding the SDA line low with disconnecting EEPROMs power supply. Also, the value in STATUS register could be helpful.

  • Hi Miro,

    Thank you for your suggestion.

    They have tried to disconnect power supply of EEPROM, and after disconnecting it the SDA&SCL waveform appear. 

    So maybe the EEPROM holds the SDA line low. But I have a question about the SCL line: The EEPROM can't hold SCL high because it's open drain output, am I right? So why the SCL keeps high, as 570 can pull the SCL line low and release it.

    Besides, there are so many register in 570. Do you mean I2C status register(I2CSTR)? Or there are some other register may help us locate the cause?

    Thanks again.

    Gary

  • Hello,

    The line is kept high by pull-up resistor.

    One way to override this (when data line (SDA) is stuck LOW and caused by the slave) is the master to send nine clock pulses. The device that held the bus LOW should release it sometime within those nine clocks. If this does not help then only power cycle can help (some slave devices got reset pin).

  • Hi Miro,

    Sorry for the confusion about my question.

    Actually what I want to ask is:

    The SCL line is held high by pullup resistor, and if the TMS570 I2C block is functioning normally it should continue to send out the SCL clock as the SCL line can be pulled down to the GND, no matter whether the SDA is held low, and we should capture the SCL waveform. Now we can see there is no SCL transition, is the I2C block stuck?

    Because when the EEPROM is powered down, the I2C output immediately resumes. So I suppose the program is trying to send out the I2C signal but the I2C block of TMS570 is stuck. Otherwise the SCL should have a waveform.