I have devices operating from 2S Li-ion battery (max 8.4V). They consist of 2 PCBs - the first one contains a 3.3V voltage regulator and an ATmega1284P, while the second one has MDBT50Q-U1MV2(nRF52840 based module) on board.
The two PCBs are connected with an 8-pin Pico-Clasp 10cm wire which, among other signals, carries 3.3V, GND, and UART (TX, RX) lines. This is a simplified, stripped-down schematic.
During normal operation, the nRF module requests a custom status packet over UART (baud rate 57600) every 5 seconds, and the ATmega replies back. Recently, I started experiencing weird issues on some devices where the UART communication stops and does not recover even after device reboot. The firmware on both microcontrollers runs fine without crashing.
Inspecting the UART lines using an oscilloscope revealed the packets from nRF52840 are still going through, but the logic high voltage level is very small (far from 3.3V). Resistance measurement showed that both GPIOs used for TX and RX on the nRF52840 side have decreased resistance to GND (200ohm instead of 2.5M measured on other devices). To eliminate potential short somewhere in the module, I opened the module, desoldered the nRF IC, and measured with the same result, so the short is in the silicon. The ATmega doesn't have problems and works fine with a different nRF module.
This sounds to me like a prime example of the internal clamp diodes being fried by ESD, however:
- the device is encapsulated in an enclosure, so no GPIOs are accessible from outside
- it's always only the two (RX and TX) pins on the nRF side that are showing this issue
- every device is fully checked for several days after being assembled and works fine - the problems arise later, while in the enclosure
My questions are:
- The enclosure is made of the SLS 3D printed nylon. Could it generate enough static electricity during movement to cause something like this? The devices are experiencing a lot of mechanical movement (repetitive shaking).
- Since it's always the UART pins, could it be the ATmega1284P outputting something destructive? It is 5V tolerant but runs on 3.3V so I wouldn't assume it ever exceeds it.
- Could any dangerous voltage spikes be induced in the 10cm long wire during rapid movements (e.g. Eddy currents), or impedance mismatch / reflections due to high speed signal and long wires?
- The UART lines are connected directly. Would it make sense to include an external ESD protection such as steering Schottky diodes + TVS (e.g., SRDA3.3), maybe series resistor to limit the current. Or even small mosfets, as used in level shifters, just to isolate the domains? What configuration would you recommend, and on which of the PCBs?
I would be really helpful if you could help me figure out what could be causing this issue.
Thank you.
EDIT:
Thank you for your replies.
Just to clarify a few points:
- The cable is never hot-plugged. Once the device is assembled, it stays connected.
- As I mentioned, I have provided a simplified, stripped-down schematic, which only includes the shared connections. In reality, the ATmega PCB also contains motor drivers, push-button controller, high-side switch mosfet with voltage divider to sense the battery, buzzer, etc. The nRF board has I2C sensors, IMU, external flash, and one section of the PCB has an analog front-end IC (with separate, filtered 3.3V).
I am attaching a layout views for both PCBs.
- I have noticed that the 8.4V domain runs on the In2.Cu layer around the vias with the UART lines. Is it possible that a momentary short occurs between them, so the nRF (abs. max 3.6V) fries, while the ATmega (abs. max 6V) survives?
- I have quite a few test/programming pads on the PCB. Can these serve as ESD pickup points even when the device is fully enclosed?