# BCM2835

> system-on-a-chip

**Wikidata**: [Q116727725](https://www.wikidata.org/wiki/Q116727725)  
**Source**: https://4ort.xyz/entity/bcm2835

## Summary
The **BCM2835** is a system-on-a-chip (SoC) developed by **Broadcom**, primarily known as the processor used in the original **Raspberry Pi** models (Raspberry Pi 1 and Zero). It integrates a **700 MHz ARM1176JZ(F)-S** CPU core, a **VideoCore IV** GPU, and supporting peripherals into a single chip, enabling compact, low-power computing for embedded and educational applications. As a foundational component of early Raspberry Pi devices, it played a key role in democratizing access to affordable, single-board computing.

## Key Facts
- **Classification**: System on a chip (SoC), subclass of integrated circuit.
- **Manufacturer**: Broadcom.
- **Core Architecture**: ARM1176JZ(F)-S (ARMv6 instruction set).
- **CPU Clock Speed**: 700 MHz (default; overclockable to ~1 GHz in some configurations).
- **GPU**: Broadcom VideoCore IV (supports OpenGL ES 2.0, hardware-accelerated video decoding up to 1080p).
- **Memory**: Supports external LPDDR2 SDRAM (typically 256 MB or 512 MB in Raspberry Pi 1/Zero).
- **Peripherals**:
  - USB 2.0 host/device controller.
  - GPIO (General-Purpose Input/Output) pins (26 or 40, depending on Raspberry Pi model).
  - SD/MMC interface for storage.
  - HDMI, composite video, and audio outputs.
  - CSI (Camera Serial Interface) and DSI (Display Serial Interface) for Raspberry Pi camera/display modules.
- **Power Consumption**: ~1–2 watts under typical load (Raspberry Pi 1 Model B).
- **Package**: 289-pin TFBGA (Thin Fine-Pitch Ball Grid Array).
- **Release Context**:
  - Used in **Raspberry Pi 1 Model A/B** (released February 2012).
  - Used in **Raspberry Pi Zero** (released November 2015) and **Zero W** (2017).
- **Software Support**:
  - Official Raspberry Pi OS (formerly Raspbian).
  - Linux kernel (mainline support since ~2012).
  - Bare-metal programming (e.g., Circle, Ultibo).
- **Part Of**:
  - **ARM11** family (parent core: ARM1176JZ(F)-S).
  - **Raspberry Pi 1** and **Zero** hardware platforms.
- **Aliases**: Broadcom BCM2835, Raspberry Pi SoC (first generation).
- **Wikidata Description**: "system-on-a-chip" (linked to 41 Wikimedia sitelinks).
- **Notable Limitations**:
  - No hardware floating-point unit (FPU) in ARM1176JZ(F)-S (software emulation required).
  - Limited to 32-bit ARMv6 instruction set (incompatible with ARMv7/ARMv8 binaries).
  - Single-core design (no multi-threading support).

## FAQs

### Q: What devices use the BCM2835?
A: The BCM2835 powers the **Raspberry Pi 1 Model A/B** (2012), **Raspberry Pi Zero** (2015), and **Raspberry Pi Zero W** (2017). It was also used in third-party single-board computers (e.g., Banana Pi M1) and some embedded systems requiring low-power ARMv6 processing.

### Q: How does the BCM2835 compare to newer Raspberry Pi SoCs?
A: Unlike later Raspberry Pi SoCs (e.g., BCM2837/BCM2711 with ARM Cortex-A cores), the BCM2835 uses an older **ARM1176JZ(F)-S** core (ARMv6), lacks hardware FPU, and is single-core. It also has lower memory bandwidth (LPDDR2 vs. LPDDR4 in newer models) and no support for 64-bit operating systems. However, it remains compatible with legacy software and consumes less power (~1W vs. ~3–5W for newer Pi models).

### Q: Can the BCM2835 run modern operating systems?
A: Yes, but with limitations. It officially supports **32-bit Raspberry Pi OS** (based on Debian) and lightweight Linux distributions (e.g., DietPi, Alpine Linux). However, it cannot run **64-bit OSes** (e.g., Ubuntu 64-bit, Raspberry Pi OS 64-bit) or software compiled for ARMv7/ARMv8 (e.g., newer versions of Chromium, Docker). Some users have ported older versions of Windows IoT Core or RISC OS to it.

### Q: What are the BCM2835’s GPIO capabilities?
A: The BCM2835 provides **26 or 40 GPIO pins** (depending on the Raspberry Pi model), which can be configured for digital input/output, PWM, I2C, SPI, UART, and more. The pins operate at **3.3V logic levels** (5V-tolerant on some models with external protection). Libraries like **RPi.GPIO** (Python) and **WiringPi** (C) simplify interaction with these pins.

### Q: Is the BCM2835 suitable for real-time applications?
A: The BCM2835’s **single-core ARM1176JZ(F)-S** is not optimized for hard real-time systems due to its lack of symmetric multiprocessing (SMP) and predictable interrupt handling. However, it can run **real-time operating systems (RTOS)** like FreeRTOS or bare-metal code (e.g., Circle framework) for time-sensitive tasks, though performance is limited compared to dedicated microcontrollers (e.g., STM32, ESP32).

### Q: What video and audio capabilities does the BCM2835 have?
A: The **VideoCore IV GPU** supports:
  - **Video decoding**: H.264 up to 1080p30 (hardware-accelerated).
  - **3D graphics**: OpenGL ES 2.0 (with proprietary Broadcom drivers).
  - **Display outputs**: HDMI (up to 1920×1200), composite video (PAL/NTSC), and DSI (for Raspberry Pi touchscreen displays).
  - **Audio**: HDMI audio output, PWM-based analog audio (3.5mm jack), and I2S for external DACs.

### Q: How does the BCM2835 handle storage?
A: The SoC lacks onboard storage but supports:
  - **MicroSD card** (via SD/MMC interface) for bootable OS images.
  - **USB mass storage** (e.g., flash drives, external HDDs) via USB 2.0.
  - **Network-attached storage (NAS)** over Ethernet (on Raspberry Pi 1 Model B) or Wi-Fi (on Zero W).
  - **No eMMC or SATA support** (unlike some competing SoCs, e.g., Rockchip RK3288).

### Q: What programming languages/tools are compatible with the BCM2835?
A: The BCM2835 supports a wide range of languages/tools, including:
  - **Low-level**: C/C++ (via GCC, Clang), assembly (ARMv6).
  - **High-level**: Python (RPi.GPIO, Pygame), JavaScript (Node.js), Java (limited support), Rust.
  - **Bare-metal**: Circle (C++ framework), Ultibo (Pascal), and custom bootloaders.
  - **Development tools**: Raspberry Pi OS’s built-in tools (e.g., Thonny IDE), cross-compilation (e.g., ARM Linux toolchains), and JTAG debugging (with external hardware).

### Q: What are the BCM2835’s thermal and power requirements?
A: The BCM2835 is **passively cooled** in most Raspberry Pi 1/Zero configurations, with a **thermal design power (TDP) of ~1–2W**. It operates within a **0°C to 70°C** range (junction temperature) but may throttle under sustained heavy loads (e.g., video encoding). Power is supplied via **micro-USB (5V, 1–2A)** or GPIO headers (for PoE in later Zero W models).

### Q: Are there any known vulnerabilities or limitations with the BCM2835?
A: Key limitations include:
  - **Spectre/Meltdown**: Not affected (ARM11 lacks speculative execution).
  - **Rowhammer**: Vulnerable (no ECC memory support).
  - **USB 2.0**: Limited bandwidth (~480 Mbps) can bottleneck high-speed peripherals.
  - **No hardware encryption**: AES/SHA acceleration requires software implementations.
  - **Driver dependencies**: VideoCore IV GPU requires proprietary firmware blobs (included in Raspberry Pi OS).

## Why It Matters
The **BCM2835** was a pivotal component in the **Raspberry Pi’s early success**, bridging the gap between expensive embedded systems and accessible single-board computing. By integrating a **700 MHz ARM11 core, VideoCore IV GPU, and versatile peripherals** into a single chip, it enabled:
- **Educational democratization**: The Raspberry Pi 1’s $25–$35 price point made it feasible for schools, hobbyists, and developing regions to teach and learn programming, electronics, and computer science.
- **Embedded innovation**: Its GPIO pins and Linux compatibility spawned thousands of DIY projects, from home automation (e.g., Home Assistant) to retro gaming (e.g., RetroPie) and robotics.
- **IoT and edge computing**: Despite its age, the BCM2835 remains in use for low-power IoT devices (e.g., sensor networks, data loggers) due to its reliability and energy efficiency.
- **Open-source ecosystem**: The Raspberry Pi Foundation’s decision to open-source parts of the VideoCore IV firmware (e.g., `userland` libraries) encouraged community-driven development, influencing later SoC designs.
- **Legacy software preservation**: The BCM2835’s ARMv6 architecture ensures compatibility with older Linux software, making it a valuable tool for running legacy codebases (e.g., vintage game emulators, industrial control systems).

While newer Raspberry Pi models (e.g., Pi 4/5 with BCM2711/BCM2712) have surpassed it in performance, the BCM2835’s **low cost, simplicity, and broad software support** ensure its continued relevance in niche applications where power efficiency and GPIO flexibility outweigh raw computing power.

## Notable For
- **First Raspberry Pi SoC**: Powered the **original Raspberry Pi 1** (2012), launching the Raspberry Pi Foundation’s mission to promote computing education.
- **ARMv6 Legacy**: One of the last widely used **ARM11-based SoCs**, preserving compatibility with older Linux distributions and bare-metal projects.
- **VideoCore IV GPU**: Pioneered **open-source GPU driver development** (e.g., `vc4` and `v3d` drivers in Linux), influencing later Broadcom SoCs (e.g., BCM2837).
- **Ultra-Low Power**: Consumes **~1W** under typical loads, making it ideal for battery-powered or solar-powered projects (e.g., weather stations, remote sensors).
- **GPIO Versatility**: Standardized **40-pin GPIO headers** (on later Pi 1 Model B+ and Zero models), becoming a de facto interface for hobbyist electronics.
- **Raspberry Pi Zero**: Enabled the **$5 Raspberry Pi Zero** (2015), the cheapest Linux-capable single-board computer at the time, expanding access to embedded computing.
- **Bare-Metal Community**: Inspired **bare-metal frameworks** (e.g., Circle, Ultibo) that allow direct hardware control without an OS, useful for real-time systems and retro computing.
- **Retro Computing**: Popular for **emulating vintage systems** (e.g., NES, SNES, PlayStation 1) via RetroPie, leveraging its GPU acceleration.
- **Industrial and Commercial Use**: Deployed in **commercial products** (e.g., digital signage, kiosks, industrial controllers) due to its long-term availability and stability.
- **No Heatsink Required**: Unlike modern SoCs, the BCM2835 rarely needs active cooling, simplifying enclosure designs.

## Body

### Architecture and Technical Specifications
The BCM2835 is built around a **single-core ARM1176JZ(F)-S** processor, a member of ARM’s **ARM11 family** (ARMv6 instruction set). Key architectural features include:
- **CPU Core**:
  - **Clock speed**: 700 MHz (default); overclockable to ~1 GHz with cooling.
  - **Pipeline**: 8-stage integer pipeline; no hardware floating-point unit (FPU).
  - **Cache**: 16 KB L1 instruction cache, 16 KB L1 data cache; no L2 cache.
  - **Memory Management**: Supports **ARMv6 MMU** (Memory Management Unit) for virtual memory.
  - **Instruction Set**: ARMv6 (32-bit), Thumb-1, Jazelle DBX (for Java bytecode acceleration, rarely used).
- **GPU (VideoCore IV)**:
  - **Shader Cores**: 12 unified shader units (QPU architecture).
  - **Performance**: ~24 GFLOPS (theoretical); supports OpenGL ES 2.0, OpenVG 1.1.
  - **Video Decoding**: H.264 up to 1080p30 (hardware-accelerated via `MMAL` API).
  - **Display Outputs**: HDMI 1.3a (up to 1920×1200), composite video (PAL/NTSC), DSI (for Raspberry Pi touchscreen).
- **Memory Interface**:
  - **Type**: External LPDDR2 SDRAM (typically 256 MB or 512 MB in Raspberry Pi 1/Zero).
  - **Bandwidth**: ~1.6 GB/s (shared between CPU and GPU).
- **Peripheral Interfaces**:
  - **USB**: Single USB 2.0 host/device controller (shared with Ethernet on Pi 1 Model B).
  - **Ethernet**: 10/100 Mbps (via USB-to-Ethernet chip on Pi 1 Model B; absent on Pi 1 Model A/Zero).
  - **GPIO**: 26 or 40 pins (configurable for I2C, SPI, UART, PWM, etc.).
  - **Storage**: SD/MMC interface (for microSD cards).
  - **Camera/Display**: CSI (Camera Serial Interface) and DSI (Display Serial Interface) for Raspberry Pi modules.
  - **Audio**: HDMI audio, PWM-based analog audio (3.5mm jack), I2S for external DACs.

### Raspberry Pi Models Using BCM2835
The BCM2835 was the sole SoC in the following Raspberry Pi models:
| Model               | Release Date | RAM       | USB Ports | Ethernet | GPIO Pins | Price (Launch) |
|---------------------|--------------|-----------|-----------|----------|-----------|----------------|
| Raspberry Pi 1 Model A | Feb 2012     | 256 MB    | 1         | No       | 26        | $25            |
| Raspberry Pi 1 Model B | Feb 2012     | 256 MB    | 2         | Yes      | 26        | $35            |
| Raspberry Pi 1 Model B+ | Jul 2014     | 512 MB    | 4         | Yes      | 40        | $35            |
| Raspberry Pi 1 Model A+ | Nov 2014     | 256 MB    | 1         | No       | 40        | $20            |
| Raspberry Pi Zero     | Nov 2015     | 512 MB    | 1 (micro) | No       | 40        | $5             |
| Raspberry Pi Zero W   | Feb 2017     | 512 MB    | 1 (micro) | No*      | 40        | $10            |

*Zero W includes **Wi-Fi/Bluetooth** via a separate **Cypress CYW43438** chip (not part of BCM2835).

### Software and Operating System Support
- **Official OS**:
  - **Raspberry Pi OS (32-bit)**: Based on Debian, optimized for ARMv6 (legacy versions still available).
  - **NOOBS**: New Out Of Box Software installer (discontinued for BCM2835 in 2020).
- **Third-Party OSes**:
  - **Linux**: Lightweight distros (e.g., DietPi, Alpine Linux, Arch Linux ARM).
  - **RTOS/Bare-Metal**: FreeRTOS, ChibiOS, Circle (C++ framework), Ultibo (Pascal).
  - **Retro Gaming**: RetroPie, Lakka, Recalbox.
  - **Legacy OSes**: RISC OS, Windows IoT Core (discontinued).
- **Development Tools**:
  - **Compilers**: GCC, Clang (ARMv6 target).
  - **IDEs**: Thonny (Python), Geany, VS Code (with remote development).
  - **Libraries**: RPi.GPIO (Python), WiringPi (C), pigpio (C/Python).
  - **Cross-Compilation**: ARM Linux toolchains (e.g., `arm-linux-gnueabihf-gcc`).

### Performance and Benchmarks
- **CPU Performance**:
  - **Dhrystone**: ~1,000 DMIPS (vs. ~2,000 DMIPS for BCM2837).
  - **Sysbench**: Single-threaded performance ~50% slower than BCM2837 (ARM Cortex-A53).
  - **Floating-Point**: Software emulation (no hardware FPU) significantly slows math-heavy tasks.
- **GPU Performance**:
  - **OpenGL ES 2.0**: ~24 GFLOPS (vs. ~50 GFLOPS for VideoCore VI in BCM2711).
  - **Video Decoding**: H.264 1080p30 (hardware-accelerated); struggles with H.265/VP9.
- **Memory Bandwidth**:
  - **LPDDR2**: ~1.6 GB/s (vs. ~6.4 GB/s for LPDDR4 in BCM2711).
  - **Latency**: Higher than modern SoCs due to lack of L2 cache.
- **Power Efficiency**:
  - **Idle**: ~0.5W (Pi Zero).
  - **Load**: ~1–2W (vs. ~3–5W for Pi 4).

### Ecosystem and Community
- **Raspberry Pi Foundation**:
  - Provided **official documentation**, schematics, and firmware updates.
  - Open-sourced **VideoCore IV userland libraries** (e.g., `libbcm_host`, `libmmal`).
- **Community Projects**:
  - **RetroPie**: Emulation platform for classic games (NES, SNES, PlayStation).
  - **Home Automation**: OpenHAB, Home Assistant (limited by single-core performance).
  - **Robotics**: ROS (Robot Operating System) with custom GPIO drivers.
  - **Media Centers**: Kodi (via OSMC or LibreELEC, with hardware-accelerated video).
- **Third-Party Hardware**:
  - **HATs (Hardware Attached on Top)**: GPIO expansion boards (e.g., Sense HAT, Pi Camera).
  - **Cases**: Official and third-party enclosures (e.g., FLIRC for passive cooling).
  - **Clones**: Banana Pi M1, Orange Pi Zero (used BCM2835 or similar SoCs).

### Comparison with Other SoCs
| SoC               | Architecture       | Cores | Clock (GHz) | GPU               | RAM Support       | Release Year | Used In               |
|-------------------|--------------------|-------|-------------|-------------------|-------------------|--------------|-----------------------|
| **BCM2835**       | ARM1176JZ(F)-S     | 1     | 0.7–1.0     | VideoCore IV      | LPDDR2 (512 MB)   | 2012         | Pi 1, Zero            |
| BCM2836           | Cortex-A7          | 4     | 0.9         | VideoCore IV      | LPDDR2 (1 GB)     | 2015         | Pi 2                  |
| BCM2837           | Cortex-A53         | 4     | 1.2         | VideoCore IV      | LPDDR2 (1 GB)     | 2016         | Pi 2 v1.2, Pi 3       |
| BCM2711           | Cortex-A72         | 4     | 1.5–1.8     | VideoCore VI      | LPDDR4 (8 GB)     | 2019         | Pi 4, Pi 400, CM4     |
| Rockchip RK3288   | Cortex-A17         | 4     | 1.8         | Mali-T760         | DDR3/LPDDR3       | 2014         | ASUS Tinker Board     |
| Allwinner A1X     | Cortex-A8          | 1     | 1.0         | Mali-400          | DDR3 (512 MB)     | 2011         | Cubieboard, Banana Pi |

### Development and Hacking
- **Bare-Metal Programming**:
  - **Circle**: C++ framework for bare-metal development (supports USB, Ethernet, GPU).
  - **Ultibo**: Pascal-based OS for real-time applications.
  - **Raspberry Pi Bare Metal Tutorials**: Community guides for writing custom bootloaders/kernels.
- **Firmware**:
  - **Boot Process**: GPU boots first (via `bootcode.bin`), loads `start.elf`, then `kernel.img` (ARM code).
  - **Overclocking**: Possible via `config.txt` (e.g., `arm_freq=1000`, `gpu_freq=500`).
  - **Undervolting**: Reduces power consumption (e.g., `over_voltage=-2`).
- **Debugging**:
  - **JTAG**: Requires external hardware (e.g., Bus Pirate, FTDI adapter).
  - **Serial Console**: UART via GPIO pins (115200 baud).
  - **LED Indicators**: ACT (green) and PWR (red) LEDs for status monitoring.

### Limitations and Workarounds
- **ARMv6 Compatibility**:
  - **Problem**: Cannot run ARMv7/ARMv8 binaries (e.g., newer Chromium, Docker).
  - **Workaround**: Use older software versions or compile from source.
- **No Hardware FPU**:
  - **Problem**: Floating-point operations are slow (software emulation).
  - **Workaround**: Use fixed-point math or optimize code for integer operations.
- **Single-Core Bottleneck**:
  - **Problem**: Multi-threaded applications perform poorly.
  - **Workaround**: Offload tasks to GPU (e.g., via OpenGL ES) or use lightweight OSes.
- **Limited USB Bandwidth**:
  - **Problem**: USB 2.0 (480 Mbps) can bottleneck high-speed peripherals (e.g., external SSDs).
  - **Workaround**: Use microSD for storage or network-attached storage.
- **Proprietary GPU Firmware**:
  - **Problem**: VideoCore IV requires closed-source blobs (`start.elf`, `fixup.dat`).
  - **Workaround**: Use open-source alternatives (e.g., `vc4` driver in Linux) where possible.

### Legacy and Modern Use Cases
Despite its age, the BCM2835 remains viable for:
- **Education**:
  - Teaching **bare-metal programming** (e.g., Circle framework).
  - Learning **ARM assembly** (ARMv6 instruction set).
- **Embedded Systems**:
  - **Sensor networks** (e.g., temperature/humidity logging).
  - **Remote monitoring** (e.g., weather stations, wildlife cameras).
- **Retro Computing**:
  - **Emulation** (e.g., RetroPie for classic consoles).
  - **Vintage OSes** (e.g., RISC OS, early Linux distros).
- **IoT and Edge Devices**:
  - **Low-power gateways** (e.g., LoRaWAN nodes).
  - **Custom controllers** (e.g., CNC machines, 3D printers).
- **Art and DIY Projects**:
  - **LED matrices** (e.g., WS2812B addressable LEDs).
  - **Audio synthesizers** (e.g., using PWM or I2S DACs).

### Future and Obsolescence
- **End of Life**:
  - **Raspberry Pi OS**: Dropped official support for BCM2835 in **2020** (legacy images still available).
  - **Hardware**: Raspberry Pi 1/Zero models discontinued (replaced by Pi Zero 2 W with BCM2710A1).
- **Community Support**:
  - **Linux Kernel**: Mainline support continues (ARMv6 patches maintained by community).
  - **Third-Party OSes**: DietPi, Alpine Linux, and RetroPie still release BCM2835-compatible images.
- **Replacements**:
  - **Raspberry Pi Zero 2 W**: Uses **BCM2710A1** (quad-core Cortex-A53, ARMv8, 64-bit).
  - **Other SoCs**: Rockchip RK3399 (for higher performance), ESP32 (for microcontroller-like use cases).

### Troubleshooting and Common Issues
- **Boot Failures**:
  - **Symptom**: Red PWR LED on, no ACT LED activity.
  - **Causes**: Corrupted `bootcode.bin`, faulty microSD card, insufficient power.
  - **Fix**: Reflash microSD, check power supply (5V/2A recommended).
- **Overheating**:
  - **Symptom**: Throttling or shutdown under load.
  - **Fix**: Add heatsink (e.g., official Raspberry Pi heatsink) or reduce clock speed.
- **GPU Driver Issues**:
  - **Symptom**: Black screen on HDMI, no video output.
  - **Fix**: Update `config.txt` (e.g., `hdmi_safe=1`, `hdmi_group=1`, `hdmi_mode=4`).
- **USB/Ethernet Problems**:
  - **Symptom**: Devices not detected, slow transfers.
  - **Fix**: Use powered USB hub, check `dwc_otg` driver settings in `config.txt`.
- **GPIO Not Working**:
  - **Symptom**: Pins not responding to input/output.
  - **Fix**: Verify pin numbering (BCM vs. BOARD), check for shorts, use `raspi-gpio` tool.