CM4-Duino
| ||
Overview
I am a CM4 duino basic expansion board, an expansion board that can be used with Raspberry Pi Compute Module 4, and supports 5V DC power supply with Typc-C interface. Onboard HDMI interface, one CSI interface and one USB interface, standard arduino interface, etc...
Precautions for use
1: Do not plug and unplug any device except USB and HDMI when powered on.
2: Type C interface can be used as a power supply or as a USB interface to flash images (need to use BOOT switch to switch).
3: In order to ensure the normal power supply of CM4, please do not connect other devices when using the Type C interface to flash the image.
4: When CM4 is in normal use, it needs to provide a 5V 2A power supply for CM4. Otherwise, there may be problems such as automatic shutdown, frequency reduction, and so on.
5: USB2.0 is closed by default, if you want to open it, you need to add dtoverlay=dwc2,dr_mode=host in config.txt.
Product Size
What's on board
| Label | Name | Description |
| 1 | Power supply/flashing interface | 5V/2A power supply, can also be used as an eMMC flashing interface |
| 2 | USB 2.0 interface | USB 2.0 interface, support various USB devices to be inserted |
| 3 | HDMI port | HDMI port, supports 4K 30fps output |
| 4 | BOOT switch button | ON: Compute Module 4 boots to USB Type-C port OFF: Compute Module 4 boots to eMMC or Micro SD card |
| 5 | CM4 Connector | Applies to all versions of Compute Module 4 |
| 6 | CAM Interface | MIPI CSI Camera Interface |
| 7 | User LED | LED blinks and sparkles |
| 8 | ADC Chip | 8-bit ADC, I2C interface, 8-channel ADC chip ADS7830 |
| 9 | User Button | Button Module |
| 10 | GPIO | Arduino interface GPIO |
| 11 | Function Switch | For details, please refer to the function pin description |
| 12 | M.2 Interface | A module that supports NVME SSD solid state or other PCIE channels |
| 13 | Micro SD Card Slot | For inserting a Micro SD card with the system to start the Compute Module 4 Lite |
Hardware Connection
Note
Do not plug or unplug any device while it is powered on!
Writing Image
- Write Image for Compute Module Boards eMMC version
- Wrote Image for Compute Module Boards Lite version
USB2.0
The USB port is disabled by default on the CM4 to save power. If you need to start, you need to add the following to the config.txt file:
dtoverlay=dwc2,dr_mode=host
After restarting:
If you use the latest Raspberry Pi OS (image after October 30, 2021) USB2.0 is OTG mode by default, CM4 will report an error:
config failed, hub doesn't have any ports! (err -19)
However, USB can still be used. If you want to remove this error, remove otg_mode=1 in [cm4] of config.txt, and add dtoverlay=dwc2, dr_mode=host (USB cannot be recognized without adding it).

ADC
Basic introduction
The ADS7830 is a single-supply, low-power, 8-bit data acquisition device with a serial I2C interface and an 8-channel multiplexer. The analog-to-digital (A/D) converter has a track-and-hold amplifier and an internal asynchronous clock.
The ADS7830 has a resolution of 8 bits, a total of 8 inputs, and a maximum sampling rate of 70KSPS.
It can be set to differential mode and single-ended input, and the program defaults to single-ended input.
The I2C address is: 0x48
Download Program
Open the Raspberry Pi terminal and execute the following command:
sudo apt-get install p7zip-full https://files.waveshare.com/upload/5/5d/CM4-duino-code.zip 7z x CM4-duino-code.zip -O./ cd CM4-duino-code
Python
Run the demo, the program supports python2/3.
# python2 sudo python ADS7830.py # python3 sudo python3 ADS7830.py
As shown in the figure below, A0-A7 are 7 analog input channels:

Note: A total of 8 ADCs are collected from 0-7. If the channel is suspended, the value of the channel will float up and down, and the data will be invalid.
LED usage
A programmable LED is onboard:
![]()
Using GPIO6:

Button usage
Onboard 2 buttons USER1 USER2:
![]()
USER1 uses GPIO4, USER uses GPIO5, and USER2 can choose whether it is the reset of CM4 through the resistor, and the default connected GPIO5.

![]()
Functional pin description
| Label | Name | Description |
| 1 | BT-DIS | Disable Bluetooth, only support core board with wireless module |
| 2 | WIFI-DIS | Disable WIFI, only support core board with wireless module |
| 3 | IO-VREF | IO logic voltage selection |
| 4 | RUN/GL-EN | Reset or shutdown CM4 |
| 5 | CFG | CFG pin function select 3.3V or A6 |
| 6 | USER | User button Function selection, D5 or RST |
| 7 | I2C ADDR | ADC function module I2C address selection, default address: 0x48 |
CSI DSI
Note: The following is a general description of CM4, specific devices are different: this module does not have a DSI interface, and only HDMI0, and CSI0.
CSI DSI
New Version (Bookworm)
The DSI screen is 800x480 resolution screen by default, please refer to the corresponding WIKI for other resolution screens
When using the official base board Compute Module 4 IO Board, note that the J6 jumper cap needs to be connected
DSI
#Add the following to the config.txt file: sudo nano /boot/firmware/config.txt #DSI0 (V1~V3) dtoverlay=vc4-kms-dsi-7inch,dsi0 #DSI1 (V4) dtoverlay=vc4-kms-dsi-7inch,dsi1
CSI
| Mode | CAM0 setup statement | CAM1 setup statement |
|---|---|---|
| OV9281 | dtoverlay=ov9281,cam0 | dtoverlay=ov9281,cam1 |
| IMX290/IMX327 | dtoverlay=imx290,clock-frequency=37125000,cam0 | dtoverlay=imx290,clock-frequency=37125000,cam1 |
| IMX378 | dtoverlay=imx378,cam0 | dtoverlay=imx378,cam1 |
| IMX219 | dtoverlay=imx219,cam0 | dtoverlay=imx219,cam1 |
| IMX477 | dtoverlay=imx477,cam0 | dtoverlay=imx477,cam1 |
| IMX296 | dtoverlay=imx296,cam0 | dtoverlay=imx296,cam1 |
| IMX708 | dtoverlay=imx708,cam0 | dtoverlay=imx708,cam1 |
sudo reboot
Note:
1. The single-port camera can only work on CAM0, that is, it is not possible to use CAM1 port alone. But you can use the CAM0 port alone, or connect the dual cameras 2. If the device is recognized, and the startup prompt "Camera frontend has timed out!" appears, please update "sudo rpi-update"
Test Camera
- Enter the camera detection command, and you can see that the camera has been detected
libcamera-hello --list-cameras

- Display the camera screen to the desktop
libcamera-hello -t 0
- Take a photo
libcamera-jpeg -o test.jpg
- Record a 10s video
libcamera-vid -t 10000 -o test.h264
Other commands
Check if the camera is detected
libcamera-hello --list-cameras
Open the corresponding camera
libcamera-hello --camera 1 libcamera-hello --camera 0
Take a photo
libcamera-jpeg -o test.jpg #You can add --camera to specify the camera
#The new system uses dual cameras #Remove camera_auto_detect=1 in config.txt #camera_auto_detect=1 #Add dtoverlay=imx219,cam1 dtoverlay=imx219,cam0 #Where imx219 is the camera sensor model and other sensors are supported dtoverlay=ov5647,cam0 dtoverlay=imx219,cam0 dtoverlay=ov9281,cam0 dtoverlay=imx477,cam0 dtoverlay=imx519,cam0 #Then reboot reboot #Open camera libcamera-hello -t 0 or libcamera-hello #Other instructions: #Check if the camera is detected libcamera-hello --list-cameras #Open the corresponding camera, preview for 5 seconds libcamera-hello --camera 1 libcamera-hello --camera 0 #Take photos libcamera-jpeg -o test.jpg #Shoot video libcamera-vid -t 10000 -o test.h264 #You can add --camera to specify the camera #-t <duration> option allows the user to choose how long the window is displayed in milliseconds
For more commands, you can click here.
- Note: If using a DSI interface display there will be an HDMI disabled, even if just compiling the corresponding file without connecting a DSI screen.
- Connecting either HDMI port will allow output of an image, regardless of which HDMI port is used. If two HDMI screens are connected, only HDMI0 has an image output.
- To enable two HDMI ports, remove the configuration from config.txt:
- And then reboot it.
Please refer to Raspberry Pi manual.
Old System Version (Buster and Bullseye)
Configure Files
CSI and DSI are disabled by default. When using the camera and DSI, three I2C devices, I2C-10, I2C-11, and I2C-0 will be occupied.
Booting is performed as follows:
wget https://files.waveshare.com/upload/7/75/CM4_dt_blob_Source.zip unzip -o CM4_dt_blob_Source.zip -d ./CM4_dt_blob_Source sudo chmod 777 -R CM4_dt_blob_Source cd CM4_dt_blob_Source/ #Execute (for version V1~V3) sudo dtc -I dts -O dtb -o /boot/dt-blob.bin dt-blob-disp0-double_cam.dts #Execute (for version V4) sudo dtc -I dts -O dtb -o /boot/dt-blob.bin dt-blob-disp1-double_cam.dts Add the following to the config.txt file: sudo nano /boot/config.txt Change dtoverlay=vc4-kms-v3d to dtoverlay=vc4-fkms-v3d #When using any DSI, HDMI1 has no image output, even if you are not connected to the DSI screen, as long as you compile the corresponding file, then HDMI1 will have no output #If you need to restore, delete the corresponding dt-blob.bin: sudo rm -rf /boot/dt-blob.bin #After execution, turn off the power and restart
Record Test
Connect to the camera and the DSI display:
1. Please make sure it is connected under powering off.
2. Connect to the power.
3. The display will be booted after waiting for a few seconds.
4. If it fails to boot, check whether /boot/dt-blob.bin exists, and reboot it if it exists.
Old Version (Buster)
The camera needs to run raspi-config, select Interfacing Options -> Camera -> Yes -> Finish -> Yes, reboot the system, open enable camera, and then restart to save the changes.
Test the Raspberry Pi camera.
Check the screen of the first connected camera:
sudo raspivid -t 0 -cs 0
Check the screen of the second connected camera:
sudo raspivid -t 0 -cs 1
Resource
Document
- Schematic
- Raspberry Pi Compute Module 4 IO Board Brief
- Raspberry Pi Compute Module 4 IO Board Datasheet
- CSI Camera Reference
Demo codes
3D Drawing
Software
FAQ
Please use the 2242 NVME SSD.
{{{5}}}
Support
Technical Support
If you need technical support or have any feedback/review, please click the Submit Now button to submit a ticket, Our support team will check and reply to you within 1 to 2 working days. Please be patient as we make every effort to help you to resolve the issue.
Working Time: 9 AM - 6 PM GMT+8 (Monday to Friday)

