Raspberry Pi Compute Module 1: A Deep Dive for Embedded Makers
The original Compute Module, offering a compact and flexible System-on-Module for embedded projects.

The Raspberry Pi Compute Module 1 (CM1) is a foundational product in the Raspberry Pi Compute Module line, released in 2014. It's designed for industrial applications and embedded systems where a standard Raspberry Pi board's form factor or fixed interfaces are not suitable. Instead of a ready-to-use board with ports, CM1 is a SODIMM-style module containing the core components of a Raspberry Pi: the processor, RAM, and flash storage. This design allows developers to integrate the Raspberry Pi's processing power into custom PCB designs, providing flexibility in hardware layout and peripheral selection.
At the heart of the Compute Module 1 is the Broadcom BCM2835 System-on-Chip (SoC). This is the same capable processor found in early Raspberry Pi models like the original Model B and the Pi A+. The BCM2835 is an ARMv6-based chip, featuring a single-core 32-bit ARM processor clocked at 700MHz. While not as powerful as later Raspberry Pi SoCs, it offers sufficient performance for a wide range of embedded tasks, including sensor data acquisition, control loops, and basic user interface management. The SoC also integrates graphics processing capabilities and essential I/O controllers.
The CM1 is particularly suited for makers and engineers who need to build custom hardware around the Raspberry Pi ecosystem. It's ideal for projects requiring a small footprint, specific I/O configurations, or integration into existing product designs. Unlike the standard Raspberry Pi boards, the CM1 requires a 'carrier board' to provide power, USB ports, HDMI output, and access to its GPIO pins. This separation of the core computing unit from the I/O board makes it a versatile solution for mass production and specialized applications where cost and form factor are critical considerations.
Watch
Related video, embedded from YouTube.
Specifications
| Microcontroller / SoC | Broadcom BCM2835 |
| Architecture | 32-bit ARMv6 |
| Clock speed | 700 MHz |
| Flash / Storage | 1GB eMMC (on module) |
| RAM / SRAM | 512MB DDR2 RAM |
| Operating voltage | 3.3V |
| Digital I/O pins | 26 GPIO (exposed via SODIMM connector) |
| Analog / ADC | โ |
| PWM | Yes (via GPIO) |
| Connectivity | Gigabit Ethernet (via carrier board), Wi-Fi/Bluetooth (via carrier board module) |
| USB | USB 2.0 (via carrier board) |
| Power input | 5V DC (via carrier board) |
| Dimensions | 67.6mm x 30mm |
Pinout & pin functions
| Pin | Function |
|---|---|
| VCC (3.3V) | Power output (3.3V) |
| GND | Ground |
| GPIO0 | General Purpose Input/Output 0 |
| GPIO1 | General Purpose Input/Output 1 |
| GPIO2 | General Purpose Input/Output 2 |
| GPIO3 | General Purpose Input/Output 3 |
| GPIO4 | General Purpose Input/Output 4 |
| GPIO5 | General Purpose Input/Output 5 |
| GPIO6 | General Purpose Input/Output 6 |
| GPIO7 | General Purpose Input/Output 7 |
| GPIO8 | General Purpose Input/Output 8 |
| GPIO9 | General Purpose Input/Output 9 |
| GPIO10 | General Purpose Input/Output 10 (SPI MOSI) |
| GPIO11 | General Purpose Input/Output 11 (SPI SCLK) |
| GPIO12 | General Purpose Input/Output 12 |
| GPIO13 | General Purpose Input/Output 13 (SPI MISO) |
| GPIO14 | General Purpose Input/Output 14 (UART TX) |
| GPIO15 | General Purpose Input/Output 15 (UART RX) |
| GPIO16 | General Purpose Input/Output 16 |
| GPIO17 | General Purpose Input/Output 17 |
| GPIO18 | General Purpose Input/Output 18 (PWM) |
| GPIO19 | General Purpose Input/Output 19 |
| GPIO20 | General Purpose Input/Output 20 |
| GPIO21 | General Purpose Input/Output 21 |
| GPIO22 | General Purpose Input/Output 22 |
| GPIO23 | General Purpose Input/Output 23 |
| GPIO24 | General Purpose Input/Output 24 |
| GPIO25 | General Purpose Input/Output 25 |
| GPIO26 | General Purpose Input/Output 26 |
| GPIO27 | General Purpose Input/Output 27 |
| I2C SDA | I2C Data (GPIO2) |
| I2C SCL | I2C Clock (GPIO3) |
| SPI CS | SPI Chip Select (GPIO8) |
| SPI MOSI | SPI Master Out Slave In (GPIO10) |
| SPI MISO | SPI Master In Slave Out (GPIO13) |
| SPI SCLK | SPI Serial Clock (GPIO11) |
| UART TX | UART Transmit (GPIO14) |
| UART RX | UART Receive (GPIO15) |
Wiring & circuit basics
Powering the Compute Module 1 requires a stable 5V DC supply connected to the carrier board. The CM1 module itself operates at 3.3V, and the carrier board typically includes voltage regulators to provide this. Ensure the power supply can provide sufficient current, especially if using peripherals that draw significant power. A typical requirement might be 2A or more for the entire system. Incorrect voltage or insufficient current can lead to instability or damage. Always refer to the carrier board's documentation for specific power requirements.
The logic level for GPIO pins on the Compute Module 1 is 3.3V. This means you should not directly connect 5V signals to any GPIO pin, as this can damage the SoC. If you need to interface with 5V devices, use a logic level shifter or a voltage divider circuit. For example, to connect an LED to a GPIO pin, you would connect the GPIO pin to a current-limiting resistor (e.g., 220-330 ohms) and then to the LED's anode, with the LED's cathode connected to ground. This limits the current flowing through the LED and protects the GPIO pin.
When connecting I2C devices, which operate at 3.3V, you will typically use the dedicated I2C pins (SDA and SCL) or any general-purpose GPIO pins configured as I2C. For instance, to connect an I2C temperature sensor like the BMP180, you would connect its VCC to a 3.3V pin, its GND to a ground pin, its SDA to the CM1's I2C SDA pin (GPIO2), and its SCL to the CM1's I2C SCL pin (GPIO3). Ensure that the sensor's operating voltage is compatible with 3.3V.
Programming & getting started
The Compute Module 1, running Raspberry Pi OS (formerly Raspbian), is primarily programmed using standard Linux development tools and languages. While it doesn't natively support the Arduino IDE in the same way an Arduino board does, you can use PlatformIO within VS Code for a more integrated development experience, or compile C/C++ code directly using GCC. For Python development, you can use standard Python libraries to control GPIO and other peripherals. The initial setup involves flashing Raspberry Pi OS onto the eMMC storage of the CM1 via its carrier board, and then accessing the system via SSH or a connected monitor and keyboard.
To upload your first program, after setting up Raspberry Pi OS on the CM1, you would typically write your code (e.g., a Python script to blink an LED) on a separate computer or directly on the CM1. For Python, you can use libraries like RPi.GPIO or GPIO Zero. The process involves saving the script (e.g., blink.py) and then executing it from the terminal using `python blink.py`. If using PlatformIO, you would build and upload the project from the PlatformIO interface, which handles the compilation and transfer to the CM1.