The TI TCA6408A is a wonderful little chip when you need a few more I/O. It’s simple to program and use… so why did pressing the button attached to one of the pins cause the chip to reset? Read on to find out.
I recently had a design that was pretty simple. The TCA6408A was the only active component. There was one resistor, three caps and a TVS. How hard can it be, right? The first boards came back and I built the first two up. I had to fix a few solder opens, but things seemed to be working fine… except for P0. Whenever I hit the switch attached to that pin, the device stopped responding to my I2C queries.
It’s a simple chip right? I checked out the second board I built and had the same problem with it. I changed out the passives attached to that pin. I changed out the TCA6408A just to be sure. I went back to the schematic and datasheet to make sure I hadn’t swapped pins when creating the symbol and layout item. They looked good. I built up two more prototypes and all performed flawlessly… except for P0.
I added extra capacitance on the VDD pin. No luck their. At this point I figured I had to have done something wrong with the I2C code I was using to talk to the device. I tried to whip together two other I2C masters from demo board I had laying around the office. No luck. I went back to the original I2C master and added code to validate that the settings were correct on the TCA6408A. They were correct.
At this point several days had passed and I found myself dreaming about the design. I kept coming back to the idea that something was causing the chip to brown out, but what? The image above shows the switch with simple debounce circuitry attached to it. It is the same for all the pins on the TCA6408A. I decided to remove the capacitor to ground and see how the switch behaved. Lo and behold, the chip no longer reset, but showed the switch depressed. Hallelujah!! For whatever reason the current pulled through the pin when the capacitor tried to charge up was enough that it caused the chip to brown out. Why is P0 different than all the others? The only thing I can think of is that it is close to the reset pin and the current surge through P0 when the cap charges is enough that it pulls the reset pin low and resets the device. Crazy? I think that a Sherlock Holmes quote is in order:
when you have eliminated the impossible, whatever remains, however improbable, must be the truth.
I hope you enjoyed the harrowing tale of hardware horrors. Here’s to a happy 2015 and may all your debugging be successful.