We are in the process of supporting a customer who is designing a product that uses the Compulab cm-x270 “Computer-on-module”. The cm-x270 is a small computer module 66x44x7mm that contains an Intel PXA270 ARM processor similar to those found in many PDAs or smart phones. This review provides an overview of the cm-x270, why it was selected, and how we are using it.
For this project, we needed a low cost embedded computer that could drive a VGA (640×480) color display. The graphical user interface for the device was fairly advanced, so we were also looking at a system that could run a modern OS with an advanced graphical toolkit. After discussing the display requirements with the customer, we concluded that we needed a 32-bit processor with a LCD display controller. As there was some custom circuitry needed, a configuration where the customer could design a custom baseboard and use an off-the-shelf computer module seemed optimal. The schedule was also very aggressive and we did not have the time or budget to develop a full custom processor board.
After researching a number of computer modules, we chose the cm-x270 from Compulab. The cm-x270 is a module that includes the following components:
- Intel PXA270 ARM processor (up to 520Mhz)
- 802.11b Interface
- up to 128MB SDRAM
- 128-512MB NAND flash
- up to 4MB NOR flash
- Serial Ports
- Touch panel controller (UCB1400)
- Host and Slave USB
- and other features …
For more details visit the compulab web site (http://http://www.compulab.co.il ). The cm-x270 provides a very impressive number of features in a very small space.
Below is a picture of the cm-x270 mounted on the Compulab SBC-X270 baseboard with a VGA display. The system is running the GPE Palmtop Environment built with OpenEmbedded.
Perhaps the most impressive feature of the cm-x270 is the cost. When ordering in volume, Compulab will build the module with only the components you need. For prototyping, you can order a standard offering with all components populated. Starting a price of $50, it is the lowest cost module we found. The configuration we will be using costs around $98 in 2K quantities (64MB DRAM, 4MB NOR Flash, 512MHz + 128MB NAND Flash + Audio/Touchscreen + RTC). Eventually, we may be able to reduce some of the features and get the price down around $70 per module.
At this price, the cm-x270 provides a very cost effective way to develop a low volume product (a few thousand per year) with advanced features provided by the PXA270 processor.
The bootloader and hardware design of the cm-x270 is proprietary. Compulab does not supply schematics for the design or source code to the bootloader. The documentation provided is adequate and provided all the information we needed to complete the design. Compulab also provides schematics for their development baseboard, which is helpful.
The cm-x270 bootloader provides typical features found in an embedded processor bootloader, including: a serial console, NAND and NOR flash programming, download images from a tftp server, downloading images over a USB connection to a PC, and a number of other configuration commands. The tftp download works very well and is fast. The USB download is much slower, but is convenient for systems that do not have a network connection. The USB download requires a windows PC with a specific version of Microsoft ActiveSync installed, which is unfortunate. A more general solution that uses something like libusb (http://libusb.sourceforge.net/) instead of ActiveSync would be preferred as it could then run on both Windows and Linux computers.
Compulab provides a fairly complete port of the 2.6.16 Linux kernel for the cm-x270 in the form of a kernel patch. Most of the peripherals we tested seem to work with the following exceptions:
- The SD card driver is not preempt safe. In this application, we need kernel preemption turned on to meet certain real-time requirements.
- The Touch driver contains a small bug that does not allow applications using it to exit properly
Overall, support is pretty good and enabled us to get started with development quickly.
NAND Flash Driver
As the Compulab module only provides 4MB of NOR flash, using the NAND flash is a requirement when implementing a full featured Linux system with an advanced graphical user interface. Compulab provides a binary module that is linked into a kernel driver to support the NAND flash. This driver provides a block interface on which standard filesystems like ext2 can be used. The NAND driver has worked fairly well, although we have seen several cases where we get I/O errors if we remove power to the device without shutting down the system properly. The way to recover is to do a low level format the NAND flash. This should not be an issue with this product as we will have a backup battery that will be used to power the system during shutdown if power is removed. We may eventually move to an open source JFFS2 flash driver as time permits.
The proprietary NAND driver presents an additional wrinkle in that the driver cannot be linked into the kernel due to GPL licensing requirements. One solution is to boot a small root file system from NOR flash that includes the NAND driver module, and then proceed to boot from NAND flash.
GNU/Linux Root File System
Compulab provides an example root file system (I think based on Debian) and suggests using scratchbox to build applications. We looked at it briefly, but then decided to build our own rootfs using OpenEmbedded for the following reasons:
- We can easily add additional packages from the extensive OpenEmbedded catalog as needed.
- Allows us to have an rootfs independent of the module — we can more easily move to other processor modules or architectures in the future.
- OpenEmbedded provides us with mechanisms for package management and building complete images that include our applications and tweaks to the OS.
For more information on OpenEmbedded, read our “Introduction to OpenEmbedded “. With OpenEmbedded, we were able to quickly build a toolchain and a root file system that included the kdrive version of Xwindows and GTK+ libraries. This rootfs fits in less than 32MB of flash disk space, which is much smaller than Compulab’s OS image.
We have also added machine configuration files to the OpenEmbedded project to support the cm-x270: http://www.openembedded.org/repo/org.openembedded.dev/conf/machine/compulab-pxa270.conf
Compulab seems mainly interested in customers who are interested in purchasing modules in volume. They do not sell low cost development boards such as LogicPD’s $500 board. Compulab requires you to purchase a fairly high cost development system ($1900) in order to get started. Part of this cost is to pay for Compulab’s support costs. For companies who do not have experience designing systems with PXA270 class processors, we highly recommend getting some up-front help from someone who has experience with these systems. Even though the module takes care of a lot of the design complexity, it helps to have a detailed understanding of the PXA270 and associated components, as you still need to interact with them. Consulting companies like BEC Systems can provide assistance in the form of hardware design reviews and Linux OS support to accelerate projects and help avoid costly mistakes and delays. As Compulab designs only the module, there is only so much they can do when you run into problems — as shown in the next section.
Overall, the project using the cm-x270 has gone well. The only real challenge we have faced is a latch-up issue with the ITE PCI controller on the cm-x270 module. It appears that this part is very sensitive to the characteristics of the 3.3V supply to the module. After a considerable amount of debugging and testing, we were able to solve this problem with some filtering and slowing down the rise time of the 3.3V supply. This is a good example of where a project can get difficult very quickly when things don’t work as expected.
So far, the cm-x270 has worked very well in this project. With its low cost, it is a very attractive option for companies wanting to implement advanced functionality in their products, but don’t have the time, sales volumes, or experience to justify a full processor board design. Feel free to post comments about your experiences using embedded computer modules.