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.

TMP107: TMP-107 sensor address changed after couple of days

Part Number: TMP107

In our application we are using 4 TMP-107 sensors which are connected in Daisy chain. We have done only once Address Initialize by providing address of first device is 1. Below is the command sequence

0x55u , 0x95u , 0x0Du (Address Assign 0x0D and Address of first sensor is 1 and address are from 1 to 4 ).

The address installation is successful and temperature reading of the temperature of all 4 sensors by using Global Temperature Read command is proper. We are using below command sequence for reading temperature data of all 4 temperature sensors.

0x55u, 0x23u (Global Read data command 0x23 up to Sensor ID 4 ) , 0xA0u ( Temperature register address ).

The only global read temperature command is performed every second in our  application. This is working fine for couple of days even after several power cycles of device.

Problem scenario:

After couple of days it is observed (after power up) no response is received from the daisy chain for read temperature command and this issue persist after power recycle also.

To debug this issue we tried Last Device Poll command to check either the device addresses are intact or not. Surprisingly we got 0x73 instead of 0x23.

We have tried

Query:

  1. Is there any way/chance the device address can get changed/corrupted apart from Address Initialize command?

  2. Is there any command/way to see the command stack/trace of the device?

Quick response highly appreciated.

Thanks,

LOKRAJ,

  • Hi Lokraj,

    Your address initialization and global read command process look correct.

    1. There should be no way, outside of an address initialize command or device damage, that the address of a TMP107 in the chain will update. Can you verify with an oscilloscope that the address is being read properly and that the signal integrity looks good? Can you also try doing an individual read from registers 1-3 to see if these addresses are still the same? If there was another address initialization at some point then they would also be different. 
    2. Unfortunately there is no way to see the command stack on the TMP107. 

    Best Regards,
    Brandon Fisher

  • Hi Brandon Fisher,

    I have done below experiments to debug the issue today:

    Global Temperature Read command up to device address 14:

    Received only one temperature value which is valid one, instead of 4.  Does this mean the first device is only responding?

    command: 0x55, 0x73 (Global Read data command 0x73 up to Sensor ID 14) , 0xA0 ( Temperature register address ).

    Global Temperature Read command up to device address 3:

    No response from Daisy chain.

    command: 0x55, 0x1B (Global Read data command 0x1B up to Sensor ID 3) , 0xA0 ( Temperature register address ).

    Global Temperature Read command up to device address 1:

    No response from Daisy chain.

    command: 0x55, 0x0B (Global Read data command 0x1B up to Sensor ID 1), 0xA0 (Temperature register address).

    Global Configuration and alert Register Read command up to device address 14:

    Received valid configuration and alert values for only one device, instead of 4.  Does this mean the first device is only responding?

    Please find my response below:

    Can you verify with an oscilloscope that the address is being read properly and that the signal integrity looks good?

    Unfortunately, I have performed Address Initialization by providing address of first device is 1. After that response for Global Temperature Read command for all four devices is received properly. Below is the command sequence 0x55u, 0x95u, 0x0Du (Address Assign 0x0D and Address of first sensor is 1 and address are from 1 to 4).

    If there was another address initialization at some point then they would also be different. 

    Does this mean there is a possibility that the address would be different if multiple initialization command received during the address initialization process (assignment and storing process in EEPROM).

    Is there any possibility that the address would be different if address initialization step is interrupted due to power interruptions?

    Thanks,

    Lokraj

  • Hi Lokraj,

    LOKRAJ PATRO said:

    Global Temperature Read command up to device address 14:

    Received only one temperature value which is valid one, instead of 4.  Does this mean the first device is only responding?

    Not necessarily, if the addresses were re-initialized improperly at some point there may have been some contention on the bus the prevented proper responses. The fact that re-initializing the chain fixed it it and shows that all devices in the chain are still properly connected, at least physically. 

    LOKRAJ PATRO said:

    If there was another address initialization at some point then they would also be different. 

    Does this mean there is a possibility that the address would be different if multiple initialization command received during the address initialization process (assignment and storing process in EEPROM).

    Is there any possibility that the address would be different if address initialization step is interrupted due to power interruptions?

    It is necessary to avoid any interruption of the power supply while initializing the addresses, as this can cause unknown behavior. It is also true that issuing commands during the address initialization can cause issues due to bus contention, which will most likely be followed by a timeout. Note that each device in the chain can need up to 16ms, uninterrupted, to write the address correctly to EEPROM. 

    You can avoid worrying about this issue by initializing the address chain only once, and not every time at start up. If you have a reason to believe that an incomplete address initialize was performed then its best to perform another one. 

    Additionally, the EEPROM can only be written to a finite number of times. Writing to it at every start up will eventually cause the EEPROM to fail. 

    If you need a good reference, http://www.ti.com/tool/BOOSTXL-TMP107 includes some example source code that you may find helpful. 

    Best Regards,
    Brandon Fisher

  • Hello Lokraj

    Usually TMP107 is very good for keeping chain address

    Usually problems appeared when last part IO2 pin is grounded. Instead leaving it floated connect 10-20KOhm pullup resistor to it

    Also problems can appear when supply line is broken. parts can pretend to work with disconnected power supply line. But than, their work is not stable if you are not following special rules. So check the supply voltage on the last part in the chain

    An EEPROM address storing (during init command)  needs to have the supply voltage above 1.8V on every parts. 

    I am sure you didn't forget to put supply caps 100nF on every part

    Most possible complications are described in http://www.ti.com/lit/an/sboa138a/sboa138a.pdfGoo   ; Good luck. Michael

  •  

     

    Hi Brandon Fisher,

    You can avoid worrying about this issue by initializing the address chain only once, and not every time at start up. If you have a reason to believe that an incomplete address initialize was performed then its best to perform another one. 

    Additionally, the EEPROM can only be written to a finite number of times. Writing to it at every startup will eventually cause the EEPROM to fail. 

    Yes, we are performing the address initialization of chain only once, since it is stored in EEPROM of the TMP107.

    It is necessary to avoid any interruption of the power supply while initializing the addresses, as this can cause unknown behavior. It is also true that issuing commands during the address initialization can cause issues due to bus contention, which will most likely be followed by a timeout. Note that each device in the chain can need up to 16ms, uninterrupted, to write the address correctly to EEPROM. 

    The address initialization operation is not interpreted until our application receives Address Response Bytes from all four sensors with in one second. Application checks for BUSY status bit of Temperature Register (address = 0h) register even after receiving Address Response Bytes from all four sensors to ensure EEPROM write operation is completed.


    Thanks & Regards,

    Lokraj.

  • Hi Mihail,

    Usually problems appeared when last part IO2 pin is grounded. Instead leaving it floated connect 10-20KOhm pullup resistor to it.

    In our device the IO2 pin of last TMP107 is floating. Is It required to connect 10-20KOhm pullup resistor to it?

    I am sure you didn't forget to put supply caps 100nF on every part.

    In our device 100nF supply caps is available for every TMP-107.

    Thanks & Regards,

    Lokraj.

  • Hi Mihail,

    Please find the below section of datasheet which says float the I/O2 pin of last device . Please let us know your thoughts.

    Thanks & Regards,

    Lokraj

  • Hi Mihail,

    Please find the below section of datasheet which says float the I/O2 pin of last device . Please let us know your thoughts.

    Thanks & Regards,

    Lokraj

  • Hi Lokraj,

    Have you seen this issue across anymore chains of TMP107s or have you seen it multiple times? Or is there one chain in particular that has been causing issues?

    Even if you can't capture an image of the failed address reading, if you are able to provide a capture of the line during an address initialize command that would be helpful. 

    Best Regards,
    Brandon Fisher

  • Hello Lokraj

    The pull-up on the last part IO2 pin is not mandatory. Part has internal pull up 100 KOhm resistor, but if you have some long wire (antenna) connected to this pin and noise environment, some glitches can affect chain initialization and chain work. Otherwise you don't need it. But you can try.

    The best practice is after the initialization to read the last part address. It should be 4 in your case.

    Did you check the voltage between GND pin and Vd pin on the last part? Does it match the expected voltage?

    What communication speed do you use? What supply voltage you use?

    Best Regards, Mihail

  • Hi Mihail,

    Please find my response below:

    The pull-up on the last part IO2 pin is not mandatory. Part has internal pull up 100 KOhm resistor, but if you have some long wire (antenna) connected to this pin and noise environment, some glitches can affect chain initialization and chain work. Otherwise you don't need it. But you can try.

    In our device all four sensors connected nearby within few cms. There is no long gap between sensor to sensor in daisy chain. The one-time chain address initialization process was successful and we can read the temperature data of all four-temperature sensors using global temperature read command. However, after few days the global temperature read command up to device 4 is failed due to no response from daisy chain. The daisy chain recovers from this scenario once the re chain re initialization is performed.

    The best practice is after the initialization to read the last part address. It should be 4 in your case.

    After initialization the Address Response Byte from all four sensors are checked including last one.

    Did you check the voltage between GND pin and Vd pin on the last part? Does it match the expected voltage?

    The voltage between GND pin and Vd pin on the last part is 2.838V, Which is within the Range of 1.7V to 5.5V.

    What communication speed do you use? What supply voltage you use?

    The baud rate is 9600. 24V DC supply voltage used to power our device ,3.3V is derived from 24V for TMP107 sensors.

    Thanks & Regards,

    Lokraj.

  • Hello Lakraj

    Why the last part supply voltage is 2.83V when the chain supply voltage is 3.3V?

    I suspect your supply line is broken somewhere and remaining parts got feeding through IO1 pin ESD cell in some part. If you want you can work in this mode, but than you need to follow some communication rules. But I don't think it is needed in your compact design.

    Best Regards

    Mihail