A while back I discovered the C.H.I.P. single-board computer from the Next Thing, Co.. After checking out their web site and doing a bit of research I pre-ordered four of the $9 units. When they arrived about 2 months ago I eagerly picked a box at random and pulled out the small PCB inside.
Here it is on my worktable, just the box and the board. Not shown is the garishly pink composite video and audio cable that came with it (I keep it hidden unless I absolutely need it). It doesn’t look like much, but it has a lot of functionality on that little PCB.
The board uses an Allwinner R8 SoC (system on a chip) ARM-based MCU running at 1GHz, along with some additional bits for Bluetooth and WiFi, 4GB of flash, and 512MB of RAM memory. You can read more about it here.
The C.H.I.P. uses a variation of Linux tailored for the ARM core in the R8 microcontroller. The makers of the C.H.I.P. have put a ton of stuff up on GitHub that you can browse through and download. There is also an SDK and instructions on how to flash the CHIP directly from Linux, or by using a virtual machine. Since I already use VMs for running things like Windows and FreeBSD on my main Linux workstation, I think I might look into this next.
About the cost: Back in June of 2015 there was some controversy over the cost of the CHIP PCB. Olimex, a maker of SBCs and other things, took issue with Next Thing and claimed that it wasn’t possible to produce a $9 product. Well, whatever, Next Thing is apparently still selling the C.H.I.P. for $9. You can read more about this little dust-up here, if you are interested.
Eager to see it work, I plugged it into one of the USB ports on the front of a Dell PC and promptly saw the current limiter on the port drop out as the little board tried to boot up. Well, that was a short trip. It took a few minutes to figure out what was happening. After scrounging up a suitable wall-plug power supply with a USB connector (my cell phone charger, actually), and then connecting the PCB to an old color video monitor I keep around for checking out video gear, I attempted to fire it up again.
Well, it booted OK, but the result on the video screen was, well, let’s just say I was not overwhelmed. This is what it looks like on a standard NTSC monitor:
Ugh. Usable, I suppose, although its not something I’d want to stare at for any length of time. But, all was not lost. The folks who make the C.H.I.P. also had both a VGA and an HDMI add-on available for purchase. So I ordered one of each. I’ve only used the VGA adapter so far (the add-on board is what the Next Thing folks call a DIP–chip and dip, OK, I get it [insert eye roll here]). I’ll try the HDMI interface later with a 10″ display module I have lying around, but first I figured I would give it a go with the VGA board, since I happen to have several spare VGA monitors handy.
The first problem I encountered was the OS. The board needed a newer version of the OS to drive the VGA module. So much for simple and easy. Getting the 4.4 version of the OS onto the C.H.I.P. involved installing the Chromium browser on my Linux machine, then installing the C.H.I.P. flash plug-in, and then discovering that even with a powered hub the DC power through the micro USB connector would drop out just as the flash process was starting. With the micro USB connected to the PC it wasn’t available to supply power. So, then I had to scrounge up a 5V power supply and connect it to pins 1 and 2 on the U13 header connector. Argh! Fortunately I have a large box of assorted wall plug power supplies (also known as wall warts) and a parts bin with some really useful female DC barrel connectors with screw terminals that I bought from Parts Express. Plug in the wall wart to the connector, attach a couple of the pin-to-pin single-wire jumpers I use with other SBCs to its terminals, and I finally had a stable power source. And I didn’t have to cut, strip, or solder anything.
While waiting for the flash process to complete I examined the VGA module a bit more carefully. One thing I noticed immediately is that the VGA add-on doesn’t seem to have much more on it than some resistors (video signal summing networks) and a few transistors. In other words, a very basic type of digital-to-analog converter for each color. I also discovered that some of the parts aren’t installed, like color adjustment trim pots. In other words, it doesn’t completely match the PDF schematic I found on GitHub. Well, as long as it works, that’s what really counts.
The flash process proceeded smoothly once the board’s power was stable, and it took about 30 minutes or so. With the VGA module attached I can no longer access the DC power pins on U13, but I didn’t need the micro USB any more. Since I’m done with the flash load I can use the 5V charger I normally use with my cell phone.
With the new version of the OS installed, I powered down, plugged in the VGA module, plugged the phone charger into the micro USB, and powered it all back up again. I was greeted with the usual scroll of gibberish that Linux emits when it’s booting up. The built-in GPU caused some concern when it came on-line, as the video signal dropped out for a moment and the monitor decided it needed to go to sleep.
But, finally, there it was. Here is what the VGA display looks like:
Much, much better, although the picture made with my cell phone is a bit blown out (next time I’ll get out the fancy DSLR and do a better job of it). Now I can actually try to do something interesting or useful (or both) with the C.H.I.P.. Right after I change that color scheme (pink and teal, really?).
My next step will be to mount the C.H.I.P. on a base of some sort with a power supply (probably another wood prototype base, like those described in this blog post I did for O’Reilly). Sadly, as I mentioned earlier both the VGA and HDMI modules take up all the pins on the two header sockets. That means if I want to use the micro USB connector for something other than a power supply I’ll need to either get a suitable DC supply to attach to the battery connector, or come up with some other clever way to get at the DC power positions on the PCB.
This also presents a problem for connecting anything to the CHIP other than the VGA or HDMI modules. Unlike other SBCs (the Arduino family, for example, or the Raspberry Pi) the C.H.I.P. doesn’t have the ability to stack modules on the main PCB. So I can either forgo the display modules and get access to the GPIO and other functions, or I can use a USB I/O device like a Velleman I/O board or a LabJack. Actually, given that the CHIP doesn’t have anywhere near the readily available I/O that even an Arduino Uno has, the USB I/O might not be such a bad option. I could even use an Arduino as an I/O module. And there are always the WiFi and Bluetooth available, as well.
My only other slightly negative observation so far is the documentation. As you may know, I’m something of a documentation fanatic. I like things with tables and clear diagrams. The C.H.I.P. documentation seems to only exist in HTML format or as text files on GitHub, and I can’t say that it’s always easy to find specific topics amongst the rather rambling set of web pages. I think it could use some work. In any case, I found most of what I was looking for on the web site, and what wasn’t there I was able to find by poking through the GitHub repositories.
Well, that’s it for now. As I learn more about the C.H.I.P. and what it can do, I’ll post it here. But for now I need to retrieve my phone charger from the C.H.I.P. and take care of other things. I’ll clean up the tangle of cables and wires on my desk tomorrow.