Open-Drain & Pull-Up Network (I2C): Design, EMC, Debug
← Back to: I²C / SPI / UART — Serial Peripheral Buses
Open-drain is an electrical sharing topology—not a protocol. The pull-up network (R·C·V·I + leakage) sets rise-time, VOL margin, EMI behavior, and multi-rail back-powering risk, so the goal is to size a safe resistor window and validate it at the worst node.
Definition & Scope: What “Open-Drain + Pull-Up Network” Really Means
Open-drain (open-collector) is a one-sided driver: devices can actively pull the line LOW, while the HIGH level is created by the pull-up network.
- Wired-AND electrical behavior: many open-drain nodes share one line safely.
- Pull-up network design: R + C + leakage determine rise-time, static current, and noise margins.
- Engineering deliverables: a practical Rpullup window and board-level verification hooks.
- I²C speed-mode compliance numbers (mode-specific rise-time limits): handled in the “Standard / Fast / Fast+ / Hs-Mode” subpage.
- Topology length/fanout planning (star vs trunk, long cable strategy): handled in “Topology Planning” / “Long-Reach I²C over Cabling”.
- Buffer/isolator/switch selection deep-dive: handled in “Buffers / Isolators / Switches”.
- Cbus (trace + pins + connectors + test points + probe loading).
- Vpullup (system rail / peripheral rail / isolated rail choice).
- IOL vs VOL behavior (sink capability and low-level margin under worst-case pull-low).
- Leakage budget (contamination, ESD drift, power-off clamp paths).
- EMC environment (edge-rate sensitivity, coupled noise, ringing risk).
- Rpullup window (not a single value): bounds that satisfy rise-time, sink/VOL, and power.
- Rail strategy: where pull-ups belong to avoid ghost-powering during sequencing.
- Verification plan: where to probe, what to log, and pass-criteria placeholders X.
The pull-up network defines the HIGH level and the rising edge. The open-drain devices define the LOW level. All key margins map to Rpullup, Cbus, sink behavior (IOL/VOL), and leakage paths.
Why Open-Drain: Wired-AND, Multi-Drop, Arbitration-Friendly Physics
On a shared multi-drop bus, “two devices disagreeing at the same time” is not a corner case. Open-drain makes that disagreement electrically safe by removing the ability to actively drive HIGH.
- HIGH is passive: the line rises through Rpullup into Cbus.
- LOW is active: any device can sink the line LOW, so LOW “wins” safely.
- Conflict-safe sharing: multiple devices can pull LOW simultaneously without a high-side fight.
- Hard contention current: one driver forces HIGH while another forces LOW → large shoot-through current.
- System-level damage modes: local heating, supply dip/ground bounce, EMI spikes, or outright pin damage.
- Hard to “fix in firmware”: the failure occurs at the electrical layer before protocol recovery can help.
- Slower rising edges: set by Rpullup × Cbus (managed with a resistor window and capacitance control).
- Static pull-up power: mostly set by Vpullup and the fraction of time the line is LOW.
- EMC sensitivity: edges and ringing can be shaped using safe “knobs” (resistor, placement, damping) without changing the protocol.
Open-drain converts “device disagreement” into a controlled electrical outcome: the line can always be pulled LOW without a high-side fight, and the contention current is bounded by the pull-up path.
- Rpullup × Cbus sets the rising edge and noise susceptibility.
- Sink capability sets the LOW-level margin when multiple devices pull down.
- Rail choice determines power-sequencing safety (avoid ghost-powering).
Electrical Model: The 5 Variables That Decide Everything (R, C, V, I, Leakage)
Replace “tuning by feel” with a computable model: every open-drain success or failure maps to R, C, V, I, and leakage.
- Physical meaning: the HIGH transition is a capacitor charge event through Rpullup into Cbus.
- General workflow (no mode-specific constants here): pick the voltage window used by the system for “LOW→HIGH” recognition, then compute/estimate the time for the RC curve to cross that window.
- What inflates Cbus in real boards: trace + device pins + connectors + test pads + probe capacitance.
- Executable takeaway: when tr degrades after an integration step, assume Cbus increased first, then re-check the effective Rpullup.
Mode-specific rise-time targets and compliance numbers belong to the “Standard / Fast / Fast+ / Hs-Mode” subpage. This page focuses on the model and the resistor window method.
- Low level is an active sink event: the line voltage is set by the sink device behavior under current, not by an ideal switch.
- Why “I × R” is only a starting point: real devices have an IOL–VOL curve and finite on-resistance; the target is to keep VOL margin under worst case.
- Worst-corner thinking (required): multiple devices can pull LOW simultaneously; temperature and process corners change sink strength.
- Executable takeaway: when VOL is “too high”, audit parallel pull-ups first (Req got smaller), then verify sink capability at the required current.
- Two simultaneous impacts: leakage can pull the HIGH level down and slow the rising edge by stealing pull-up current.
- Common sources: contamination/moisture, connector residue, post-ESD parametric drift, and power-off clamp paths.
- Why “still works but becomes fragile” happens: leakage increases first, reducing noise margin long before a hard short appears.
- Executable takeaway: compare pre/post stress (ESD / humidity) using the same pull-up setting and log the change in rise behavior and static HIGH current (pass threshold X).
This model supports both design-time prediction and bring-up correlation: R and C dominate the rise, IOL/VOL dominates LOW margin, and leakage quietly shrinks both HIGH margin and edge speed.
Pull-Up Sizing Workflow: Find the Safe Resistor Window (DC + AC + Tolerance)
The goal is not “one resistor value”. The goal is a manufacturing-safe window: Rmin avoids excessive sink current and power, while Rmax preserves edge speed and HIGH robustness.
- Constraint: rising edge becomes too slow when Rpullup × Cbus is large.
- Hidden failure mode: HIGH level becomes “not clean” when leakage/noise steals pull-up current.
- Bring-up action: measure tr at the worst node (largest C, farthest endpoint) and compare to the chosen system target (pass threshold X in the mode page).
- Constraint: smaller R increases LOW current, stressing sink devices and raising VOL under worst-case pull-down.
- Power impact: pull-up loss occurs whenever the line is LOW; this matters in alert lines and busy buses.
- Worst-corner rule: validate with multiple devices pulling LOW and with temperature corners (pass threshold X).
- Tolerance matters: resistor tolerance/temperature changes shift both Rmin and Rmax margins.
- Parallel pull-ups are common: multiple boards/modules may each add pull-ups, shrinking the effective Req.
- Executable audit: enumerate every pull-up source (external resistors and any internal/optional pulls) and compute Req.
- Footprints: resistor-array options, DNP pads, and jumpers to select final R in bring-up.
- Debug hooks: test points at worst nodes, and optional damping footprint (series-R) for ringing/EMC tuning.
- Manufacturing robustness: keep the selected nominal value centered inside the computed window, not at the edge.
- R window: [Rmin, Rmax] after tolerance and parallel pull-up accounting.
- Bring-up gates: measure tr and VOL at worst nodes; log rail and environment; pass threshold X.
- If the window collapses: reduce Cbus (segmentation/topology) or add assist devices (buffers/accelerators) via the dedicated subpages.
The workflow produces a bounded resistor range and a clear escalation path when physics makes the window too narrow: either reduce effective capacitance or add assist devices through the dedicated subpages.
Pull-Up to Which Rail: System vs Peripheral vs Isolated Rail (and the Ghost-Powering Trap)
Pull-up rail ownership decides more than “logic high”: it determines power-off behavior, noise margin, and whether an unpowered domain gets back-fed through I/O clamp paths.
- Benefit: the bus HIGH is defined whenever the system is ON.
- Risk: if a peripheral domain is OFF, the bus can still be pulled HIGH and inject current through its I/O clamp network.
- Typical symptom: “device looks off, but standby current is high” or “bus gets fragile after power cycling”.
- Benefit: when the peripheral is OFF, the bus is not forced HIGH into that unpowered domain.
- Risk: the host may observe undefined levels during sequencing if it expects a valid HIGH before the peripheral rail is stable.
- Typical symptom: “startup occasionally mis-detects a state” tied to power sequencing.
- Benefit: rail ownership is clear across an isolation boundary; common-mode noise is better controlled.
- Risk: mismatched “power-off behavior” across the boundary can still create cross-domain backfeed if clamps exist on either side.
- Rule: align pull-up ownership with the isolator/translator power-off model (selection details belong to the dedicated subpages).
- Trigger: one domain pulls the bus HIGH while another domain’s VDD is OFF or below its clamp threshold.
- Path: bus pin → I/O clamp / ESD structure → unpowered VDD rail → internal circuitry (partial powering).
- Impact: increased leakage, slowed rising edges, undefined pin states, stuck-low behavior after sequencing, and abnormal standby current.
- Correlation hint: post-ESD or humidity stress can increase clamp leakage, making backfeed easier and the bus more margin-sensitive.
- Which domain can be powered down? (peripheral sleep, module unplug, isolated side off)
- Which domain must be protected from partial powering? (standby current, reliability, “must be truly off”)
- Which pins have pin→VDD clamp paths? (ESD/clamp behavior; power-off tolerance)
- If a peripheral domain can be OFF and its I/O is not power-off tolerant, avoid pulling the bus HIGH from an always-on rail into that domain.
- If the host must see a valid HIGH early in sequencing, ensure the chosen rail is valid at that time or add a structural boundary (translator/isolator).
- If an isolation boundary exists, pull-up ownership must match the boundary device’s default and power-off behavior (deep selection belongs to the dedicated subpages).
- Audit and unify pull-ups: ensure there is a single “owner” rail (avoid accidental parallel pull-ups across modules).
- Small series resistor (Rs): limits injection peaks and tames ringing, but does not replace structural isolation.
- Translator / isolator boundary: required when domains can be OFF independently or hot-plug scenarios exist (details elsewhere).
- Backfeed check: with the target domain OFF, ensure its VDD rise stays below X (and decays within X time).
- Standby current: sequencing states do not increase system Iq beyond X.
- Bus health: after power cycling, no stuck-low longer than X and no abnormal leakage signature.
The failure is not “logic”: it is an electrical current path from a powered rail into an unpowered domain through an I/O clamp structure. Rail ownership must match power sequencing and clamp behavior.
Edge-Rate Shaping & EMC: Control Slew Without Breaking Logic Margins
Treat EMC as a network design problem with knobs. The goal is to reduce ringing and emissions while keeping VIH/VIL margins intact and avoiding false threshold crossings.
- Rpullup × Cbus sets the rise. Excessively fast transitions mainly come from parasitic L/C creating ringing, overshoot, and coupled noise.
- Design target: “slow enough” to reduce high-frequency energy, but not slow enough to violate timing or shrink logic margin (targets belong to the mode page).
- Measurement discipline: probe loading changes Cbus; long ground leads create fake ringing.
- Changes: rise-time and static pull-up current.
- Fixes: overly sharp edges and marginal EMI peaks.
- Can break: too-large R reduces rise robustness (boundary values belong to the mode page).
- Changes: damping (reduces Q) and overshoot behavior.
- Fixes: ringing, overshoot, and crosstalk sensitivity.
- Can break: pull-down path voltage drop can raise the observed LOW level; must re-check VOL margin.
- Changes: edge shape and spectral content.
- Fixes: some high-frequency emission spikes.
- Can break: more slow-edge sensitivity and unexpected threshold crossings under noise; validate worst-case.
- Threshold crossings: ringing or coupled noise can cross VIL/VIH multiple times during one transition.
- Edge sensitivity: sharper edges carry more high-frequency energy and couple more easily into adjacent nets.
- Observed outcome: a short, valid-looking level window can be misinterpreted as a protocol event. Recovery policy belongs to the “Error Handling & Recovery” subpage; the hardware lever here is edge + ringing control.
- Worst-node probing: measure at the far endpoint / largest-C node, not only near the host.
- Timing: rise behavior remains within the chosen target window (pass X).
- Margins: VOL under worst pull-down remains within margin (pass X).
- Ringing: no multiple threshold crossings within X time; overshoot stays within X.
Use the lowest-risk knob first (R-only), then add damping (Rs) if ringing dominates, and treat RC shaping as a last resort requiring worst-case validation against logic thresholds.
Layout Rules for Open-Drain Nets: Where Pull-Ups Live and How Return Paths Bite You
These rules focus only on what is tightly coupled to open-drain + pull-up networks: pull-up ownership, accidental parallel pull-ups, defined pull-down return loops, and testability footprints.
- Place pull-ups near the owner domain: the rail and ground reference that define the bus HIGH should be physically close to the pull-up network.
- Avoid distributed pull-ups: pull-ups in multiple corners (modules / mezzanines / daughtercards) often create an unintended parallel Req that shrinks over time as options get populated.
- Failure signature: the same design becomes “harder to pull LOW” or burns more power after a module change, because Req silently decreased.
- Bring-up action: enumerate every pull-up footprint across the BOM (including optional/DNP straps) and compute the worst-case Req when all are populated.
- LOW loop continuity: Vpullup → Rpullup → SDA/SCL → pull-down device → GND. This loop must stay compact and predictable.
- No “ground-slot crossings”: routing SDA/SCL across split grounds or slots forces return currents to detour, increasing loop area and ground bounce.
- Worst-case reference: if a connector region has a weak return reference, expect higher VOL and more false threshold crossings under noise.
- Keep SDA/SCL over a continuous reference plane in the regions where pull-down current flows.
- If a boundary or slot is unavoidable, provide a deliberate return bridge path near the crossing (avoid “mystery return”).
- Prefer placing pull-ups and the main pull-down endpoint within the same reference domain to reduce common-mode surprises.
- Reserve at least one TP near the owner side and one TP at the far-end/worst node.
- Without a far-end TP, rise-time and ringing can be misread as “fine” when only the near-end is probed.
- Place an Rs footprint near the owner side to allow damping and injection current limiting.
- Keep Rs optional (0Ω/NC strategy) to preserve a clean baseline and enable controlled experiments.
- Use only as a controlled knob for EMI edge shaping; validate worst-case thresholds after any population change.
- Do not “fix by adding C” without a pass criterion; it can hide real signal integrity or margin issues.
- Pull-up ownership: a single, documented owner rail; no hidden parallel pull-ups when options are populated.
- Return integrity: SDA/SCL does not cross ground splits/slots without a deliberate return bridge.
- Worst-node visibility: at least one far-end TP exists for rise-time/ringing capture.
- Tuning footprints: Rs pad and a controlled DNP option exist; changes require a pass criterion X.
The open-drain LOW state forms a defined current loop. Routing across a split reference plane enlarges the loop and increases ground bounce risk, especially at the far-end worst node.
Measurement & Debug: How to Measure Rise-Time/VOL Without Lying to Yourself
A scope can “fix” an open-drain bus by adding capacitance, or hide failures with bandwidth/averaging choices. The workflow below removes measurement artifacts first, then maps symptoms to electrical causes.
- Probe C adds directly to Cbus, slowing rise-time and smoothing edges.
- If changing probe type or attenuation materially changes tr, the measurement is dominating the bus.
- Bandwidth limits can hide overshoot and ringing; averaging can erase intermittent spikes.
- Use settings that preserve fast events when chasing false triggers or marginal edges.
- Near-end measurements often look “clean” while the far-end worst node fails.
- For acceptance, capture tr and VOL at the far-end / highest-C / noisiest node.
- Rise-time (tr): measure using a consistent voltage window tied to the system’s VIH/VIL policy; keep the definition stable across builds.
- VOL: measure under the worst pull-down condition expected in-system (multiple devices can pull LOW; temperature corners can reduce sink strength).
- Sequencing state: confirm rails are in the intended power state; ghost-powering can create misleading “almost powered” behavior.
- Quick check: remove probe loading variables; re-measure at the far-end TP.
- Likely causes: R too large, C too large (extra nodes/cables), increased leakage (incl. clamp leakage after stress).
- Next step: estimate Cbus and validate that Req and leakage match expectations across power states.
- Quick check: confirm Req is not smaller than planned (parallel pull-ups); measure ground bounce near the pull-down device.
- Likely causes: R too small (too much sink current), insufficient sink capability, ground/reference issues.
- Next step: validate VOL at the worst node and worst pull-down condition; check return path integrity.
- Quick check: disable averaging; use event capture; probe at the far-end worst node.
- Likely causes: ringing causes multiple threshold crossings; rail sequencing/backfeed creates undefined states; edges too sharp for the environment.
- Next step: correlate failures with power states and noise sources; apply edge damping (Rs/R) and re-validate margins.
The tree forces artifact checks first (probe/settings/measure point/rail state), then converges to the electrical model variables: R, C, leakage, sink strength, return integrity, and ringing.
Failure Modes & Design Pitfalls: Leakage, Partial Shorts, ESD Drift, Brown-Out Weirdness
This section is a reusable hardware troubleshooting library for open-drain pull-up nets. It focuses on electrical failure signatures and quick checks, and avoids protocol-level recovery algorithms.
- Electrical picture: the bus sees a parallel leakage path (Rleak / Ileak) that drags HIGH down and slows the rise.
- Typical symptoms: idle HIGH level looks “not fully high”, sporadic NACK/false edges, and strong sensitivity to humidity/handling.
- Fast checks:
- Measure Idle VHIGH at the far-end node: compare to expected pull-up rail (pass X).
- Force the line HIGH via pull-up and measure Ileak (pass X), then compare across boards and after cleaning.
- Compare rise-time with and without attached fixtures/cables to rule out “added C” vs true leakage.
- Design pitfall: relying on “looks clean on near-end TP” while the far-end node is the true worst case.
- Bus current spike: pull-up rail current increases when the bus should idle HIGH.
- Mode-dependent failures: slower modes “work” but higher speed margins collapse (because RC and threshold crossings get worse).
- Mechanical correlation: movement or connector pressure changes the error rate.
- Resistance screen: SDA/SCL to GND and to Vpullup (pass X).
- Idle-level screen: VHIGH at far-end node must exceed X.
- Delta-rise test: compare measured tr against golden board (pass Δtr X).
- Electrical picture: clamp structures can shift leakage after stress; the bus becomes more sensitive to noise and thresholds.
- Typical symptoms: intermittent failures begin only after handling/ESD events; far-end rise-time worsens; idle VHIGH droops under temperature/humidity.
- Do-not-skip verification: after ESD/handling events, re-measure Ileak, tr, and VHIGH at the far-end node (pass X each).
- Design pitfall: validating only logic-level compliance at one node and missing “margin collapse” over time.
- A device enters an undefined I/O clamp condition during undervoltage.
- The pull-up rail injects current into an “off” domain via clamp paths (partial powering).
- Bus lines stick LOW or become slow/fragile until a full power cycle.
- Sequencing sweep: test several power-down orders and brown-out profiles; observe VHIGH/VOL and stuck states (pass X).
- Backfeed check: with a target domain OFF, ensure its rail rise remains below X and decays within X time.
- Idle stability: after recovery, VHIGH and tr return to baseline (pass Δtr X, ΔIleak X).
- Open detection: continuity to known nodes and pull-up owner verification (pass X Ω / pass X V).
- Hard short detection: SDA/SCL to GND/Vpullup resistance screen (pass X Ω).
- Soft leakage detection: force HIGH and measure Ileak at a controlled state (pass X µA), plus VHIGH droop (pass X).
- Dynamic signature: simple rise-time capture vs golden board (pass Δtr X), measured at the far-end node.
Keep the library symptom-driven: measure at the far-end worst node, confirm rail states, then converge to leakage/partial short/clamp drift rather than chasing protocol ghosts.
Engineering Checklist: Design → Bring-Up → Production (Your “Do Not Ship” Gates)
Convert the open-drain model into acceptance gates. Every checklist item must be auditable and linked to a measurable pass criterion (X placeholders).
- Resistor window documented: define Rmin/Rmax from DC+AC constraints and tolerance; pass: Req stays within X…X across corners.
- Parallel pull-up audit: list all pull-up footprints (modules/options); pass: worst-case Req ≥ X and ≤ X.
- Rail ownership defined: pull-up owner rail is explicit for each bus segment; pass: no backfeed raising an OFF rail above X.
- Power-off behavior checked: drop-out/brown-out sequence set; pass: no stuck-low longer than X.
- Edge-control knobs reserved: Rs pads and controlled DNP options exist; pass: population changes require tr/VOL gates X.
- Test visibility: near-end and far-end TP reserved; pass: far-end TP accessible in fixture X.
- Return integrity: SDA/SCL avoids ground split/slot crossings; pass: defined return bridge if crossing is unavoidable (X).
- Worst-node definition: identify the highest-C / noisiest node; pass: acceptance measurements use that node by default.
- Measure at the worst node: far-end TP first, not near-end; pass: tr ≤ X, VOL ≤ X, VHIGH ≥ X.
- Probe discipline: verify probe loading and bandwidth/averaging settings; pass: tr changes ≤ X when probe/setup changes.
- Corner sweep: voltage and temperature corners; pass: tr/VOL stay within X across corners.
- Option sweep: populate modules/options that add pull-ups/capacitance; pass: Req and tr do not cross gate X.
- Sequencing/brown-out sweep: multiple power-down orders; pass: no stuck-low > X, no OFF-rail backfeed > X.
- Post-handling re-check: after ESD/plug cycles, re-test Ileak and tr; pass: ΔIleak ≤ X, Δtr ≤ X.
- Noise exposure check: verify ringing and threshold crossings at worst node; pass: no multi-crossing within X time.
- Golden signature captured: record baseline tr/VOL/Ileak for production comparison; pass: baseline stored with board ID and environment.
- Open/short screen: resistance checks SDA/SCL↔GND and SDA/SCL↔Vpullup (pass X Ω).
- Leakage screen: forced HIGH and measure Ileak (pass X µA), and VHIGH droop (pass X).
- Dynamic signature: rise-time or edge-capture vs golden baseline (pass Δtr X).
- Rail-state guard: verify pull-up owner rail is present and correct (pass X V).
- Electrical: Vpullup actual, Req option state, Ileak, tr, VOL (pass criteria fields recorded as X).
- Identity: board serial, PCB rev, assembly lot, fixture rev.
- Environment: temperature, humidity, time since cleaning/handling.
A checklist is only useful when each item is measurable. Treat every gate as a “no-excuse” stop: if the measurement cannot be made at the worst node, the design is not ready to ship.
H2-11 · Applications (Board-level, Open-Drain + Pull-Up)
This section lists only the board-level uses that are defined by the pull-up network: shared lines that must remain conflict-safe and tolerant to multi-drop behavior. Each use-case is framed as what the pull-up defines (rail, window, and measurement point), not protocol logic.
A) I²C / SMBus / PMBus: SDA & SCL as pull-up-defined nets
- Pull-up defines edge + power: rise-time is dominated by Rpull-up × Cbus; average static power is dominated by VOL × IOL during low duty.
- Rail decision is a system decision: pull-up to the rail that defines valid VIH for all attached devices and remains stable across sequencing; avoid “mixed-domain” pull-ups without an explicit isolation/translation point.
- Where to validate: measure rise-time and VOH at the worst physical node (farthest stub / largest local C) and VOL at the worst sink corner (max concurrent low + max temperature).
B) Open-drain interrupt / alert lines: INT# / ALERT# / SMBALERT#
- Wired-OR aggregation: multiple devices can assert the same alert line safely; the pull-up defines recovery time after release.
- Edge-shaping is usually the “EMC knob”: tune R (and optionally small series-R at the aggregator) to reduce ringing/overshoot without collapsing logic margins.
- Verification focus: confirm low-level margin (VOL under worst sink) and release time (rise-time under worst C/leakage), not just functional toggling.
C) Shared alarm lines across boards (backplane / harness): “one line, many sources”
- Cable/backplane makes Cbus + noise larger: the pull-up window must account for higher capacitance and common-mode disturbance.
- Define the “home rail” clearly: place the pull-up at the domain that owns system interpretation; avoid multiple boards each adding a pull-up (parallel R shrink → higher sink current).
- Observability: add test points and a DNP series-R footprint near the receiver to enable edge control and quick isolation during bring-up.
H2-12 · IC Selection Notes (Before FAQ)
Selection here is about behaviors that change the pull-up window: sink capability, power-off I/O state, translation/isolation placement, and protection leakage. Example part numbers are included as reference; always verify value code, package, suffix, temperature grade, and availability.
1) Pull-up components: single resistor vs resistor network
- Single resistor (simple + flexible): easiest to tune per line; preferred when each line needs a different R window.
- Resistor network / array (layout control + BOM efficiency): reduces “pull-ups scattered everywhere”; helps keep a single effective pull-up owner.
- Key checks: tolerance/TC, power per element (low duty vs stuck-low), and whether multiple boards accidentally add parallel pull-ups.
Concrete examples (replace value code as needed):
- Yageo RC0603FR-074K7L (0603, 4.7 kΩ, 1%)
- Vishay CRCW06034K70FKEA (0603, 4.7 kΩ, 1%)
- Panasonic EXB-2HV472JV (resistor array, 4.7 kΩ class)
- Panasonic EXB-38V472JV (resistor array, 4.7 kΩ class)
- Vishay Dale CRA06S0834K70JTC (resistor array, 4 × 4.7 kΩ class)
2) Open-drain line drivers: when “the source” is not truly open-drain
- Use-case: converting push-pull GPIO into open-drain for wired-OR alert lines.
- Key checks: guaranteed sink current (IOL), VOL at that current, and partial-power-down behavior (avoid back-powering through I/O).
Concrete examples:
- TI SN74LVC1G07 (single buffer with open-drain output)
- Nexperia 74LVC1G07 (buffer with open-drain output)
3) Level translation: keep open-drain semantics intact
- Goal: translate voltage domains without introducing direction-control failure modes.
- Key checks: power-off I/O state, internal pull-ups (if any), and how translation interacts with the effective pull-up window.
Concrete examples:
- NXP PCA9306 (dual bidirectional I²C/SMBus voltage-level translator)
- TI TCA9406 (2-bit bidirectional I²C/SMBus voltage level translator; supports open-drain mode)
4) Bus buffering / segmentation: when Cbus breaks the pull-up window
- Trigger conditions: required rise-time cannot be met without making sink current / VOL unacceptable, or when a single net accumulates too much capacitance.
- Placement logic: buffer splits the bus so each side has its own pull-up and its own R window; the “home rail” becomes explicit per segment.
- Avoid turning this into a new chapter: detailed buffer topology and corner rules belong to the dedicated Buffers/Isolators/Switches page; this section only defines the decision boundary.
Concrete examples (buffer/repeater/extender):
- TI TCA9617A (level-translating I²C bus repeater)
- TI TCA9509 (level translating I²C bus repeater)
- TI TCA9517A (level-shifting I²C bus repeater)
- NXP PCA9517 (level-translating I²C-bus repeater)
- NXP PCA9600 (bus buffer for isolating capacitance; high-C side use case)
5) Isolation strategy: treat each isolated side as its own pull-up domain
- Rule of thumb: isolated SDA/SCL are not “one net” anymore; each side needs its own pull-up rail and its own R window.
- Key checks: sink current capability per side, propagation delay vs timing margin, and hot-swap / power sequencing behavior.
Concrete examples (I²C isolators):
- TI ISO1540 (bidirectional I²C isolator)
- TI ISO1640 (hot-swappable bidirectional I²C isolator)
- Analog Devices ADuM1250 (hot-swappable bidirectional I²C isolator)
6) Port protection: leakage and capacitance directly reshape the pull-up window
- Why it belongs here: ESD devices add capacitance (slower rise) and leakage (lower VOH), both of which change the safe R window.
- Keep it disciplined: detailed IEC waveforms and placement belong to the protection page; this section only lists the pull-up-relevant knobs.
Concrete examples (ESD/TVS, low-C class):
- TI TPD2E2U06 (dual-channel low-capacitance ESD protection; I²C use cases)
- TI TPD2E2U06-Q1 (automotive-qualified variant)
- Nexperia PESD5V0S1UL (single-line ESD protection diode)
Output of this flow is not “one resistor value”, but a validated window plus a clear boundary: if the window collapses, the design needs segmentation / translation / isolation rather than forcing an unsafe pull-up.
Practical rule: treat “pull-up rail ownership” as a first-class spec. If a line crosses rails, power domains, or isolation, the pull-up must be re-owned at the boundary (translator/buffer/isolator), not left implicit.
Recommended topics you might also need
Request a Quote
H2-13 · FAQs (Open-Drain + Pull-Up Network)
Long-tail troubleshooting only. Answers stay strictly within: R/C/V/I/leakage, EMC edge shaping, and multi-rail power/clamper behavior. All thresholds are placeholders (X) for project-specific gates.
Rise time meets spec on the bench, but fails on the assembled system—what’s the first C/leakage check?
Likely cause: Cbus increased (harness/connector/added ESD) or new leakage path (assembly residue) that drags VOH and slows the edge.
Quick check: measure tr@worst_node and VHIGH@worst_node; estimate ΔCeff from the rise-time change using known R; measure Ileak@idle (compare vs golden bench setup).
Fix: remove/replace the added capacitance source (ESD/connector option), clean the net (flux/humidity), or segment the net (buffer/isolator boundary) instead of forcing a risky pull-up.
Pass criteria: tr@worst_node ≤ X; VHIGH@worst_node ≥ X; Ileak@idle ≤ X; ΔCeff vs baseline ≤ X.
VOL looks too high when multiple devices pull low—how to spot “parallel pull-ups” accidentally added?
Likely cause: effective pull-up resistance collapsed (multiple pull-ups populated in parallel), raising required sink current and pushing VOL out of margin.
Quick check: inventory all pull-up footprints/options and compute Req; measure Ipullup@LOW and VOL@max_sink with the worst-case number of devices asserting LOW.
Fix: enforce a single pull-up owner (DNP/0Ω gating), increase R to restore the window, or split segments so each segment’s Req remains auditable.
Pass criteria: Req within X…X; VOL@max_sink ≤ X at IOL = X; Ipullup@LOW ≤ X.
Works at room temp, fails in humidity—how to confirm flux residue leakage vs real device failure?
Likely cause: surface contamination creates a humidity-dependent leakage path that pulls the line toward mid-level and slows the rise.
Quick check: log Ileak@idle and VHIGH@worst_node vs RH%; repeat after targeted cleaning/bake; compare against a controlled “dry” condition.
Fix: improve cleaning process/inspection, add conformal coat where appropriate, or redesign spacing/guarding for the net; avoid masking the issue by simply lowering R.
Pass criteria: Ileak@idle ≤ X at RH = X; VHIGH@worst_node ≥ X; ΔIleak after clean ≤ X.
After ESD test it still works, but becomes flaky—what leakage metric changes first?
Likely cause: leakage increases (ESD clamp drift) before functional failure, reducing VOH margin and slowing the edge under noise.
Quick check: compare Ileak@idle, VHIGH droop, and tr@worst_node against pre-ESD baseline on the same board and the same measurement setup.
Fix: replace/upgrade the stressed protection path, improve return/ESD routing, and re-validate the pull-up window; do not “hide” drift by tightening pull-up without re-checking VOL.
Pass criteria: ΔIleak ≤ X; Δtr ≤ X; VHIGH@worst_node ≥ X; post-ESD repeatability within X.
Bus works when powered, but fails during power sequencing—how to detect ghost-powering from pull-up rail choice?
Likely cause: pull-up rail backfeeds an “OFF” domain through I/O clamp paths, creating undefined I/O states and sequencing-dependent failures.
Quick check: power the pull-up rail ON while the target domain is OFF; measure Voff_rail rise and Ibackfeed; verify line levels (stuck LOW / mid-level) at worst node during transitions.
Fix: re-own pull-up to a compatible always-valid rail, add an isolation/translation boundary, or enforce sequencing so the pulled-up domain is never OFF while the bus is active.
Pass criteria: Voff_rail ≤ X; Ibackfeed ≤ X; no stuck state longer than X during sequencing.
Changing pull-up rail fixed logic level, but introduced resets—what clamp path is likely?
Likely cause: injected current flows through input clamp diodes into a sensitive rail, disturbing reset/brown-out thresholds during bus activity.
Quick check: monitor the affected rail during repeated LOW asserts; measure ΔVrail and Iinj (injection current) while toggling; confirm the path by isolating the line (lift pull-up / remove module) and observing reset disappearance.
Fix: move pull-up ownership to the correct domain boundary, add a translator/isolator with defined power-off behavior, or add series resistance to limit injection (while re-checking VOL margin).
Pass criteria: ΔVrail ≤ X; Iinj ≤ X; resets = 0 across X cycles and X sequencing profiles.
Slowing edges reduced EMI, but now occasional false START/STOP—what’s the safest edge-shaping knob?
Likely cause: edge shaping pushed rise-time too slow or created long threshold-crossing windows, making the line more susceptible to coupled noise and false transitions.
Quick check: measure threshold-crossing duration at the worst node; check for multi-crossings/ringing after releases; compare “R-only” vs “R+extra C” to identify which knob introduced vulnerability.
Fix: safest knob is tuning Rpull-up within the window; if damping is needed, use a small series R (placed near the driver/receiver) rather than adding large shunt capacitance.
Pass criteria: tr@worst_node within X…X; no multi-crossings within X; EMI improvement achieved without false transitions across X hours.
Scope shows clean edges, yet devices NACK—what probe loading or measurement setup lies most often?
Likely cause: probe capacitance/ground lead inductance distorts the net, or measurement is taken at a “good” node instead of the worst node.
Quick check: repeat measurement with a low-C probe and short ground spring; measure at worst_node; disable heavy averaging; confirm bandwidth/sample settings reproduce edge details.
Fix: standardize measurement setup (probe type, bandwidth, TP location) and baseline against a golden board before concluding electrical non-compliance.
Pass criteria: probe-induced Δtr ≤ X; worst_node waveform matches golden within X; NACK rate = 0 across X transactions under the same setup.
One board revision needs smaller pull-ups—how to locate the added capacitance quickly?
Likely cause: new capacitance was introduced (connector option, ESD part change, longer trace/stub, added device input C), collapsing the original rise-time margin.
Quick check: with identical pull-up, compare tr@worst_node between revs; estimate ΔCeff from Δtr; isolate by depopulating optional loads/connectors one at a time and re-measuring.
Fix: remove the unintended C source, choose lower-C protection, or segment the bus; only then retune R within the validated window (do not blindly “go smaller”).
Pass criteria: ΔCeff ≤ X; tr@worst_node ≤ X with target R; functional stability across X configuration options.
Adding a series resistor improved ringing but broke low-level margin—what’s the first VOL sanity check?
Likely cause: series R introduced additional voltage drop under sink current, effectively raising the observed VOL at the receiver.
Quick check: measure VOL@receiver while forcing worst-case sink current; compute expected ΔV = IOL × Rseries and compare; confirm Rseries placement (near driver vs distributed).
Fix: reduce Rseries, move it to the correct location, or increase pull-up R (lower sink current) while re-validating rise-time; do not keep Rseries if it breaks VOL margin.
Pass criteria: VOL@max_sink ≤ X at IOL = X; Rseries-induced ΔV ≤ X; tr@worst_node ≤ X.
Why does placing pull-ups at multiple connectors make things worse even if each value seems “reasonable”?
Likely cause: parallel pull-ups shrink Req and raise sink current/ground bounce; connector stubs also add capacitance and ringing at the worst node.
Quick check: compute Req from populated pull-ups; measure Ipullup@LOW and VOL; compare tr/VHIGH with only the “owner” pull-up populated vs multiple connectors populated.
Fix: enforce a single pull-up owner near the receiving/defining domain; make other connector pull-ups DNP by default and keep a controlled “option” population plan.
Pass criteria: Req within X…X; Ipullup@LOW ≤ X; VOL@max_sink ≤ X; worst_node ringing within X.
I pulled up to an isolated rail and got random behavior—what “power-off I/O state” should be verified first?
Likely cause: when one side is OFF, the isolator/translator or device pins clamp or partially power through I/O, turning a clean open-drain net into an undefined mid-level net.
Quick check: with the isolated rail OFF, measure line level and Ileak@idle; verify whether the OFF-side pins are Hi-Z or clamped; check for OFF-rail rise (backfeed) during pull-up assertion.
Fix: treat each side as its own pull-up domain (pull up locally per side), choose a boundary device with defined power-off behavior, and enforce rail sequencing so the bus is not driven into an OFF domain.
Pass criteria: OFF-side pins = Hi-Z (per design intent); Vbackfeed on OFF-rail ≤ X; Ileak@idle ≤ X; no random mid-level states across X cycles.