Raspberry Pi Compute Module 3 Development Kit - Review

Table of contents

RoadTest: Raspberry Pi Compute Module 3 Development Kit

Author: carmelito

Creation date:

Evaluation Type: Evaluation Boards

Did you receive all parts the manufacturer stated would be included in the package?: True

What other parts do you consider comparable to this product?: Raspberry Pi 3, Raspberry Pi Zero W

What were the biggest problems encountered?: null

Detailed Review:

Firstly I would like to thank element14 for the opportunity to participate in this road test, I have always wanted to check out the Raspberry Pi Compute module 3, but this was an expensive kit to get my hands on. I hope that you will  find  this report  and the benchmarks helpful , and thank  you for  taking time to read it. At this point, I also wanted to mention that most of my review is based on the perspective of an hobbyist, so you may find a some biases as I try and compare this professional looking kit to a hobbyist board like the Raspberry Pi 3 and Pi Zero W.


The picture below shows the back of the Compute Module 3 (CM3) with a 4GB eMMC flash chip to the right, which is used for the operating system. And the Compute Module 3 Lite(CM3L) below with no eMMC flash chip, which means you will have to use a SD card for the operating system just like Pi 3.


For more info about the Compute Module 3 compares to the first iteration of the Compute Module 1,  check out the blog post by Christopher Stanton at Does this Compute? Raspberry Pi Compute Module 3 and IO Board . And for the datasheet checkout - https://www.raspberrypi.org/documentation/hardware/computemodule/datasheet.md


Unboxing the the Kit and first impressions

The Raspberry Pi compute module 3 development kit arrived on time from element14 as promised, and the box that you see in the picture below was well packed in a another element14 box for extra protection. The unboxing experience was nice, and the packaging of the Compute module was very similar to the official Raspberry Pi 7” touch screen display



Inside the box all the components were nicely placed in anti-static bags. The development kit IO board had Compute Module 3(CM3) connected to the SODIMM board and the Compute Module 3 Lite(CM3L) was nicely placed at the side between two sheets of thermocol type material. Both these modules nicely fit into to SODIMM slots and have a satisfying click sound, and are based on the Raspberry Pi 3 processor aka the  BCM2837. The kit also came with a power adapter(5V 2.5A with a micro B end) in its own Raspberry Pi labeled box. And the power adapter box also had connectors for other countries which was a nice touch. There was also a USB A to a micro B cable and 4 jumper wires, which will be used to connect peripherals like Raspberry Pi 7" inch screen and Pi Cameras


Flashing Raspbain stretch on the Compute Module 3 (CM3)

The CM3 contains a BCM2837 processor as used on the Raspberry Pi 3, 1Gbyte LPDDR2 RAM and 4GB eMMC Flash. To load the latest version of Raspbain stretch on the 4GB eMMC flash, you will need to follow the steps below, and will need to computer/laptop, which is referred to as the host computer in the documentation. In my case, I am using Intel Nuc (NUC5i5MYHE i5-5300U) with Ubuntu 16.04 installed. As part of the documentation for flashing CM3, it contains only Microsoft windows screenshot, so here are some screenshots using Ubuntu 16.04 LTS


Install git if you don’t have is installed, using

sudo apt-get install git


Clone the usbboot github repo

git clone --depth=1 https://github.com/raspberrypi/usbboot
cd usbboot

and also install libusb

sudo apt-get install libusb-1.0-0-dev

build and install usbboot, and then run it

sudo ./rpiboot

Now check that J4 jumper is in EN position and power the board, I dint have to do this as the dev IO board had the J4 jumper in the EN position.



And then connect the host computer/laptop to the USB slave port - J15, as shown in the picture above, this is the blue colored cable. In the kit the USB A to a micro B cable dint work, which meant I had to use another cable I had.



This process takes a few mins so be patient, and once the command finishes run lsblk to check if your eMMC flash is detected, which in my case is sdb as you see in the screenshot above.


Now use the dd command to write the latest version of Raspbain , which you have downloaded from https://www.raspberrypi.org/downloads/. Here dont forget to choose the correct drive letter, in my case in the screenshot above it is sdb

sudo dd if=1027-09-07-raspbian-strech-lite.img of=/dev/sdb bs=4MiB


Once the dd command completes, which should take about 10 minutes, unplug USB cable connected to the slave port - J15, and then disconnect and reconnect the power adapter.


Benchmarking CM3 vs CM3Lite vs RPi3 vs Pi Zero W


Now to interesting bit benchmarking and comparing the CM3, CM3L to RPi3. I also used the same SD card a Samsung 16GB class 10 across all the Pi’s loaded with Raspbain Strech (release date 2017-09-07) and also used a Pi Zero W to show some variation, to give you an idea of the performance improvement to when the Raspberry Pi first launched.


As part of the benchmarking exercise I decide to go with the following options - #1 was to use sysbench and  #2 to use Phoronix Test Suite.

SysBench is a modular, open source, cross-platform and multi-threaded benchmark tool for evaluating OS parameters. that are important for a system feared to running a database under intensive load. For more details on sysbench check out the blog post by  Christopher Stanton at - A Comprehensive Raspberry Pi 3 Benchmark


Here is a table with the result of running sysbench, before you run sysbench you will  to install it using apt-get

sudo apt-get install sysbench
sysbench --num-threads=1 --test=cpu --cpu-max-prime=20000 --validate run


CM3LPi 3Pi Zero W

Test execution summary:

    total time:                          370.8749s

    total number of events:              10000

    total time taken by event execution: 370.8698

    per-request statistics:

         min:                                 37.06ms

         avg:                                 37.09ms

         max:                                 74.83ms

         approx.  95 percentile:              37.10ms



Threads fairness:

    events (avg/stddev):           10000.0000/0.00

    execution time (avg/stddev):   370.8698/0.00

Test execution summary:

    total time:                          370.9586s

    total number of events:              10000

    total time taken by event execution: 370.9531

    per-request statistics:

         min:                                 37.06ms

         avg:                                 37.10ms

         max:                                 76.55ms

         approx.  95 percentile:              37.10ms



Threads fairness:

    events (avg/stddev):           10000.0000/0.00

    execution time (avg/stddev):   370.9531/0.00

Test execution summary:

    total time:                          369.4105s

    total number of events:              10000

    total time taken by event execution: 369.4049

    per-request statistics:

         min:                                 36.90ms

         avg:                                 36.94ms

         max:                                 64.86ms

         approx.  95 percentile:              37.01ms



Threads fairness:

    events (avg/stddev):           10000.0000/0.00

    execution time (avg/stddev):   369.4049/0.00

Test execution summary:

    total time:                          624.5748s

    total number of events:              10000

    total time taken by event execution: 624.5305

    per-request statistics:

         min:                                 61.57ms

         avg:                                 62.45ms

         max:                                241.20ms

         approx.  95 percentile:              66.32ms



Threads fairness:

    events (avg/stddev):           10000.0000/0.00

    execution time (avg/stddev):   624.5305/0.00




Phoronix Test Suite (PTS) is a free, open-source benchmark software for Linux and other operating systems. which is developed by Phoronix Media  with cooperation from an undisclosed number of hardware and software vendors. The best part of the PTS, is that you can upload your benchmarks to OpenBenchmarking.org which allow folks to use your unique identifier to run a similar test, which then gives them awesome charts/graphs to compare their system against yours, which meant I had to take advantage of this.


In my case. I am using this method to compare  CM3 and CM3Lite to the RPi3 and Pi Zero W. As part of PTS  there are various types and flavors of benchmarks you can run, to read more about this check out - http://openbenchmarking.org/tests/pts . In my case, I selected a encode-flac which is CPU based test, ramspeed to compare the RAM speeds and iozone to compare the flash memory give that the CM3 use 4GB eMMC Flash instead of using an SD card for the operating system.


Before you run the tests, you will have to download and install PTS using the following commands

sudo apt-get update
sudo apt-get install php5-cli
git clone https://github.com/phoronix-test-suite/phoronix-test-suite/
cd phoronix-test-suite
sudo ./install-sh


Now to run the encode-flac , which is used to benchmark your CPU you will have to install the PTS repo for encode-flac using the following command

phoronix-test-suite install pts/encode-flac


Basically this simple test determines the time it takes the CPU to encode a sample WAV file into a FLAC format. To run the test for the first time use

phoronix-test-suite benchmark pts/encode-flac




Enter the details of request at each prompt. And also make a note of the unique id, which we will use to run and compare another version of the Pi, using the command

phoronix-test-suite benchmark 1709152-BE-PICM3ENCO05


Link to the benchmark - https://openbenchmarking.org/result/1709225-BE-1709151BE13  If you are interested in running the benchmark on your linux laptop or a single board computer like the Beaglebone, with the same options/parameters I used.




To test the RAM speed we are going to use ramspeed ,  this test is capable of running with a variety of parameters as you see in the screenshot below, and if you have time you can run through all the test, in my case I ran all possible test. Remember if you are planning to run all the test this take a couple of hours CM3/CM3L or even more as shown in the results below and for the Pi zero this took almost half a day.


phoronix-test-suite install pts/ramspeed
phoronix-test-suite benchmark pts/ramspeed


As part of the chart below you can ignore the top bar that say ramspeed, this was first run on the CM3. Basically,I wanted to check if there was a huge difference between two runs using the same hardware. Here is the link to the benchmark  -http://openbenchmarking.org/result/1709167-BE-1709159BE47





Another test that I wanted to perform is to check the access times of the SD card, this is an interesting test to perform given that the CM3 use 4GB eMMC Flash instead of an SD card,. This test is called the IOzone used to test the hard disk drive / file-system performance.


phoronix-test-suite install pts/iozone
phoronix-test-suite benchmark pts/iozone



For all the results and charts check out the link at- http://openbenchmarking.org/result/1709162-BE-1709154BE11



As part of the second half of the Road test, I am going to try and attach official Raspberry Pi hardware like the 7" display and Pi Camera's. Here I wanted to test attaching two Pi cameras which is a perquisite for a future project using OpenCV. I am still a noob at OpenCV and have a friend helping me  out, who has a couple of years experience with OpenCV and is an expert at image processing.

Here I also wanted to mention that this part of the road-test came with fair share of issues, which I over came with some trial and error and going through the forum post.  I have covered the workarounds to issues I faced and provide link to forum post below.


Attaching two camera to CAM0 and CAM1 ports

To attach two cameras I followed the documentation at the link  https://www.raspberrypi.org/documentation/hardware/computemodule/cmio-camera.md. As part of the dev kit, you get only one camera adapter board connector,  which means you either need to buy another similar connector or you can use Pi Zero camera connector cable for the second camera, which is the yellowish cable you see in the picture below, this is something read about on a form post.



In my case I am using an old Raspberry pi camera v1.2 and Pi NoIR v2.1 camera connected to CAM1 and CAM0 respectively on the compute module development board, as those are the two pi cameras I had handy. As part of the setup, I also downloaded the dt-blob-dualcam.dts file using wget and converted that into a dt-blob.bin file.




Now, when I ran vcgencmd get_camera to check if the both the cameras are detected, I only found 1 camera was detected, basically the command output was "supported=2 detected=1" which meant I had to do some digging around, and then I tried moving my connection to GPIO4 and GPIO5 instead of GPIO2 and GPIO3 base on the following forum post. This detected both the cameras and I was back in business! I then quickly tested each camera using raspistill using the camera selected option (-cs) to take sample pictures as shown in the screenshot below



Adding Raspberry Pi 7 inch display to DISP1 port


Since the project that I will be working on which I referenced above needs to mobile, another critical component was to have the Raspberry Pi 7 inch display connected to the compute module so that I can debug issues on the go. To attach a 7 inch display to the dev board use the provide display adapter to connect to DISP1 port, as shown in the picture below. In addition, as part of the documentation(https://www.raspberrypi.org/documentation/hardware/computemodule/cmio-display.md ) you will have to download the dt-blob-disp1-cam2.dts file and converted that into a dt-blob.bin and reboot the Pi.


Here is quick video demo running a preview with both the cameras attached.


The python program used for the preview in the video above.

import time
import picamera

cam0 = picamera.PiCamera()
cam0.resolution = (640,480)
cam1 = picamera.PiCamera(camera_num=1)
cam1.resolution = (640,480)

Now to get the preview to work with the picamera module, I had to update the /usr/lib/python2.7/dist-packages/picamera/camera.py , that line (0, 1): 30, # compute module (default for cam 1)  to (3, 1): 30, # compute module (default for cam 1) , per the bug report on the picamera module



Running OpenCV

Last weekend I spent most of time installing OpenCV , and my friend wanted me install older version OpenCV version 2.4 , to take advantage of the SIFT and SURF algorithms which are part of the install out of the box. Here is a picture running a basic openCV canny edges detection program.



If you interested in installing OpenCV on your Pi check out the awesome blog post by Gerrit Polder at Pi IoT] Plant Health Camera #5 - OpenCV



For me, this product from an hardware standpoint scored full marks with the DDR2-SODIMM-mechanically-compatible connector which is an old, tried and tested connector system. Here I also wanted to mention that the SODIMM connector brought back some old memories of when I worked part time building computer and servicing laptops more than a decade ago.

For the support materials and demo section I gave it an 9/10 , as I tried to draw a parallel with the mounds of Raspberry Pi B+/2/3 documentation out there. I would have ideal given this an even lower score with the couple of issue I faced, but having said that I understand that this board is not targeted towards the maker community and is more for professionals product companies trying to include CM3 in a product.

From a price prospective I gave the whole kit full marks, but was tempted to give it a 7/10 at first, as this is way too expensive when compared to Pi3 or any other offering from the Raspberry Pi foundation, but I guess the cost is justified if you designing your own base board and just have to buy CM3 or CM3L.




Based on the benchmarks I ran and the form factor of the CM3/CM3L, and given that module is made to fits in a SODIMM connector, this is an ideal board to build an industrial product around, taking advantage of a full-fledged debain linux operating system. And this has been proven when the compute module was used by NEC in a consumer grade display, which you can  read more about at  - https://www.nec-display-solutions.com/p/hq/en/news/dp/Products/Shared/News/2016/PressReleases/Company/RaspberryPi/RaspberryPi.xhtml.


I know the CM3 and CM3L was launched early this year, and I can’t wait for the next revision. And, hoping the next version will have WiFi and Bluetooth baked in. In addition,it would be nice if the new revision of the compute modules are completely backward compatible, so that any device build on the CM3/CM3L can be easily upgraded in the future,  on similar lines we upgrade RAM in our computers/laptops.

Parents Comment Children