OTD ACADEMY
Sign in / Sign up
Library

LIBRARYPull-ups, pull-downs, and the idle line.

A floating input reads noise; a pull-up or pull-down resistor gives a line a known default. How buses set their idle level, and how to size the resistor.

A digital input wired to nothing floats. With no driver, its voltage wanders with noise coupled from nearby signals, so it flickers between high and low and the chip cannot tell a 1 from a 0. A pull-up or pull-down resistor fixes that by tying the line to a known default level, and getting that default wrong is a classic reason a bus sits dead.

A floating pin is undefined

An input pin with nothing driving it has no defined voltage, so stray coupling from nearby signals swings it around unpredictably. A weak resistor to a rail settles it: a pull-up to the supply holds the line high, a pull-down to ground holds it low, until something actively drives it the other way.

Idle level by convention

Each bus sets its resting level on purpose. I2C's open-drain lines idle high through their pull-ups. A UART line idles high and drops for the start bit. A reset or enable line carries a pull-up or pull-down so the chip powers up in a known state instead of a random one.

I=VccRI = \frac{V_{cc}}{R}

The resistor value is a trade-off. A 10 kΩ pull-up on a 3.3 V rail passes only about 0.33 mA when the line is held low, which is easy on the driver but slow to pull the line back high. A stronger 1 kΩ snaps it high faster and costs about 3.3 mA. Fast buses want the stronger pull-up; low-power designs want the weaker one.

Deep dive· Internal pull-ups on a microcontroller

Most microcontroller pins have a weak pull-up, and often a pull-down, built in that firmware can switch on, typically tens of kilohms. It saves a part on an undemanding line like a button input. For a bus with real speed or noise requirements, an external resistor of a value you chose is still the better call, because the internal one is weak and only loosely specified. So a button gets the internal pull-up, and an I2C bus gets external ones sized for the job.

A pin shown three ways: with a pull-up resistor holding it high, with a pull-down holding it low, and floating with no resistor.
The same pin three ways: pulled up to high, pulled down to low, or left floating.

On a One Thousand Drones board the I2C lines carry their pull-ups, and the microcontroller's boot-strap and enable pins carry pull-ups or pull-downs so the chip always starts in the state the design intends.

Checkpoint

Quick check

What does a pull-up resistor do to an idle line?
An input pin connected to nothing does what?
Which bus relies on pull-ups because its lines are open-drain?
0 / 3 correct

One Thousand Drones engineering team · verified 2026-07