Exploring the wonderful world of technology and software development   RSS 2.0
 Wednesday, May 28, 2008

In my previous post, I discussed how to assemble an ARTiGO device. Now that the device is assembled and working, I need to get some software onto it.

The ARTiGO is essentially a small form factor PC. Therefore, as any PC owner knows, the machine has a BIOS that provides, amongst other features, the ability to select where to look for the software that is to run on the machine.

When my ARTiGO booted up, I was presented with the BIOS' boot screen:

image

The device would then attempt to boot from the attached HDD. The problem is that the HDD is currently empty, and I'd like to use some kind of bootloader that will signal Visual Studio and ask it to download a Windows Embedded CE image to run.

There was no on-screen indicator of what to press during boot-up to enter BIOS setup mode, so I started by hitting [ESC] and [F12]. It turns out that [ESC] takes you to the boot menu where you can select which device type to boot from:

  • Hard Drive (either attached PATA/SATA drive or USB drive)
  • USB-Zip
  • USB-CD/DVD
  • USB-
  • Legacy Network
  • Network Agent (PXE)

While this is fine for the occasional boot, I wanted to setup my default boot device options and so needed to configure the BIOS itself. However, because there were no on-screen hints, I had to read the user's manual (online or from the accompanying CD) to see that in order to get into the (Award) BIOS setup, I had to hit [DEL] during bootup.

This gave me the usual BIOS configuration experience, including the ability to turn off the above boot screen and show me the BIOS boot info, and select from which devices, and in which order the machine would try to boot.

I knew I'd be needing to play around with the bootloader for a little while, so configured a bootable USB key (more on this in my next post) as my primary boot device, followed by PXE and then my HDD.

Booting from PXE will also let me try out scenarios where the device might be able to bootstrap from the network, saving me from having to continually shuttle boot files from my dev machine to my ARTiGO via a USB key.

I'll be covering the process of how to get an ARTiGO to boot from a USB stick in my next post.
Posted: Wednesday, May 28, 2008 10:08:51 PM (GMT Standard Time, UTC+00:00)  #    Comments [0] -
Embedded Development | Sentinel

 Monday, May 26, 2008

In my previous post, I outlined the decision making process that led to my selecting the Via Artigo Pico-ITX kit with which to build a prototype of an embedded device.

There are already videos available of unboxing and assembling an Artigo (in case you don't like to RTFM), so won't go into this in detail here. However, there is a useful tip below, so please be sure to read on :)

The Artigo kit contains everything you need to construct the foundation device for many prototyping projects.

The kit contains a motherboard, case, power supply board and all the necessary cables. Additional serial IO, DVI, PS/2 and ATX power cables come in the box.

The (demure) case exposes a power switch, power LED, HDD LED, 4 x USB 2.0 sockets, microphone in, audio out and holes for the VGA and network sockets mounted on the motherboard.

Artigo Case

Core to the unit is the EPIA-PX motherboard. This tiny (approx 72mm x 94mm) board houses VIA's C7 CPU and the VIA VX700 Unified Chipset that provides all IO, video and audio capabilities. Pin connectors for the case's front panel connectors are arranged towards the front of the board. An IDC and SATA connector for a HDD are mounted to the side. VGA and network sockets are mounted at the rear of the card. The motherboard chips are shrouded by a heatsink and fan to expel unwanted heat.

Note that this is a low-power consuming CPU from a PC perspective, but not from an embedded perspective! VIA have recently announced an updated VX800 chipset and Pico-ITX board that supports the new 1.5GHz C8 x86 CPU or a fanless 1GHz Eden low-power x86 CPU. No word yet on when the Artigo kit will be updated to include this new board.

EPIA-PX Board (Top)

Underneath the board, you'll notice a socket for RAM. Unlike the eBox 4300, this board doesn't support flash RAM, nor does it ship with DRAM - you have to add your own DRAM and HDD. Whilst this may seem like an encumberance, it's actually nice to be able to add considerably more RAM to this board than the 512MB DRAM that is welded onto the eBox.

 EPIA-PX Board (Underside)

IMPORTANT NOTE: When assembling your Artigo, be sure to properly mount the DRAM module. If you do not, your device will not boot and you will not see the BIOS boot-page appear when you power on your device. This one problem frustrated me for several hours until I saw mention of this very issue in the VIA Arena Forums. After disassembling my device and examining my Artigo's memory board I saw that I had not pushed the memory board all the way into the socket:

Incorrectly seated memory board

I unclipped my memory board and re-seated it, pushing it home at 45° before clipping it down (notice that the memory board's edge connector is now barely visible and that the locking clips are now properly seated):

Properly seated memory board

Once that was done, I reassembled my Artigo, connected the VGA and the power sockets, turned on my device and saw the BIOS boot screen:

Artigo Boot Screen

Woot! :) Just don't ask about the Bunny! Let's just say that my girls like to decorate stuff! :D

Next step ... getting some software onto this thing :)

Posted: Monday, May 26, 2008 9:19:14 PM (GMT Standard Time, UTC+00:00)  #    Comments [0] -
Embedded Development | Sentinel

As I mentioned in my previous post, I am building a prototype of a cool new idea for a product. This product will be an embedded system that controls several devices.

I know that the resulting device is going to need to be small, consume relatively little power, cost-effective and yet must process large amounts of continually varying data. It's also going to need to support a variety of devices, most of which can be connected via USB. It'll also need to support WiFi and possibly cellular Internet connectivity.

The requirements above pretty much exclude the really low-end 8-bit and even 16-bit embedded microcontrollers due to the data processing requirements that the device will require. So, I'm going to be using a 32-bit CPU of some kind.

Now, whilst the resulting product may well end up using a power efficient ARM (or similar) core, along with various ancillary support (USB, WiFi, etc), the prototype device doesn't need to be quite so stringent. In fact, it'd be quite useful to have a little more processing power, sockets, etc., available during prototype so that I can try new things out before finalizing any productization plans.

So, do I use an emulator or a real device? The problem with the emulator route is that I would only be able to test the prototype out from my desk at home. This won't work for me, so I decided to explore how I might go about building a real prototype.

imageWhen I began investigating prototype hardware, I quickly learned that that there are now a rapidly growing number of hobbyist computing devices that will fit my needs nicely. Products like Via's Artigo Pico-ITX kit provide support for pretty much everything I will need to get this sucker running:

  • Low power x86 CPU
  • Up to 1GB RAM
  • HDD Interfaces (PATA & SATA) for persistent storage
  • SVGA (the final product won't need video out, but it'll be useful while prototyping)
  • 4 x USB sockets
  • 1 x 10/100mbps network socket
  • Only costs around $350 (inc tax) from Fry's!

Okay, so if I know what kind of tin I'm working with, what about the software?

When it comes to prototyping this device, I need to focus on getting the thing built as quickly and as easily as possible. Therefore, I won't be building my own Real Time Operating System from scratch - there's just too much that would need to be done: Memory manager, CPU scheduler, USB IO, Storage IO, TCP/IP v4 & v6 stacks, WiFi and wired networking, etc.

So which RTOS do I use? Symbian? QNX? VxWorks? Linux? Windows Embedded CE?

I am a Microsoft developer. I have been for years. Back when DOS was around I was generally dividing my time between hand-coded assembly and C on UNIX, but ever since working in commercial software development, I've been a Windows developer: first in C/C++, then In Delphi, now in C#.

When looking into the available RTOS options, Windows Embedded CE just made perfect sense to me: It's features are very impressive - particularly for Windows CE 6.0. I'm already very familiar with most of it's API, it's tools support is pretty stellar and is very cost effective. It also supports .NET Compact framework and .NET Micro Framework which may also help shorten time to completion. Via also ship a free Board Support Package (BSP) for the Artigo for Windows CE 6.0.

So there, in a nutshell was my decision making process for how to build the prototype: I am going to use Via's Artigo Pico-ITX kit running Windows Embedded CE, Visual Studio 2005 (for the OS & drivers etc.) & Visual Studio 2008 (for the apps).IMG_1315

Next: Building the Artigo! Stay tuned.

Posted: Monday, May 26, 2008 7:41:56 PM (GMT Standard Time, UTC+00:00)  #    Comments [0] -
Embedded Development | Sentinel

I've had a few bright ideas for cool products in the past. Some of these ideas turned to dust when I found that several other people had the same idea some time before me and have fully implemented the resulting product. Others turned out to be infeasible for a variety of reasons. A few have been shelved only to find that someone else later implemented said product ... much to my annoyance.

A few weeks ago, I had a bright idea for a new product. I've searched online and can't find anything quite like what I am considering building. So I've decided to build a prototype of this product to see what it'd take to make it all work.

The specific details of what this product will be are not important right now - I'll (hopefully) be able to share the details on this product sometime later. For now, we'll code-name this product Sentinel!

The thing that I want to build requires an embedded system to control several devices.

Now, I've been a computer and gadget geek for years. When I was 12, I got a Dragon 32 for Xmas ... and the love affair with computers began. A year later I was lucky enough to upgrade to a BBC Micro ... that's when the fun really started. The Beeb was an amazing machine - it had built-in A/D converters (one of the only home computers to do so at the time) and a variety of serial and parallel interfaces. It was a home hobbyist's dream. My Beeb rarely had its cover on and was regularly seen to be spewing wires and probes as I interfaced it to all manner of things.

When I went to university, I took Computer Science and Microelectronics. I was fascinated by how computer hardware and software interacted and how these amazing machines *really* worked. After college, I worked at a company that was split 50-50 between hardware and software engineers. The hardware crew designed incredibly powerful Transputer-based signal/image processing cards and hardware; the software teams designed sophisticated apps and systems (usually in Occam and/or C) to make the hardware sing. It was very cool stuff back then.

It's been a few years since I build anything electronic ... and times have changed. So have available hardware. Whilst many existing and new products are built around 8-bit and 16-bit microcontrollers and microprocessors, the cost, size and power consumption of modern 32-bit CPU's has dropped to the point where it's often more cost-effective to build products based around these more powerful chips which in turn let products do more than ever before.

So, in order to build a prototype of this system, I'm going to have to do some work and un-learn and re-learn many things to get it all working! I'm going to need to decide *how* to build it. Do I build it in an emulator? Do I build a real device? Do I write my own OS or use a pre-existing OS? How do I build, debug, test and deploy said system? What are the challenges of building an embedded system using today's technologies vs. those of yesteryear?

I'll be regularly blogging my progress in building this prototype here, covering many of my strategy, design and implementation choices, problems, successes and failures.

Stay tuned :)

Posted: Monday, May 26, 2008 6:51:01 PM (GMT Standard Time, UTC+00:00)  #    Comments [0] -
Embedded Development | Sentinel

All content (unless otherwise specified) is © Copyright 2008 Richard Turner.