# Electrical Constraints Reference > **类别:reference** | **主题:电气约束通用规范** | **信源:** 多平台汇总 ## Table of Contents - [Platform Comparison Summary](#platform-comparison-summary) - [Raspberry Pi Electrical Details](#raspberry-pi-electrical-details) - [Voltage Levels](#voltage-levels) - [Current Limits](#current-limits) - [Power Rails](#power-rails) - [Internal Pull Resistors](#internal-pull-resistors) - [Safe Driving Patterns](#safe-driving-patterns) - [ESP32 Electrical Details](#esp32-electrical-details) - [Voltage Levels](#voltage-levels) - [Current Limits](#current-limits) - [Power Consumption](#power-consumption) - [Internal Pull Resistors](#internal-pull-resistors) - [Drive Strength Configuration](#drive-strength-configuration) - [Pull-up and Pull-down Resistors](#pull-up-and-pull-down-resistors) - [When Required](#when-required) - [Calculation Formula](#calculation-formula) - [Strength Guidelines](#strength-guidelines) - [Consequences of Wrong Value](#consequences-of-wrong-value) - [Level Shifting](#level-shifting) - [When Required](#when-required) - [Method 1: Voltage Divider (5V → 3.3V, Unidirectional)](#method-1-voltage-divider-5v--33v-unidirectional) - [Method 2: N-Channel MOSFET (Bidirectional)](#method-2-n-channel-mosfet-bidirectional) - [Method 3: Dedicated Level Shifter ICs](#method-3-dedicated-level-shifter-ics) - [Method 4: Direct Connection (3.3V → 5V Input)](#method-4-direct-connection-33v--5v-input) - [Common Mistakes and Warnings](#common-mistakes-and-warnings) - [NEVER Do This](#never-do-this) - [ALWAYS Do This](#always-do-this) - [Quick Reference Card](#quick-reference-card) - [Formulas](#formulas) - [Quick Values](#quick-values) - [Current Limits Summary](#current-limits-summary) - [Voltage Summary](#voltage-summary) - [Common Pin Restrictions](#common-pin-restrictions) --- ## Platform Comparison Summary - Logic voltage:Raspberry Pi=3.3V, ESP32=3.3V - Max per-pin current:Raspberry Pi=16mA source/sink, ESP32=40mA max (20mA recommended) - Aggregate GPIO current:Raspberry Pi=**50mA total**, ESP32=~1200mA total (chip limit) - 5V tolerant:Raspberry Pi=**NO**, ESP32=**NO** - Internal pull-up:Raspberry Pi=~50kΩ, ESP32=~45kΩ typical - Internal pull-down:Raspberry Pi=~50kΩ, ESP32=~45kΩ typical - Drive strength:Raspberry Pi=Fixed, ESP32=Configurable (5-40mA) - Input threshold (VIH):Raspberry Pi=~1.8V, ESP32=~2.0V - Input threshold (VIL):Raspberry Pi=~0.8V, ESP32=~0.8V --- ## Raspberry Pi Electrical Details ### Voltage Levels - **All GPIO pins operate at 3.3V ONLY** - **5V on any GPIO pin WILL PERMANENTLY DAMAGE the SoC** - No built-in overvoltage protection - No built-in ESD protection (handle with care) ### Current Limits - Per-pin source:16mA, Consequence of Exceeding=Voltage droop, pin damage - Per-pin sink:16mA, Consequence of Exceeding=Voltage rise, pin damage - **Total GPIO**:**50mA**, Consequence of Exceeding=Instability, crashes, permanent damage **Critical:** The 50mA limit is across ALL GPIO pins combined, not per-bank. ### Power Rails - 3.3V:Source=Onboard regulator, Available Current=~50mA for peripherals, Notes=Shared with Pi's 3.3V needs - 5V:Source=USB/PSU direct, Available Current=1-2A minus Pi consumption, Notes=No regulation, direct pass-through - GND:Source=Common ground, Available Current=N/A, Notes=8 ground pins on header ### Internal Pull Resistors - GPIO0-8:Default State=Pull-UP, Resistance=~50kΩ - GPIO9-27:Default State=Pull-DOWN, Resistance=~50kΩ **Note:** Internal pulls are too weak for I2C (need 4.7kΩ external). ### Safe Driving Patterns - Single LED:Method=330Ω-1kΩ series resistor, Notes=3-10mA safe - Multiple LEDs:Method=Transistor driver, Notes=If total >50mA - Relay:Method=Transistor/MOSFET + flyback diode, Notes=Never direct from GPIO - Motor:Method=Motor driver IC (L298N, DRV8833), Notes=Never direct from GPIO - Buzzer (passive):Method=Transistor driver, Notes=Inductive load - Buzzer (active):Method=Direct if <16mA, Notes=Check current draw --- ## ESP32 Electrical Details ### Voltage Levels - **All GPIO pins operate at 3.3V ONLY** - **5V on any GPIO pin WILL DAMAGE the chip** - No built-in overvoltage protection - Some ESD protection but don't rely on it ### Current Limits - Per-pin max:40mA, Notes=Absolute maximum - Per-pin recommended:20mA, Notes=For reliability/longevity - Total chip:~1200mA, Notes=Includes WiFi, BT, CPU ### Power Consumption - Active + WiFi TX:Current Draw=80-240mA, Notes=Peaks during transmission - Active + WiFi idle:Current Draw=20-68mA, Notes=Connected but not transmitting - Active, no radio:Current Draw=20-68mA, Notes=CPU running - Modem sleep:Current Draw=3-20mA, Notes=WiFi paused, CPU active - Light sleep:Current Draw=0.8mA, Notes=CPU paused, RTC running - Deep sleep:Current Draw=10-150µA, Notes=Only RTC + ULP available ### Internal Pull Resistors - Standard GPIO:Pull-up=Yes, Pull-down=Yes, Resistance=~45kΩ - GPIO34-39:Pull-up=**NO**, Pull-down=**NO**, Resistance=N/A (input-only) **Note:** Internal pulls are too weak for I2C (need 4.7kΩ external). ### Drive Strength Configuration - 5mA:Current=Weakest, Use Case=Low power, slow signals - 10mA:Current=Low, Use Case=General purpose - 20mA:Current=Default, Use Case=Most applications - 40mA:Current=Maximum, Use Case=Fast edges, heavy loads Higher drive strength = faster edges but more EMI/noise. --- ## Pull-up and Pull-down Resistors ### When Required - I2C bus (SDA):Pull Type=Pull-UP, Typical Value=**4.7kΩ** - I2C bus (SCL):Pull Type=Pull-UP, Typical Value=**4.7kΩ** - 1-Wire bus (DQ):Pull Type=Pull-UP, Typical Value=**4.7kΩ** - Button to GND:Pull Type=Pull-UP, Typical Value=10kΩ - Button to VCC:Pull Type=Pull-DOWN, Typical Value=10kΩ - SPI CS line:Pull Type=Pull-UP, Typical Value=10kΩ - Open-drain output:Pull Type=Pull-UP, Typical Value=1-10kΩ - UART RX (optional):Pull Type=Pull-UP, Typical Value=10kΩ (noise immunity) - Reset line:Pull Type=Pull-UP, Typical Value=10kΩ ### Calculation Formula ``` R = (VCC - VOL) / IOL Where: VCC = Supply voltage (3.3V) VOL = Output low voltage (~0.4V) IOL = Required sink current (3mA for I2C) Example (I2C): R = (3.3V - 0.4V) / 3mA = 967Ω minimum Typical choice: 4.7kΩ (provides margin) ``` ### Strength Guidelines - 1kΩ:Use Case=Long wires, high capacitance, fast I2C, Notes=Strong pull, higher current - 4.7kΩ:Use Case=Standard I2C, 1-Wire, general purpose, Notes=Most common choice - 10kΩ:Use Case=Buttons, CS lines, low-power, Notes=Standard digital pull - 47-100kΩ:Use Case=Wake-up inputs, ultra-low power, Notes=Very weak, slow rise time ### Consequences of Wrong Value **Too high (weak pull):** - Slow signal rise times - Noise susceptibility - Communication errors at higher speeds - May not reach valid HIGH level **Too low (strong pull):** - Excessive current consumption - Device may not be able to pull line LOW - Wasted power in battery applications --- ## Level Shifting ### When Required - 5V logic output → 3.3V GPIO input - 3.3V GPIO output → 5V input (if device doesn't recognize 3.3V as HIGH) - Bidirectional communication between 3.3V and 5V systems ### Method 1: Voltage Divider (5V → 3.3V, Unidirectional) **Use for:** Slow signals (<100kHz), input direction only ``` 5V Signal ──[1kΩ]──┬──> 3.3V GPIO Input │ [2kΩ] │ GND Output: 5V × (2kΩ / 3kΩ) = 3.33V ``` - Simple, cheap:Cons=Input direction only - 2 resistors:Cons=Slow (RC time constant) - No active components:Cons=Loads the signal ### Method 2: N-Channel MOSFET (Bidirectional) **Use for:** I2C, 1-Wire, open-drain signals up to 400kHz ``` 3.3V Side 5V Side │ │ [4.7kΩ] [4.7kΩ] │ │ ├────────┬──────────────────┬──────────┤ │ │ │ │ SDA Source Drain SDA (3.3V) └───── BSS138 ─────┘ (5V) │ Gate │ 3.3V ``` **Operation:** - Gate tied to LOW side voltage (3.3V) - When LOW side pulls down, MOSFET conducts, pulling HIGH side down - When HIGH side pulls down, body diode conducts, pulling LOW side down - Pull-ups restore HIGH state on both sides - MOSFET:Specification=BSS138, 2N7000 (through-hole) - Pull-ups:Specification=4.7kΩ on each side - Voltage:Specification=3.3V on gate, low side; 5V on high side ### Method 3: Dedicated Level Shifter ICs - TXB0104:Channels=4, Type=Auto-direction, Speed=100 Mbps, I2C Safe?=**NO** - TXB0108:Channels=8, Type=Auto-direction, Speed=100 Mbps, I2C Safe?=**NO** - PCA9306:Channels=2, Type=I2C-specific, Speed=1 MHz, I2C Safe?=**YES** - PCA9517:Channels=2, Type=I2C buffer, Speed=400 kHz, I2C Safe?=**YES** - 74LVC245:Channels=8, Type=Unidirectional, Speed=100 MHz, I2C Safe?=N/A (direction pin) - BSS138 modules:Channels=4, Type=Bidirectional, Speed=400 kHz, I2C Safe?=**YES** **CRITICAL WARNING:** TXB-series level shifters do **NOT** work reliably with open-drain protocols (I2C, 1-Wire). They fight the pull-up resistors and cause communication errors. Use BSS138-based modules or PCA9306 for I2C. ### Method 4: Direct Connection (3.3V → 5V Input) Many 5V devices recognize 3.3V as logic HIGH: - VIH (HIGH threshold):Typical 5V TTL=2.0V, Typical 5V CMOS=3.5V - VIL (LOW threshold):Typical 5V TTL=0.8V, Typical 5V CMOS=1.5V **Check datasheet for VIH.** If VIH < 3.0V, direct connection usually works. **NEVER** connect 5V output directly to 3.3V input — level shift or divide required. --- ## Common Mistakes and Warnings ### NEVER Do This - Connect 5V directly to any GPIO:Consequence=**Permanent chip damage** - Drive relay coil directly from GPIO:Consequence=Inductive kickback damages GPIO - Drive motor directly from GPIO:Consequence=Overcurrent, voltage spikes - Exceed 50mA total on RPi GPIO:Consequence=Voltage instability, damage - Use ESP32 GPIO6-11 (WROOM):Consequence=Flash pins — chip crashes - Pull GPIO12 HIGH at boot (ESP32):Consequence=**Flash voltage brick** - Forget pull-ups on I2C:Consequence=Communication failure - Forget pull-up on 1-Wire:Consequence=Bus doesn't work - Use TXB-series for I2C:Consequence=Unreliable communication - Assume GPIO is 5V tolerant:Consequence=It's not — damage results ### ALWAYS Do This - Use current-limiting resistor for LEDs:Reason=Prevents overcurrent (220-330Ω) - Use flyback diode with relays/motors:Reason=Catches inductive voltage spike - Use level shifter for 5V ↔ 3.3V:Reason=Protects GPIO from overvoltage - Check total current draw:Reason=Prevent exceeding limits - Verify I2C addresses before wiring:Reason=Detect conflicts early - Add 100nF decoupling capacitor near ICs:Reason=Reduces noise, improves stability - Use external pull-ups for I2C (4.7kΩ):Reason=Internal pulls too weak - Check ESP32 pin restrictions:Reason=Strapping, flash, input-only - Use transistor for loads >16mA:Reason=Protects GPIO - Add ESD protection for external connectors:Reason=Protects against static --- ## Quick Reference Card ### Formulas **LED Resistor:** ``` R = (VCC - Vf) / If R = (3.3V - 2.0V) / 10mA = 130Ω minimum Recommended: 220-330Ω (5-10mA, plenty bright) ``` **Voltage Divider:** ``` Vout = Vin × (R2 / (R1 + R2)) For 5V → 3.3V: R1=1kΩ, R2=2kΩ ``` **Pull-up Resistor:** ``` R = (VCC - VOL) / IOL Standard: 4.7kΩ for I2C/1-Wire, 10kΩ for buttons ``` ### Quick Values - LED resistor (3.3V, red/green):220-330Ω - LED resistor (3.3V, blue/white):100-150Ω - I2C pull-up:**4.7kΩ** to 3.3V - 1-Wire pull-up:**4.7kΩ** to 3.3V - Button pull-up/down:10kΩ - SPI CS pull-up:10kΩ - 5V → 3.3V divider:1kΩ + 2kΩ - Flyback diode:1N4148 or 1N4007 - Decoupling capacitor:100nF ceramic ### Current Limits Summary - Raspberry Pi:Per Pin=16mA, Total GPIO=**50mA** - ESP32:Per Pin=20mA recommended, Total GPIO=~1200mA chip total ### Voltage Summary - Logic HIGH:RPi=3.3V, ESP32=3.3V - Logic LOW:RPi=0V, ESP32=0V - Max input:RPi=3.3V, ESP32=3.3V - 5V tolerant:RPi=**NO**, ESP32=**NO** ### Common Pin Restrictions **Raspberry Pi:** - GPIO0/1: Reserved (HAT EEPROM) - GPIO14/15: UART/BT conflict (Pi 3/4/Zero2W) **ESP32:** - GPIO6-11: Flash pins — **NEVER USE** - GPIO12: Strapping — **DANGER** (flash voltage) - GPIO16-17: PSRAM (WROVER only) - GPIO34-39: Input only, no pulls ---