Pull-up and pull-down resistor calculator
A pull-up or pull-down resistor has a maximum set by leakage — the released node must still reach the reader's VIH or VIL through the drop the leakage makes across it — and a minimum set by the driver, which must not sink more than the current its output level is specified at. For TI's example, a 1.8 V power-good line with 1.1 µA of leakage into a 1.0 V threshold and a 1 mA driver, that is 1.8 kΩ to 727 kΩ; 36 kΩ in the middle gives a 4 µs edge into 50 pF and 90 µW while held low. Enter the rail, the leakages, the threshold and the driver's test current for the range, a suggested value or a check of yours, and the edge and power that come with it.
Pull-up for a node that idles high and is pulled low by an open-drain output — I²C lines, interrupts, power-good, reset-low. Pull-down for a node that idles low and is driven high, or an input that must read 0 when nothing drives it.
The rail the resistor connects to. For a pull-down it is the level the driver asserts.
Leakage through the driver when it has released the node: I_LKG or the off-state I_OL / I_OH in its datasheet. SLVA485 uses the maximum.
Input current of the pin(s) reading the node, from their datasheet. Several inputs on one node add.
Pull-up: V_IH(min) of the reading input, the lowest voltage it takes as a 1. Pull-down: V_IL(max), the highest it takes as a 0. The released node must reach it through the leakage drop.
The current at which the driver's asserted level is specified: the test current for V_OL (pull-up) or V_OH (pull-down). More current than that and the level is no longer guaranteed.
Capacitance on the node — the pins, the trace, any OR'd outputs — for the released-edge time. 20–50 pF for a short on-board net.
A value to check. 0 picks the geometric middle of the range, which is SLVA485 §6's advice in one number: away from the power at the low end and the noise and slow edge at the high end.
- Range: minimum (driver) · maximum (leakage)
- 1.80 kΩ · 727 kΩ
- Suggested value, E24
- 36.0 kΩ
- Released node through 36.0 kΩ
- 1.76 V against V_IH 1.00 V
- Released edge, 10–90 %, into 50.0 pF
- 3.96 µs
- While asserted: current · power
- 50.0 µA · 90.0 µW
- At the ends: edge at R_max · power at R_min
- 80.0 µs · 1.80 mW
How this is calculated
Standard: TI SLVA485; TI SDAA246
- SLVA485 eq 1 / 10: the current through the resistor when the driver has released the node.
- SLVA485 eq 2 / 11: the released node at the reader's threshold.
- SLVA485 eq 3–4 with the asserted node at the rail; SDAA246 eq 3 is the same without I_IN.
- SDAA246 eq 2: the released edge.
- SDAA246 eq 5, SCEA094: the resistor while the node is asserted.
- The geometric middle, snapped to E24 — this tool's suggestion, not a vendor rule.
Assumptions
- The asserted node sits at the rail's far end (0 V for a pull-up), which SLVA485 notes is the higher-current case; R_min is therefore slightly conservative.
- The driver's specified asserted level is compatible with the reader's threshold (V_OL < V_IL, or V_OH > V_IH). SLVA485 says specified performance is otherwise impossible; the tool does not check the pair.
- Leakages are the datasheet maxima at the operating temperature and are constant with voltage.
- The node capacitance is lumped; the released edge is a single RC with no series resistance.
What sets a pull-up or pull-down resistor's value
A pull resistor defines the level of a node when nothing is driving it. An open-drain output can only pull low; a pull-up supplies the high. An input left floating reads whatever it picks up; a pull-down makes it read 0. The value is bounded from both ends, and TI's SLVA485 works the two bounds for the common cases — a power-good output driving an enable pin, and a supervisor's reset output driving a processor.
The upper bound comes from leakage. When the driver has released the node, its off-state leakage and the input current of whatever reads the node both flow through the resistor and drop voltage across it. SLVA485 sums the two currents (its eq 1) and sets the node at the reader's VIH, "the minimum voltage that is specified to be read as a logic high" (eq 2); any larger resistor and "the subsequent chip would not recognize the PG voltage as being a logic high". For a pull-down the same sum sets the node at VIL.
The lower bound comes from the driver. When it asserts the node it sinks the resistor's current, and its output level is only specified up to the test current in its datasheet — IOL for an open-drain low. SLVA485 makes the point that the asserted node "could be 0 V which would result in a higher current", so the resistor sees the whole rail. Any smaller resistor and "the voltage drop across Q1 is higher and no longer ensured". SDAA246 writes it as Rmin = VOUT / IOL: 90 Ω for a 1.8 V node with a 20 mA driver.
Between the two bounds the choice is the trade SDAA246 names in its summary: "a larger resistor can reduce power consumption but increase the rise time." The asserted node burns V²/R in the resistor for as long as it is held; the released edge is passive, an RC into the node's capacitance, with a 10–90 % time of 2.2·R·C (SDAA246 eq 2). SLVA485 §6 adds the third force against a large value: "a higher impedance net which is more susceptible to picking up noise from other nearby signals on the board". The calculator's suggestion is the geometric middle of the range, which is where those pressures balance for a node with no particular speed or power requirement.
Worked example: SLVA485's power-good pull-up on 1.8 V
The calculator's defaults. A TPS62067's power-good output, open-drain, drives another TPS62067's enable input from a 1.8 V rail. From the two datasheets, as SLVA485 tabulates them: PG leakage 100 nA maximum, IOL 1 mA, VOL 0.3 V maximum; EN input 1 µA maximum at VIH 1.0 V minimum.
released: I = 100 nA + 1 µA = 1.1 µA
R_max = (1.8 − 1.0) / 1.1 µA = 727 kΩ
asserted: R_min = 1.8 V / (1 mA − 1 µA) = 1.80 kΩ
middle: √(1.8 kΩ × 727 kΩ) = 36 kΩ (E24)
released node 1.8 − 1.1 µA × 36 kΩ = 1.76 V (V_IH is 1.0 V)
edge, 50 pF 2.2 × 36 kΩ × 50 pF = 4.0 µs
asserted 1.8 V / 36 kΩ = 50 µA, 90 µW
10 kΩ: edge 1.1 µs, 180 µA, 324 µW — the usual choice, in range
The range is four hundred to one, which is why "10 kΩ" is so often right without anyone calculating it: almost anything sits inside. The calculation matters at the edges — a fast edge with a heavy node, a battery product where 180 µA through a pull-up that is asserted most of the time is the biggest load on the board, or a leaky driver at temperature into a reader with a high VIH, where the range closes.
Where the pull-resistor model stops being valid
- Leakage at temperature. The 100 nA and 1 µA are room figures in some tables and 85 °C figures in others; junction leakage roughly doubles every 10 °C. Use the maximum at the temperature the part will run at, or the range above shrinks without warning.
- Several readers, several drivers. Input currents add; so do the leakages of every open-drain output OR'd onto the node, and so does the capacitance. SDAA246 notes the "capacitance creates an RC circuit" from "other open drain outputs OR'd together, from the downstream input pins, or from nearby traces". A wired-OR interrupt line with six sources is six times the leakage and the capacitance.
- VOL against VIL. SLVA485 assumes the driver's specified low, VOL, is below the reader's VIL; "if VOL is greater than VIL, then specified performance is not possible" and the minimum resistor "should be significantly increased" so the driver pulls lower than its test condition. The calculator does not check that pair; the datasheets do.
- The edge is the released one. 2.2·R·C is the passive edge — rising for a pull-up, falling for a pull-down. The driven edge is the driver's own and is fast. A bus that needs both edges fast is not a pull-resistor problem.
- I²C and other bused lines. Those have their own rise-time specification, a fixed 3 mA sink, and a capacitance budget; the I²C pull-up calculator works from those rather than from a driver's IOL.
Common pull-resistor mistakes
- A pull-up on an output that is push-pull. The resistor does nothing when the output is high and burns current when it is low; only an open-drain (or a tri-stated) output needs one.
- Pull-up and pull-down on the same node. It is a voltage divider with a floating input in the middle, and reads whichever way the ratio falls.
- A weak internal pull-up counted as the pull-up. Microcontroller internal pulls are tens of kilohms and specified loosely; with a leaky external driver or a long trace they are past Rmax, and they are off during reset, which is exactly when the node's level matters most.
- Choosing 1 kΩ "to be safe". Safe for the level, and 1.8 mA every time the node is low: an interrupt line that idles low, or an enable that is held off, spends its life there.
- Checking the asserted level with the resistor at the wrong rail. A pull-up to 3.3 V on a node read by a 1.8 V input is a level-shifting problem; the resistor calculation assumes the rail and the reader match.
Further reading
- The I²C pull-up calculator: the bused case with the specification's rise-time and sink-current limits.
- The switch debounce calculator: the pull-up feeding a switch, where R sets the current the contact carries and half of the debounce delay.
- The RC filter calculator, for the released edge as a bandwidth.