profile/esd
An interface signal leaves the board through a connector with no ESD clamp.
Remedy ¶
Fit an ESD clamp on the signal at the connector, ahead of the transceiver it protects.
What it checks ¶
For each of the interface’s signal nets that leaves the board through a connector, whether anything clamps it. A net is reported when it is connector-facing and no TVS, no Zener, and no ESD-rated IC sits within two series crossings of it.
The check is silent on an interface the design does not carry, and silent on an interface whose lines are all on-board. Both are the honest answer, not a pass.
For hardware engineers ¶
Any line that leaves the board is an ESD path into whatever drives it. Touching a connector shell can discharge kilovolts, and an unclamped bus pin takes that energy directly. The damage is often not a clean failure: the part degrades, and the symptom is a port that works for months and then does not, which is expensive to find in the field.
A TVS is the intended answer. It sits beside the line rather than in it, idle at normal voltage, and conducts hard when the line spikes so the surge goes to ground instead of into the transceiver.
Distance matters and is why the check has a radius. Every series element between the connector and
the clamp is impedance the surge pushes through before the clamp conducts, so the pin’s voltage
spikes first. A TVS several parts downstream is protecting what is behind it, not the pin. The check
looks two series crossings out, the same radius the design-wide esd-protection rule uses.
Scope: the design decides, not the protocol ¶
The requirement applies to whichever of the interface’s nets are actually connector-facing, not to a
fixed list of lines. That distinction is load-bearing. On CAN, _CANH and _CANL leave the board
while _TXD and _RXD run to the MCU and never do, so a check applied to every declared signal would
report two lines that were never exposed.
Because the scope is read from the board, declaring this requirement on a profile is safe even when that bus is usually on-board: with no connector on the net, the requirement selects nothing and says nothing.
Why a Zener counts here ¶
A Zener clamp is slower than a TVS and not characterized for surge energy, so it is not adequate ESD protection, and using one where a TVS belongs is a real finding.
This requirement still treats a Zener-clamped net as satisfied, and that is deliberate rather than an
oversight. The catalog rule esd-clamp-not-tvs reports exactly that case, so the two checks partition
connector-facing nets between them: this one covers “nothing is clamping it”, the other covers “the
wrong thing is clamping it”. Reporting the Zener case in both places would double-count one defect and
make a fix look half-done.
Relation to the design-wide rule ¶
esd-protection asks the same question across the whole board. This requirement asks it per
interface, scoped by the profile’s signal naming and gated by the profile’s presence machinery, so a
review item binds profile: CAN and reports against that interface alone.
They agree by construction rather than by two hand-written guard stacks kept in sync: both read the
same external_signal_net scope, and this requirement’s three protection clauses are the same three
exemptions at the same radius (check.ProtectionReachHops, interpolated into the generated datalog
rather than written as a number).
Declaring it ¶
requirements:
- {type: esd}
No params. Shipped on the profiles whose buses leave the board (CAN, LIN, A2B, SGMII, PCIe) and deliberately absent from the on-board ones (eMMC, SPI-NOR), where no line is ever connector-facing.