I have a UART that I'm trying to protect from a few different fault conditions, including short-to-rail (12V), negative voltage, and ESD. I'd typically use TVSes to protect against ESD, and a clamping diode configuration to ensure that the UART RX/TX lines stay within the expected voltage range; however, it occurred to me that I likely need to limit the current to not blow out the clamping diodes if the short-to-rail condition persists.

I was planning on using something like an SRDA3.3-4 to cover ESD/clamping (even though it seems like overkill, I have another in my BOM, so it's convenient). My first thought was current-limiting resistors (~330Ω?) on RX/TX, but that would have an impact on the speed at which I could drive the UART lines, stress on the drivers, etc.

Signaling voltage on the UART is 3.3V.

So here's my questions:

  1. Am I thinking about this the right way?
  2. How would you achieve the stated goal?
  3. Any suggestions on better parts to achieve this?
  • 1
    \$\begingroup\$ Is this a bare UART, or using a transceiver to a line standard such as RS-232, RS-422, etc.? If not, you seem to have discovered, in part, why they exist! \$\endgroup\$ Jan 19, 2023 at 17:14

3 Answers 3


You've essentially covered all the bases. The part you're proposing to use covers you for electrostatic shock, arc faults, and other surges. It's more than fast enough for a UART interface.

High series resistance won't damage your drivers (quite the opposite - it limits current!) but it will cause slow rising/falling edges due to the low-pass filter formed between the series resistance and the parasitic capacitance and inductance in the lines. On the other hand, including some series resistance will help moderate the dI/dt at rising and falling edges, which can help limit ringing/overshoot on the line and reduce conducted emissions. The exact resistance value you use depends on the amount of parasitic capacitance and inductance you're expecting, and the required rise/fall time for the signal.

The optimal approach is to use a pair of series resistors in the following configuration:


simulate this circuit – Schematic created using CircuitLab

The two resistors have different functions. R1 limits the current through the clamping diode, sharing the power dissipation and reducing the chance of failure in short scenarios. However, the clamping voltage will almost certainly exceed the voltage at the MCU pin, so without R2 you'd have something like 6V directly connected to your MCU, and a large current will flow in that direction. R2 acts to moderate that current and reduce the voltage apparent on the MCU pin during a fault condition.

If you use a resistor with a low power rating (e.g. 1/8W) for R1, this can act as a makeshift fuse in short scenarios, causing the faulted signal to be disconnected when R1 melts. You probably don't want this in a consumer product, but for a hobbyist product it can be a good approach.

For 115200 baud UART you might consider 100Ω for both R1 and R2. On a 12V short condition you'd expect to see \$\frac {12V-6V} {100\Omega} = 60mA\$ through R1 and the clamping diode, which is \$(60mA)^2 \times 100\Omega = 360mW\$ dissipated in the resistor. On a 1/4W resistor it should last a few seconds before failing.

In terms of layout, make sure you route your TVS package close to the expected source of the fault (e.g. the connector) as possible, with short traces, and provide a good local connection to ground.

In more extreme environments you might consider optical isolation, but that'd be overkill here.

  • \$\begingroup\$ How would you feel about a total of 50 ohms of resistance on either side of the protection device, with this PTC out in front? digikey.com/en/products/detail/bel-fuse-inc/0ZCM0001FF2G/… \$\endgroup\$
    – foxtrot
    Jan 19, 2023 at 18:07
  • \$\begingroup\$ It wouldn't hurt, but there's obviously a higher cost and more BOM lines if you add PTCs. \$\endgroup\$
    – Polynomial
    Jan 19, 2023 at 19:20
  • \$\begingroup\$ You might want to consider a bit more than 50Ω on the MCU side (R2 is typically higher than R1) unless you're really pushing the data rate on your UART over a long cable with a bunch of parasitic capacitance. Maybe try 220Ω for R2 as a starting point and see how it goes. \$\endgroup\$
    – Polynomial
    Jan 19, 2023 at 19:27
  • 1
    \$\begingroup\$ There's no hard and fast way to cover all bases, but I'd generally calculate the clamping voltage of the TVS/zener package under fault, check the IO pin's max sink current, and then figure out what resistance R2 needs to be under the assumption that the IO was low. So if the TVS clamps at 6V and your IO is at 0V, then with R2=220Ω you get a current of 27mA max, which should be fine for a temporary fault. \$\endgroup\$
    – Polynomial
    Jan 19, 2023 at 21:05
  • 1
    \$\begingroup\$ As another aside, if you're expecting to be in a really nasty ESD-prone environment (e.g. somewhere that is perpetually near 0% humidity) you can also add a TVS diode with a standoff voltage higher than your supply voltage (e.g. 25V) and connect it directly to the input pin, before the resistor. It won't conduct in a short-circuit fault scenario, so it doesn't need a resistor, but it will absorb the full discharge energy in an ESD event. This can be useful to help bolster your protection in cases where you need an absolute guarantee of operability and uptime (e.g. safety-critical equipment). \$\endgroup\$
    – Polynomial
    Jan 19, 2023 at 21:13

Serial resistor may cause signal matching problem. For such communication under 1Mbps, bus impedence is in range of several hundreds of ohms. Adding 1k+ ohm serial resistor may affect to the signal rise/fall time, and may limit the bus speed very low, like 9600bps or 19200bps maximum.

If you're building custom PCB for it, using SMD fuses can be another option. SMD fuses are technically called as resettable fuse, also known as a polyfuse or electronic fuse.

Resettable fuses have small internal resistance like 50 mili ohms. When an overcurrent flows, it turns to high-resistance state in a short time. Using a resettable fuse with TVS diode can be good enough for many low-speed communication bus protection.

enter image description here

  • \$\begingroup\$ The use of a polyfuse here is something I hadn't considered. I actually think it would work well for this application, since there is the possibility of a prolonged short (the interface is exposed on pogopins), and I don't want to blow a resistor. Thank you for the insight!! \$\endgroup\$
    – foxtrot
    Jan 19, 2023 at 17:55
  • \$\begingroup\$ SMD has nothing to do with the fuse reset. SMD is just surface mount - one shot fuses exist surface-mount and the symbol on your schematic is not a resettable fuse. \$\endgroup\$ May 16 at 21:50

The IC you mentioned is perfectly fine for your application, check the diodes parasitic capacitance to make sure they are good for the data rate in your application.

To limit the current, series resistors can be used like you initially thought, for example various arduinos use them, so maybe take a look at their schematics.

If you are uncertain about what value to use, you could assemble a proof of concept on a breadboard with THT components and do some UART test runs between arduinos (for example), and check if data is transmitted correctly despite the resistors. If you really wanna know what is going on, you must check the waveform with an oscilloscope.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.