Compute Module 4
by Raspberry Pi
NOTE: This build is alpha quality and is for experimental use. It is missing features and has known issues.
The Raspberry Pi Compute Module 4 is based on the Raspberry Pi 4 Model B, but in a smaller form factor - perfect for embedding into products or projects without the bulk of a classic Raspberry Pi. You get all the computational power of Raspberry Pi 4 in a compact form factor for deeply embedded applications. The CM4 incorporates the same quad-core ARM Cortex-A72 processor, dual video output, gigabit Ethernet, UART, I2C, SPI, I2S, and a few PWM for good measure.
This module is available in multiple variants, with a range of RAM and eMMC Flash options, and with or without wireless connectivity. The modules are available with 1GB, 2GB, 4GB or 8GB LPDDR4-3200 SDRAM with optional storage of 8GB, 16GB or 32GB eMMC Flash. The wireless option includes 2.4GHz and 5GHz 802.11b/g/n/ac wireless LAN and Bluetooth 5.0 for BT classic and BTLE support.
This product version of the CM4 modules comes with 4GB RAM 32GB MMC, and WiFi!
Note: We don’t include the Compute Module IO board, but it’s strongly recommended!
Compute ALL the THINGs!
Compared to the earlier Compute Module 3+, the CM4 features faster CPU cores, better multimedia, more interfacing capabilities, a range of RAM densities, and a wireless connectivity option. Instead of a DIMM socket, there are two board-to-board connectors that carry high-speed signals with ease - like multiple MIPI displays and camera ports. In addition to all the pins that supply Ethernet and SDIO and SPI and such, there’s also 28 GPIO pins, with up to 6 × UART, 6 × I2C and 5 × SPI.
On the video side, there are dual HDMI output, VideoCore VI graphics with OpenGL ES 3.x support, 4Kp60 hardware decode of H.265 (HEVC) video, and 1080p30 hardware encode of H.264 (AVC) video.
It’s great for industrial control or robotic use, digital/video signage, IoT, and AI/machine learning projects
Compute Module 4 introduces a brand new form factor and a compatibility break with earlier Compute Modules. Where previous modules adopted the JEDEC DDR2 SODIMM mechanical standard, with I/O signals on an edge connector, we now bring I/O signals to two high-density perpendicular connectors (one for power and low-speed interfaces, and one for high-speed interfaces).
This significantly reduces the overall footprint of the module on its carrier board, letting you achieve smaller form factors for your products. This version is intended for experienced developers who will be using the board for industrial and commercial applications.
- 1.5GHz quad-core 64-bit ARM Cortex-A72 CPU
- VideoCore VI graphics, supporting OpenGL ES 3.x
- 4Kp60 hardware decode of H.265 (HEVC) video
- 1080p60 hardware decode, and 1080p30 hardware encode of H.264 (AVC) video
- Dual HDMI interfaces, at resolutions up to 4K
- Single-lane PCI Express 2.0 interface
- Dual MIPI DSI display, and dual MIPI CSI-2 camera interfaces
- 1GB, 2GB, 4GB or 8GB LPDDR4-3200 SDRAM
- Optional 8GB, 16GB or 32GB eMMC Flash storage
- Optional 2.4GHz and 5GHz IEEE 802.11b/g/n/ac wireless LAN and Bluetooth 5.0
- Gigabit Ethernet PHY with IEEE 1588 support
- 28 GPIO pins, with up to 6 × UART, 6 × I2C, and 5 × SPI
These downloads are for CircuitPython standalone on the Raspberry Pi (not Blinka). There is no underlying operating system. It is in early development.
After installing the disk image on an SD card, the normal CircuitPython USB workflow will be available on the micro-B connector on the IO board. EMMC compute modules are not supported yet.
Have some info to add for this board? Edit the source for this page here.
This is the latest stable release of CircuitPython that will work with the Compute Module 4.
Use this release if you are new to CircuitPython.
Built-in modules available: _asyncio, _bleio, _pixelmap, adafruit_bus_device, adafruit_pixelbuf, aesio, array, atexit, binascii, bitbangio, bitmaptools, board, builtins, busio, collections, digitalio, displayio, errno, fontio, framebufferio, getpass, json, keypad, math, microcontroller, msgpack, neopixel_write, onewireio, os, rainbowio, random, re, rtc, sdcardio, sdioio, select, sharpdisplay, storage, struct, supervisor, sys, terminalio, time, touchio, traceback, ulab, usb_cdc, usb_hid, usb_midi, vectorio, zlib
This is the latest development release of CircuitPython that will work with the Compute Module 4.
Alpha development releases are early releases. They are unfinished, are likely to have bugs, and the features they provide may change. Beta releases may have some bugs and unfinished features, but should be suitable for many uses. A Release Candidate (rc) release is considered done and will become the next stable release, assuming no further issues are found.
Please try alpha, beta, and rc releases if you are able. Your testing is invaluable: it helps us uncover and find issues quickly.
Release Notes for 8.1.0-beta.0
Built-in modules available: _asyncio, _bleio, _pixelmap, adafruit_bus_device, adafruit_pixelbuf, aesio, array, atexit, binascii, bitbangio, bitmaptools, board, builtins, busio, collections, digitalio, displayio, errno, fontio, framebufferio, getpass, gifio, json, keypad, math, microcontroller, msgpack, neopixel_write, onewireio, os, rainbowio, random, re, rtc, sdcardio, sdioio, select, sharpdisplay, storage, struct, supervisor, sys, terminalio, time, touchio, traceback, ulab, usb_cdc, usb_hid, usb_midi, vectorio, zlib
Every time we commit new code to CircuitPython we automatically build binaries for each board and language. The binaries are stored on Amazon S3, organized by board, and then by language. These releases are even newer than the development release listed above. Try them if you want the absolute latest and are feeling daring or want to see if a problem has been fixed.
Previous Versions of CircuitPython
All previous releases of CircuitPython are available for download from Amazon S3 through the button below. For very old releases, look in the OLD/ folder for each board. Release notes for each release are available at GitHub button below.
Older releases are useful for testing if you something appears to be broken in a newer release but used to work, or if you have older code that depends on features only available in an older release. Otherwise we recommend using the latest stable release.