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.

TMP116: EEPROM/I2C General Call - Soft Reset/TMP117 Soft Reset

Part Number: TMP116
Other Parts Discussed in Thread: TMP117

I am working through programming the TMP116 and I have some questions on programming the EEPROM.

At the end of updating the registers the spec sheet calls for a I2C General Call Soft Reset command to be used to reset the device and force a reload of the registers etc.

Is there another way other than to issue the general call - Soft reset?   I see in the spec sheet for the TMP117 there is a software reset available in the config register.   On the TMP117, can the soft reset via the config register be used in place of the i2c generall call - soft reset to commit the data and reset the device?

I  have certainly used i2c general call and it works.  I have tried using the TMP117 soft reset bit on the TMP116 in hopes that it would work, but it does not.

The issue with issue using the I2c general call soft reset is that you will reset every device on the 12c bus that response to the reset at the same time.  

  • Hello Edward,

    The Soft reset bit for TMP117 does not exist in the TMP116 device configuration register. I don't believe the soft reset bit in the TMP117 can replace the I2C general call to soft reset the bus. I can check though and confirm.
  • Thanks. The real question on the TMP117 is if the soft reset via the config register can ensure that data is correctly written to EEPROM when the tmp117 is soft rebooted. This would get around issue of having to issue the general call to commit the data to EEPROM. In my situation I was hoping to use 16 TMP116s/TMP117s (yes, with a mux). But in order to use the EEPROM in the TMP116/TMP117 you need to use the general call reset to write the data. However, issuing a general call reset would reset ALL 16 sensors AND ANY OTHER i2c device on the bus that responds to the same general call reset. In my case that's another half dozen ICs. In an RTOS (or nearly any other situation) this effectively changes the state of the other sensors and other i2c devices on the bus and all software process are now effected. The only choice is to essentially reboot the whole OS to get things back in to a state of sanity. And of course, if you were to write to all 16 tmp116s, that would mean 16 reboots. I am hoping that the tmp117's soft reset fixes this.

    An alternative solution might be to unlock the eeprom, write the changes to the registers, and rather than using a general call to commit the data and reset the tmp116/tmp117, to hard reset it. In other words, I could use a GPIO to control the power to the TMP116/TMP117s, then reset the sensors via toggling the power rather than using the i2c general call reset. Will that work?

    Thanks
  • Hello Edward,

    I don't think that the TMP117 Soft reset bit in the configuration register would have the same effect or at least no mention of the same is there in the documentation. I will need to check to make sure I am correct in my interpretation of the data.
  • Hello Edward,

    I checked the programming of the device on a TMP117 and it seems that the power cycle works fine for the TMP117. The sequence of events that I did was as per the datasheet, except that instead of the I2C General Call, I used the GPIO to power cycle with 15 ms wait for the device to power down after the GPIO was made 0, before powering it up.

    Additionally, I made sure that the device was configured not to perform any conversions when the EEPROM was being programmed.
  • Amit

    1) I have verified that using a GPIO to power down/up to reset works on the TMP116 as well. I did something similar to what you did, in my case I powered down for 50ms. This works, but is a little ridiculous as a work around.

    2) I assume when you say you "made sure that the device was configured not to perform any conversions when the EEPROM was being programmed", you mean you used the shutdown mode to accomplish this? This does not appear to be a requirement from the documentation. Do you feel it is necessary? If so, then how would you write to eeprom a configuration where you need continuous conversion to persist in eeprom?

    3) I do not have access to a tmp117, but you do. Can you also try and see if the software reset via the config register also works? I can then right my code for the tmp117 and use it when it becomes available. This would be much cleaner.

    4) Looking carefully at the flow chart in figure 24 for the TMP116 and Figure 19 for the TMP117, notice the wording around the dashed box - "programming process". This is not described in the text, but a possible interpretation of the box and text is that programming is complete prior to the i2c general call reset. This would mean that the general call reset would be just a good practice to make sure what you read back after a reset is the values you programmed earlier and they are re-loaded correctly. This would be consistent with why the power down/up works for both the tmp116 and tmp117. But this is a interpretation, not something I can rely on for a product we ship to the market place. Can you verify that this is the fact?

    Thanks
  • Hello Edward

    1 and 4: I powered it down for 15 ms for TMP117. The General Call for Reset or Power Down/Up is required to make sure that the EEPROM loads the value of the EEPROM Register correctly from the NVM
    2: This is mentioned in both the TMP116 and TMP117 datasheets as "Avoid using the device to perform temperature conversions when the EEPROM is unlocked". My understanding is with the EEPROM unlocked, any write to the registers may also get committed to the NVM. Now the question may be why would the software write to the registers during this time? This is hard to state since every application software may have a different requirement.
    3: Yes, soft reset works for TMP117. To test the same, I read back the values from EEPROM1 and EEPROM2 registers. This was then followed by a write to EEPROM1 register before unlocking it and to EEPROM2 register after unlocking. Then read back both registers to make sure new data is there. Once done, issued a soft reset and then read back both registers. Only EEPROM2 had the updated value while EEPROM1 had the old value.

    Hope the information provided here is helpful.