Sifteo Gen2: from Concept to Product

December 17th, 2012

Some readers may have already seen this, but adafruit has a great article written by Sifteo engineer Elizabeth Micah Scott about the challenges and trade-offs they encountered bringing their Gen2 product to market (full disclosure: I am an advisor for Sifteo).


I really appreciate the candidness of the writing, and the openness with which they discuss internal design aspects that many startups would normally regard as highly secret sauce. Then again, they do some amazingly clever things with very light, cheap 8-bit hardware, and they have every right to be proud of their technical accomplishments.


Sifteo has an SDK for those interested in developing for the platform.

I highly recommend the read, check out the article titled “How we built a Super Nintendo out of a Wireless Keyboard @Sifteo” here.

Building my Own Laptop

December 16th, 2012

We are building an open laptop, with some wacky features in it for hackers like me.

This is a lengthy project. Fortunately, ARM CPUs are getting fast enough, and Moore’s Law is slowing down, so that even if it took a year or so to complete, I won’t be left with a woefully useless design. Today’s state of the art ARM CPUs — quad-core with GHz+ performance levels — is good enough for most day-to-day code development, email checking, browsing etc.

We started the design in June, and last week I got my first prototype motherboards, hot off the SMT line. It’s booting linux, and I’m currently grinding through the validation of all the sub-components. I thought I’d share the design progress with my readers.

Of course, a feature of a build-it-yourself laptop is that all the design documentation is open, so others of sufficient skill and resources can also build it. The hardware and its sub-components are picked so as to make this the most practically open hardware laptop I could create using state of the art technology. You can download, without NDA, the datasheets for all the components, and key peripheral options are available so it’s possible to build a complete firmware from source with no opaque blobs.

Above is an annotated diagram of the circuit board. The dimensions of the board are approximately 121mm x 150mm — sized to fit comfortably underneath a standard-sized laptop keyboard. The image above is rotated versus the installation orientation; the port farm is meant to be on the right hand side of the laptop, not on the bottom. The overall height of the board is just under 14mm, with the height being set by the thickness of an Ethernet connector. The thickness on my Lenovo T520 base portion is just under 24mm, so once we stack a keyboard and plastics on this it’ll be just about the same.

Here are some of the features of the laptop motherboard:

  • Freescale iMX6 CPU — same footprint can support dual-lite and quad versions:
  • Internal memory:
    • Boot from microSD firmware
    • 64-bit, DDR3-1066 SO-DIMM, upgradable to 4GB
    • SATA-II (3Gbps)
  • Internal ports & sensors:
    • mini PCI-express slot (for blob-free wifi, bluetooth, mobile data, etc.)
    • UIM slot for mPCIe mobile data cards
    • Dual-channel LVDS LCD connector (up to QXGA (2048×1536) @ 60Hz resolution) with USB2.0 side-channel for a display-side camera
    • Resistive touchscreen controller (note: captouch displays typically come with a controller)
    • 1.1W, 8-ohm internal speaker connectors
    • 2x USB2.0 internal connectors for keyboard and mouse/trackpad
    • Digital microphone
    • 3-axis accelerometer
    • header for optional AW-NU137 wifi module (*)
  • External ports:
    • HDMI
    • SD card reader
    • headphone + mic port (compatible with most mobile phone headsets, supports sensing in-line cable buttons)
    • 2x USB 2.0 ports, supporting high-current (1.5A) device charging
    • 1Gbit ethernet
  • “Fun” features:
    • 100 Mbit ethernet — dual Ethernet capability allows laptop to be used as an in-line packet filter or router
    • USB OTG — enables laptop to spoof/fuzz ethernet, serial, etc. over USB via gadget interface to other USB hosts
    • Utility serial EEPROM — for storing crash logs and other bits of handy data
    • Spartan-6 CSG324-packaged FPGA — has several interfaces to the CPU, including a 2Gbit/s (peak) RAM-like bus — for your bitcoin mining needs. Or whatever else you might want to toss in an FPGA.
    • 8x FPGA-driven 12-bit, 200ksps analog inputs
    • 8x FPGA-driven digital I/O
    • 8x FPGA-driven PWM headers, compatible with hobby ESC and PWM pinouts — enables direct interfacing with various RC motor/servo configurations & quad-copter controllers
    • Raspberry-Pi compatible expansion header
    • 13x CPU-driven supplemental digital I/Os
    • 3x internal UART ports

    Items marked with an asterisk (*) require a closed-source firmware blob, but the system is functional and bootable without the blob.

    In order to give maximum power management flexibility, the battery interface functions are implemented on a daughtercard. I co-opt a cheap and common SATA-style connector to route power and control signals between the mainboard and the daughtercard. To prevent users from accidentally plugging a hard drive into the battery port, I inverted the gender of the battery-SATA connector from the actual mass storage SATA-II connector. The current battery card is meant to work with the battery packs used by most RC enthusiasts — LiPo packs ranging from 2S1P to 4S1P (2-cell to 4-cell). RC packs are great because they are designed for super-fast charging. They are also cheap and easy to buy. For the board-side battery plug I decided to use the Molex connector found on classic disk drives, since they are cheap, common, and easy to assemble with simple tools. I couldn’t use a standard RC connector because the vast majority of them are designed for in-line use, and the few that have board mounts are too thick or too weird for use in this application.

    The battery board can charge batteries at rates in excess of 4A. This means charging a 3-cell, 45Wh (4Ah) pack in about one hour. I’m estimating that a typical power consumption for a reasonable system configuration might be around 5-6W, so that’s 7-8 hours of runtime with a 1-hour charge time using that type of battery pack. Of course, since the whole laptop is user-configurable, typical power consumption is really hard to estimate — you could drop in a monster LCD and a power-hungry magnetic hard drive with loads of peripherals and the power consumption could be much higher. Of course, you can drop in a 100Wh battery pack if you wanted as well :)

    Another cute feature of the battery board is that it can drive an analog panel meter. Xobs had suggested that it would be neat to embed a retro analog needle meter into the palmrest of the laptop to give a real-time display of power consumption. I thought it was a great idea, so I designed that in. Of course, the analog meter is driven by a DAC on the battery microcontroller, so it can be configured to perform a multitude of useful (or not so useful) analog read-outs, such as remaining runtime, battery voltage, temperature, the time (represented as an analog value), etc.

    Next up is to spend a couple months validating all the features on the board — a long list of features to grind through indeed — and port drivers and a linux distro (no small task, but I’ll have Xobs‘ skillful help). I also am looking forward to designing the enclosure. Probably for the first rev, I will do something out of laser-cut acrylic that is vaguely tablet-like, to avoid having to mess around with a friction clutch on version 1 of the plastics.

    A detached keyboard/trackpoint is attractive to me because I’ve always wanted a display I can “hang” on the seat in front of mine when sitting in an airplane or a bus — it’s a lot easier on the neck and the arrangement actually works better if the person in front reclines their seat.

    Once I’ve got some experience integrating the whole thing, I’ll probably design a rev-2 case using CNC-cut ABS and aluminum. CNC cut ABS is almost as robust as injection molded ABS, and can produce reasonably intricate shapes. It’s also relatively economical to produce in single quantities. The CNC-cut design could be a clamshell design, or maybe some other funky design. Maybe I’ll try using wood and brass — who knows, the whole idea of making my own laptop is to play around with some new ideas!

    It occurs to me that maybe other people might also be interested in owning a laptop like this, but don’t want to go through the trouble of fabricating their own circuit boards. If it seems like a few hundred folks are interested, I might be convinced to try a Kickstarter campaign in several months, once the design is stable and tested. However, I’m not looking to break any low-price records for this laptop — if you just want a cheap linux laptop you’re better off buying a netbook or EeePC. This is a low-volume, hand-crafted laptop made with uniquely open-source components, so the pricing would be consistent with such crafted goods.

    For those interested in the source files for the current early prototype iteration of the design, bounce over to the Novena wiki, and keep an eye on Xobs’ blog. Novena (yet another Singaporean metro station, and also Latin for “nine”) is our stand-in codename for the laptop motherboard.

    Name that Ware December 2012

    December 14th, 2012

    The Ware for December 2012 is shown below.

    If you’re seeing this, these are the backup images in case the caching server falls over. Most browsers won’t render these, but it looks like your browser isn’t supporting the hidden div tag correctly!

    This beautiful ware was scanned and uploaded to me by an anonymous reader, who wishes to release the photos into the public domain. The boards are all from the same device. I love these boards, there is a lot of craft & TLC in them. Thank you for sharing them with us!

    Winner, Name that Ware November 2012

    December 14th, 2012

    The Ware for November 2012 is an original IBM PCjr. A blast from the past! I had one of these kicking around at home when I was a kid. iirc, it was a discard from a local institution that was picked up out of the rubbish heap. It was, in all honesty, a bit of rubbish by the time I got my hands on it; we were just passing the PC-AT generation by that point and the PCjr had a really limited set of software. But I thought the hardware on the inside was pretty clean, so I kept the motherboard and the power supply around. The power supply itself I ended up using for a few years as a benchtop supply for other projects, but it is now long gone.

    Congrats to Jonathan for guessing it correctly! email me to claim your prize.

    Kovan: An Autonomous Robot Controller Board

    November 28th, 2012

    I’ve recently been focusing on making open hardware “reference designs”. Kovan is the codename for a circuit board I designed, intended for autonomous robot control applications (fun fact: all my codenames are metro stops in Singapore). I think Kovan could benefit many niche applications, particularly those that are less cost-sensitive and require a more integrated solution than a cable-spaghetti of daughtercards plus a Raspberry Pi or Beaglebone plus USB dongles.

    Kovan is highly integrated, and incorporates features such as an FPGA. The use of an FPGA to interface with the control inputs and outputs offers a unique opportunity for developers to create very precise, low-jitter control loops in VHDL or Verilog, leaving the CPU free to do other tasks. For example, the reference FPGA design uses a system clock of 208 MHz for the servo pulse width controllers, allowing for a 5-nanosecond pulse resolution programmed using 24-bit control registers.

    You can grab the source for the hardware through these links: gerbers, schematics in PDF format, 3D STEP model of the circuit board, the native Altium designer source files, and the FPGA source code in verilog. Updates and new developments on the board will be posted and archived at the Kovan wiki.

    The next natural question is, of course, ‘how much and where can I buy one?’ This is where things get a little bit unusual. When I release a “reference design”, it means that a third party would market the product. An example of this is the Kickstarted Safecast X geiger counter based upon the geiger counter reference design that I released in January. I’m not producing the geiger counter — International Medcom has instead picked up the design and they are producing and marketing it.

    In this case, Kovan is being used by KIPR for the botball educational robotics program. Botball also had a Kickstarter campaign to pre-fund the initial build. Below is the video they produced to promote their product.

    While the fully integrated controller won’t be available for sale until early next year through Botball’s store, Adafruit is kind enough to distribute a limited quantity of the motherboards on my behalf in their store. I plan on making a couple dozen boards available to interested developers who can’t wait until the full kit is available through botball. The board alone plus power supply is available for $249, whereas the full botball kit shown in the video above, including LCD, battery, case, software, etc., will go for around $400.

    The reference development environment for Kovan is based upon the OpenEmbedded Angström distribution, similar to the system used by the Beaglebone. The firmware version we’re shipping inside the Adafruit boards comes with gcc and Python pre-loaded, so you can get started right away with development — no need to set up cross-compilers. You can download and build your own firmware from source if you want by following this guide. Note that this firmware is different from the one that will be provided with the Botball version, in that this firmware is entirely open source and is targeted toward developers with prior programming experience.

    Keeping with a tradition started on this blog long ago, the first user to correctly guess or otherwise determine the number of vias on this circuit board will win a free Kovan board as a prize!

    More about the Hardware

    Features
    Kovan integrates onto a single PCB all the features you need to build a self-guided robot:

      Actuator capability

    • 4x 1.2A H-bridge motor drivers
    • 4x servo drivers
      Sensing capability

    • 8x 10-bit analog inputs (5v/3.3v gang-selectable input range with individually programmable pull-ups)
    • 8x digital I/O (5v/3.3v gang-selectable levels with individually programmable pull-ups)
    • Rapid-prototyping headers (each I/O pin has adjacent +/- power rails so as to simplify sensor biasing)
    • 3-axis accelerometer
      Connectivity

    • 802.11b/g wifi
    • 2x USB 2.0 ports (suitable for video input via webcam)
    • 2x 3.3V UART (one console, one expansion)
    • IR rx & demodulator
    • IR tx (modulation to be done in FPGA)
      UI

    • LCD + touchscreen connector (natively supports 3.5″ screen)
    • Mono audio output
    • Pushbutton and status LED indicators
    • Optional digital video output driven by the FPGA (NeTV users might recognize the motif)
      Processing

    • Linux 2.6.34 running on 800 MHz Marvell ARM w/128 MB DDR2 + 2 GB microSD for firmware storage
    • FPGA co-processor enabling hard real-time control extensions & advanced image processing extensions
      Battery

    • Integrated 2-cell Li-Ion battery charger (C=1.5A)
    • Board runs for about 4 hours on a typical 1800mAh 2S1P Lipo RC pack (no motor load condition)
    • Battery plug uses Molex rectangular housing 0039013022 (Digikey WM1021-ND) with crimp terminals Molex 0039000207 (Digikey WM3116CT-ND)
    • Note: battery or battery emulator required for proper operation – board will not boot otherwise. For battery-less operation, it’s recommended to power the board using a 7.5V power supply (such as Digikey 62-1169-ND) plugged into the battery socket using the above Molex connectors. Do not simultaneously use a battery emulating power supply and a primary power supply, as this would cause the battery charger to attempt to charge the emulating power supply!