The Raspberry Pi Compute Module was launched yesterday and I felt I owed it to you, dear readers, to get one. ;) OK. So, maybe it’s not fair to blame you guys for it. I’d have bought one anyway, but you helped me to not dither over the decision.
I also have ideas for something I might do with it. But that’s top secret, so don’t tell anyone!
So What is the Compute Module?
It’s a small module in the same SODIMM form factor as a laptop memory module. You can see it in the middle of this photo…
…the big board it’s connected to is the development board, which breaks out all manner of ports which aren’t accessible on the standard model A/B Pis. It’s for embedded systems developers, who want to incorporate the Compute Module into their own products.
How Much?
The dev board kit is ~£152. I bought mine from Farnell yesterday and the UPS man just delivered it.
The instructions are clear and concise. I used an Ubuntu laptop to configure and flash the latest Raspbian (June 2014) to the module. It took about 20 minutes to write the image. I was getting a bit nervous that something had gone wrong (kid with a new toy) but it was fine.
I swapped the jumper around, plugged in my PiHub, keyboard dongle, wifi dongle and memory stick and it booted up perfectly first time. Happy days.
You’ll Need a Hub
There’s no ethernet on board, so if you want internet and keyboard/mouse, you’ll need a hub. Otherwise you get the chicken/egg situation of…
“how do I configure my wifi dongle with only one USB port?”
…since you can’t swap SD cards, having configured the card on another machine.
I suppose one way round this would be to dump a Raspbian image to disk with your wifi credentials already on it, then flash that to the compute module. But who’s got time for that when there’s a Pihub available?
I’m powering mine with the PiHub too, so using all the ports, but only one PSU. The dev kit comes with a PSU and two USB leads, along with camera and DSI display adaptors.
I’ve just made a quick ‘walkround video’. I’ll be back with more, when I’ve done something with it…
Isn’t the 1st partition a FAT partition, so you can edit your wifi settings from the computer you use to flash the module?
If you knew how to do it manually, yes, you could. I used to do it back in the days of MrEngman’s script for the Edimax dongle, but since the GUI wifi config came in, I’ve long-since forgotten how to do that. :)
Actually, once you’ve flashed the device (you have to use dd from Linux), you can access both partitions, so I guess you could change anything you wanted if you knew how to. :)
The ups man has just been to my house too :-) I don’t have a linux laptop so I’m going to flash it from a pi. I’m just downloading a fresh img to a 16gb sd card now.
Excellent. The instructions were written for Pi, so should be fine as long as you get your sda/sdb etc right :)
Well that was easy once I got an img onto a sd card. It only took 9 mins to flash from a raspi :-)
Hmm. Wonder why mine took so long then? Glad you got there without incident :)
Looks like it’s just begging to be mounted to the back of the HMDIPi case… ;-)
I wonder if RPi.GPIO supports all the extra GPIO pins yet?
*rummage*
Looks like the answer is yes, as long as you’re using the BCM numbering scheme :)
http://sourceforge.net/p/raspberry-gpio-python/code/ci/default/tree/source/common.c#l62
Re the HDMIPi thing, yes that thought had crossed my mind, but would need a custom board since the dev board is too big and too expensive for that use case.
Gordon said that wiringpi works on the BCM numbers. Will try RPi.GPIO tomorrow evening.
Or you could build an HDMIPi driver board with an SODIMM socket…? ;-) (just kidding!)
Well obviously that was something we’ve thought about, but let’s get the KS rewards out of the way before we start another project ;p
By the way, I just tested ports 28-45 using RPi.GPIO and they worked fine (as outputs). Must stop now.
RasPiAddict.TV ;)
Brilliant intro video, Alex. Great to see the bits & pieces of the dev kit explained in such a down to earth fashion. And we appreciate your justification for its purpose :)
All the best
Ben
[…] Alex Eames has done a great “Day 1″ video of his newly-arrived Compute Module. If you’d like to see one in the flesh, or just want to see what all the fuss is about, head on over to RasPi.tv and watch the video. […]
Hi Alex,
I’m curious whether this module corrupts its memory during power-failure (like the SD cards on the model A/B). If you have time please can you get it doing something and try pulling the power-cord … and see if it still boots? I suspect it will suffer the same.
Many thanks.
LOL. Wouldn’t it be easier to ask Gordon Hollingworth, rather than try to get me to screw up my new toy? ;)
I’m pretty sure, since this is for industrial apps, that it is more rugged than the model A/B Pis. I’ll ask the question.
Here’s the answer
I believe corruption generally happens at the filesystem layer, and the filesystem layer sits “on top” of the SD card or eMMC module block layer; so I see no reason why the ext4 filesystem on the eMMC would be any “less corruptible” than the same ext4 filesystem on an SD card if you happen to pull power during the middle of a big write. But I’m no expert in these matters, so Gordon may have more info :-)
If you want a filesystem that’s “less corruptible” you need to look at something like LogFS https://en.wikipedia.org/wiki/LogFS
Okay – thank you all for the info. I think the jury is still out on this (quite important) one.
…although of course I imagine in that many applications where the Compute Module gets used, it’ll simply be booting with a read-only filesystem, and never need to write data back to the eMMC. No danger of corruption then :-)
And see the updated reply from Gordon above.
Told you I wasn’t an expert… ;-)
Found some interesting info over at the forums http://www.raspberrypi.org/forums/viewtopic.php?p=536668#p536668
There is already project based on this module called ‘Modberry 500’
http://linuxgizmos.com/automation-controller-taps-raspberry-pi-compute-module/
Hey Alex, something we have long thought about but would have no idea where to start was to use the Pi from a specific video application that would actually require two (or more) sound processors – and hence multiple audio outputs (and probably at least one . Of course, we could use multiple USB sound cards, but ideally it would be nice to develop our own board – and I guess this is exactly where something like this might fit in. However, we have no clue how we would achieve this.
It would be interesting to see how you take the Compute Module on and potentially develop a specific embed application and board, along with the cost that such a development might be.
I think using multiple USB sound cards will probably be your best/easiest/cheapest option (as long as the bandwidth requirement from multiple cards doesn’t overload the Pi’s USB bus http://www.raspberrypi.org/documentation/hardware/raspberrypi/usb.md ).
AFAIK there are three ways of getting audio out of a Rev 2 ModelB Pi – analog audio out (uses 2 PWMs), digital audio out (over HDMI) and digital audio out (over I2S on the P5 header). I dunno if each of those audio outputs can be set to a different input source, but I do know that omxplayer for example can simultaneously output over both analog audio and HDMI audio.
Although the Compute Module exposes a lot more GPIO pins, it doesn’t give you any additional audio capabilities – you still have two PWM channels, a single I2S interface, a single HDMI interface and a single USB interface (the two external USB ports are provided by the internal USB hub on the LAN9512 chip), exactly the same as you have on the Model B.
http://elinux.org/RPi_BCM2835_GPIOs
Perhaps you’d just be better off using a cheap PC with multiple PCI sound cards? Depends what your exact requirements are, of course. (I’m a Pi expert, but not an audio expert)
[…] 2, column 3 is the Compute Module, sitting atop the Compute Module development board. This was launched 23 June 2014 as a way to […]
[…] 2, column 3 is the Compute Module, sitting atop the Compute Module development board. This was launched 23 June 2014 as a way to […]
Hey!I have been trying to make my rpi compute module work and yet i couldnt do it.Initially i tried doing it using windows host.I followed all the steps mentioned in the rpi website.
https://www.raspberrypi.org/documentation/hardware/computemodule/cm-emmc-flashing.md
Finally i used win32 diskimager to burn the image file and when it finished i disconnected the usbslave port and also removed the jumper that enabled J4.I then switched it off and then connected it to a DELL monitor via the HDMI port and turned on the compute module.Guess what?It gave me nothing.Not even “no signal”. All the drivers were pre installed on my system.My system is also able to detect the compute module as soon as i plug it into the USB port . I could not open it.When i checked the disk space it was completely filled .I repeated this process 3 to 4 times and i failed miserably.Help me out please.
I gave up hope on windows host and turned towards linux host.
On the linux host i followed the element 14 website
https://www.element14.com/community/community/raspberry-pi/raspberry-pi-compute-module/blog/2014/06/26/raspberry-pi-compute-module–getting-started
, i downloaded tools via github.Everything went fine till “sudo make”. But, when i do “sudo ./rpiboot” it gives me an error saying
sudo: unable to execute ./rpiboot:no such file or directory
Infact, i checked if the rpiboot.exe file existed or not in the directory using ‘ls’.It does exist.What am i doing wrong?I have been stuck here for the past few days.Someone please help me out.
It’s a very long time since I did anything with the CM, but I wonder if you are using the right image file? Raspbian has grown a lot over the last couple of years and I think there is limited space on the CM’s storage (is it 2 Gigs? I’ve forgotten). So you’ll need to use one of the smaller Raspbian images.
The CM has 4GB eMMC, so Raspbian Lite should fit.
Like Alex I’ve not done anything with my CM for ages, so I suspect your best source of help will be https://www.raspberrypi.org/forums/viewforum.php?f=98
Hello, What OS image did you use in this one? Thanks a lot.
I originally flashed mine with the OS current at the time. This was before LibreOffice and Wolfram were added to the image, so it was well under 4GB at the time. But if I update it, I’ll use Raspbian LITE, which has a lot less on it.
Hello there,
Please, please can someone help me and show me where I am going wrong. I’ve just bought an RPi CM3 Dev kit from RS and I can’t even get past the fist stages of generating the rpiboot file to allow me to flash the CM3. I’ve tried to follow various examples with both libusb-1.0-0 and lib-usb-1.0.21 but I just can’t seem to see the rpiboot file which is supposed to be generated. I’ve managed to clone the libusb tool and unpacked it etc. but the initial make command dosent work unless you first enter ./configure which then goes through a sequence. If I then invoke make I get some outputs from the cc compiler but no rpiboot file
=== The downloaded libusb tool =====
Lees-MacBook-Pro:libusb-1.0.21 leehewitt$ ls
AUTHORS android install-sh
COPYING compile libtool
ChangeLog config.guess libusb
INSTALL config.h libusb-1.0.pc
Makefile config.h.in libusb-1.0.pc.in
Makefile.am config.log ltmain.sh
Makefile.in config.status m4
NEWS config.sub missing
PORTING configure msvc
README configure.ac stamp-h1
TODO depcomp tests
Xcode doc
aclocal.m4 examples
Lees-MacBook-Pro:libusb-1.0.21 leehewitt$
===== After entering ./install ========
Lees-MacBook-Pro:libusb-1.0.21 leehewitt$ ./install
-bash: ./install: Permission denied
Lees-MacBook-Pro:libusb-1.0.21 leehewitt$ ./configure
checking for a BSD-compatible install… /usr/bin/install -c
checking whether build environment is sane… yes
checking for a thread-safe mkdir -p… ./install-sh -c -d
checking for gawk… no
checking for mawk… no
checking for nawk… no
checking for awk… awk
checking whether make sets $(MAKE)… yes
checking whether make supports nested variables… yes
checking whether make supports nested variables… (cached) yes
checking for gcc… gcc
checking whether the C compiler works… yes
checking for C compiler default output file name… a.out
checking for suffix of executables…
checking whether we are cross compiling… no
checking for suffix of object files… o
checking whether we are using the GNU C compiler… yes
checking whether gcc accepts -g… yes
checking for gcc option to accept ISO C89… none needed
checking whether gcc understands -c and -o together… yes
checking for style of include used by make… GNU
checking dependency style of gcc… gcc3
checking for g++… g++
checking whether we are using the GNU C++ compiler… yes
checking whether g++ accepts -g… yes
checking dependency style of g++… gcc3
checking build system type… x86_64-apple-darwin16.4.0
checking host system type… x86_64-apple-darwin16.4.0
checking how to print strings… printf
checking for a sed that does not truncate output… /usr/bin/sed
checking for grep that handles long lines and -e… /usr/bin/grep
checking for egrep… /usr/bin/grep -E
checking for fgrep… /usr/bin/grep -F
checking for ld used by gcc… /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld
checking if the linker (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld) is GNU ld… no
checking for BSD- or MS-compatible name lister (nm)… /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface… BSD nm
checking whether ln -s works… yes
checking the maximum length of command line arguments… 196608
checking whether the shell understands some XSI constructs… yes
checking whether the shell understands “+=”… yes
checking how to convert x86_64-apple-darwin16.4.0 file names to x86_64-apple-darwin16.4.0 format… func_convert_file_noop
checking how to convert x86_64-apple-darwin16.4.0 file names to toolchain format… func_convert_file_noop
checking for /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld option to reload object files… -r
checking for objdump… objdump
checking how to recognize dependent libraries… pass_all
checking for dlltool… no
checking how to associate runtime and link libraries… printf %s\n
checking for ar… ar
checking for archiver @FILE support… no
checking for strip… strip
checking for ranlib… ranlib
checking command to parse /usr/bin/nm -B output from gcc object… ok
checking for sysroot… no
checking for mt… no
checking if : is a manifest tool… no
checking for dsymutil… dsymutil
checking for nmedit… nmedit
checking for lipo… lipo
checking for otool… otool
checking for otool64… no
checking for -single_module linker flag… yes
checking for -exported_symbols_list linker flag… yes
checking for -force_load linker flag… yes
checking how to run the C preprocessor… gcc -E
checking for ANSI C header files… yes
checking for sys/types.h… yes
checking for sys/stat.h… yes
checking for stdlib.h… yes
checking for string.h… yes
checking for memory.h… yes
checking for strings.h… yes
checking for inttypes.h… yes
checking for stdint.h… yes
checking for unistd.h… yes
checking for dlfcn.h… yes
checking for objdir… .libs
checking if gcc supports -fno-rtti -fno-exceptions… yes
checking for gcc option to produce PIC… -fno-common -DPIC
checking if gcc PIC flag -fno-common -DPIC works… yes
checking if gcc static flag -static works… no
checking if gcc supports -c -o file.o… yes
checking if gcc supports -c -o file.o… (cached) yes
checking whether the gcc linker (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld) supports shared libraries… yes
checking dynamic linker characteristics… darwin16.4.0 dyld
checking how to hardcode library paths into programs… immediate
checking whether stripping libraries is possible… yes
checking if libtool supports shared libraries… yes
checking whether to build shared libraries… yes
checking whether to build static libraries… yes
checking how to run the C++ preprocessor… g++ -E
checking for ld used by g++… /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld
checking if the linker (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld) is GNU ld… no
checking whether the g++ linker (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld) supports shared libraries… yes
checking for g++ option to produce PIC… -fno-common -DPIC
checking if g++ PIC flag -fno-common -DPIC works… yes
checking if g++ static flag -static works… no
checking if g++ supports -c -o file.o… yes
checking if g++ supports -c -o file.o… (cached) yes
checking whether the g++ linker (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld) supports shared libraries… yes
checking dynamic linker characteristics… darwin16.4.0 dyld
checking how to hardcode library paths into programs… immediate
checking for windres… no
checking for inline… inline
checking operating system… Darwin/Mac OS X
checking poll.h usability… yes
checking poll.h presence… yes
checking for poll.h… yes
checking for nfds_t… yes
checking sys/timerfd.h usability… no
checking sys/timerfd.h presence… no
checking for sys/timerfd.h… no
checking whether TFD_NONBLOCK is declared… no
checking whether to use timerfd for timing… no (header not available)
checking for struct timespec… yes
checking syslog.h usability… yes
checking syslog.h presence… yes
checking for syslog.h… yes
checking for syslog… yes
checking for sigaction… yes
checking sys/time.h usability… yes
checking sys/time.h presence… yes
checking for sys/time.h… yes
checking for gettimeofday… yes
checking signal.h usability… yes
checking signal.h presence… yes
checking for signal.h… yes
checking whether CC supports -std=gnu99… yes
checking that generated files are newer than configure… done
configure: creating ./config.status
config.status: creating libusb-1.0.pc
config.status: creating Makefile
config.status: creating libusb/Makefile
config.status: creating examples/Makefile
config.status: creating tests/Makefile
config.status: creating doc/Makefile
config.status: creating doc/doxygen.cfg
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands
config.status: executing libtool commands
Lees-MacBook-Pro:libusb-1.0.21 leehewitt$
======= After entering make follows by ls ======
Lees-MacBook-Pro:libusb-1.0.21 leehewitt$ make
/Applications/Xcode.app/Contents/Developer/usr/bin/make all-recursive
Making all in libusb
make[2]: Nothing to be done for `all’.
Making all in doc
make[2]: Nothing to be done for `all’.
Lees-MacBook-Pro:libusb-1.0.21 leehewitt$ ls
AUTHORS android install-sh
COPYING compile libtool
ChangeLog config.guess libusb
INSTALL config.h libusb-1.0.pc
Makefile config.h.in libusb-1.0.pc.in
Makefile.am config.log ltmain.sh
Makefile.in config.status m4
NEWS config.sub missing
PORTING configure msvc
README configure.ac stamp-h1
TODO depcomp tests
Xcode doc
aclocal.m4 examples
Lees-MacBook-Pro:libusb-1.0.21 leehewitt$
Please can someone help me here as I’m tearing my hair out over whats probably something simple that I can’t see.
Many thanks in advance,
Lee.