Jun 242014
 

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…

Raspberry Pi compute module

Raspberry Pi compute module

…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…

  30 Responses to “Raspberry Pi Compute Module”

  1. 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. :)

  2. 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.

  3. 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

  4. […] 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. […]

  5. 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

  6. There is already project based on this module called ‘Modberry 500’
    http://linuxgizmos.com/automation-controller-taps-raspberry-pi-compute-module/

  7. 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)

  8. […] 2, column 3 is the Compute Module, sitting atop the Compute Module development board. This was launched 23 June 2014 as a way to […]

  9. […] 2, column 3 is the Compute Module, sitting atop the Compute Module development board. This was launched 23 June 2014 as a way to […]

  10. 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.

  11. 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.

  12. 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.

Leave a Reply