Posted in Software News on June 16, 2010 by Ryan Mallon
The 2.6.34 release of the mainline Linux kernel now includes support for Bluewater Systems Snapper CL15 module. Support is included for the Ethernet, frame buffer, NAND flash and I2C peripherals, with support for the SPI bus and I2S audio expected to be merged in the next few releases.
Other code which has been committed to the mainline Linux kernel by Bluewater Systems includes:
- Driver for the SST25L SPI flash
- Driver for the DS2782 battery gas-gauge
- Generic GPIO support for the AT91 ARM processors, which is used by our Snapper 9260, 9G20 and the upcoming 9G45 modules.
Posted in Software News on May 25, 2010 by Ryan Mallon
We have recently been working on a project which involved implementing a Bluetooth stack on an ARM Cortex M3 micro, with only 48kB of memory and 256kB of flash. We chose to use the Light-weight Bluetooth library (lwBT), which is a small, cross platform, Bluetooth library designed for embedded environments.
The lwBT library provides basic functionality for the HCI, L2CAP, SDP and RFCOMM Bluetooth layers. Additionaly, we implemented an OBEX layer with support for pushing files to remote devices and providing an OBEX push profile to allow files to be received from other Bluetooth devices. We also implemented a basic serial port profile (SPP) on top of the RFCOMM layer in lwBT which provides wireless serial communication. This can be used, for example, with the standard Linux BlueZ RFCOMM serial utilities. The entire lwBT stack fits in under 24kB of flash storage and uses between 5 and 10kB of memory depending on configuration options.
The lwBT stack provides a lot of the core Bluetooth functionality, but the interface to the library is very raw. Our Bluetooth API provides a set of simple access functions for common tasks such as sending and receiving data over an RFCOMM link and pushing files to other devices via OBEX. Our Bluetooth library was also designed to be as platform independent as possible. Only a thin platform specific layer must be written in order to move the Bluetooth library to a new device.
The following diagram shows the structure of the Bluetooth stack provided by our library:

Posted in Uncategorized on September 18, 2009 by Ryan Mallon
We have been maintaining a version of the Linux 2.6.20 kernel for around 2 years time now. Since 2.6.20, a number of features have been added to the mainline kernel which are of interest to us. Some of these new features are:
- Support for the AT91SAM9G20
- System on chip camera support
- Improved WiFi support
- SDIO and SDHC card support
- Power supply class for managing batteries
In addition to support for new features and drivers, there are a number of benefits to using a recent kernel:
- It is easier to get support with issues and bugs.
- Patches posted on mailing lists are easier to apply to recent kernels.
- It is easier to port patches developed against a recent kernel to be considered for mainline acceptance.
Andrew Morton discussed some of the above benefits in his keynote talk at the CELF Embedded Linux Conference in 2008. The slides from his talk are available at
http://www.celinux.org/elc08_presentations/morton-elc-08.ppt.
We choose to use 2.6.29 as the base for our new supported Linux kernel (at the time of writing, the latest stable kernel is 2.6.30). We have now ported most of the support for our Snapper CL15 and Snapper 9260 Single Board Computer Modules (
http://www.bluewatersys.com/quickstart/) into our 2.6.29 kernel, which is available for download at
http://www.bluewatersys.com/public/linux/linux-2.6.29-snapper.tar.gz.
During the upgrade from 2.6.20 to 2.6.29, we have taken the opportunity to drop a large amount of our lecagy code and to clean up other code to better conform to the Linux kernel coding standards. The long term goal is to improve the maintainability of our kenel code and, wherever possible, push support for our platforms to the mainline kernel in order to ease the upgrade process for ourselves in the future.
Posted in Software News on August 06, 2009 by Ryan Mallon
Java applications are platform independent. This means that a Java class file can be run on either a desktop PC or an embedded ARM platform without needing to be recompiled. This can reduce development time greatly since an application can be developed on a standard desktop PC and then re-deployed on an embedded ARM platform with little or no extra effort.
The main page for embedded Java development is: http://java.sun.com/javase/embedded/. Java SE 6 is unfortunately only supported on ARM v6 or higher. However, Java 1.4.2 is supported on our ARM v5 based Quickstart Kit. Sun are expecting to release a version of Java SE 6 with support for ARM v5 processors by the end of August. The embedded version of Java 1.4.2 is only 25MB when installed and can run on devices with as little as 32MB of memory. The embedded Java version of Java 1.4.2 is a full J2SE implementation except that it is "headless", which means that there is no support for mice, keyboards or framebuffer devices.
To download the Java 1.4.2 run-time for use on Bluewater's Quickstart Kit:
- Go to http://java.sun.com/javase/downloads/embedded.jsp
- Under "Java SE for Embedded 1.4.2", "ARM Linux - Headless" select "EABI, glibc 2.4, Soft Float"
- Fill out the survey and provide an email address
- You will be sent an email with a link to a download
- Download the archive
- The archive can be installed by simply unpacking it to a convenient location (for example, /local/java)
To create a simple hello world application, creae a file called Hello.Java with the following contents:
public class Hello {
public static void main(String args[]) {
System.out.println("Hello World from Java on the Quickstart Kit");
}
}
To compile this you need to have the Java SDK installed on your PC. The file Hello.class can be built as follows:
javac Hello.java
You can then run this on either your PC, or on Bluewater's Quickstart Kit. On the Quickstart Kit you will need to supply a classpath which includes both the Java installation directory and the path for your hello world class file. For example, if you have the embedded ARM Java run-time installed in /local/java, and your Hello.class file in is /home/ryan/java then you can run it as follows:
java -classpath /local/java/lib:/home/ryan/java Hello
If all goes well, you should see the output of the hello world program.
Posted in Uncategorized on March 17, 2009 by Ryan Mallon
The Bluewater System's 9260 Quickstart Kit offers two methods for connecting a high resolution digital camera. The first option is to use the flat flex connector on the Snapper 9260 module itself. This method can be used to easily add the Bluewater Systems 3 Megapixel digital camera board (see http://www.bluewatersys.com/design/showcase/digitalcameras.php) to the 9260 Quickstart Kit. The digital camera board comes with all necessary software for using the camera, including a library which provides a simple, easy to use library for developing camera based applications. The flat flex connector can also be used for custom designed camera boards. The pin-out includes 4 general purpose IOs (from the Snapper 9260s IO expander), which can be used for connecting to signals such as reset, strobe and trigger on an image sensor.
The second method for connecting cameras is to use the camera pins on the 9260 Quickstart Kit header. This allows any digital image sensor to be quickly connected to the Quickstart Kit for prototyping and testing. Up to 12-bit image sensors are supported. Most development kits for image sensors provide a pin strip on the image sensor board, which can be easily wired to the header on the 9260 Quickstart Kit header.
Combining a Quickstart Kit, a digital camera board and Bluewater System's PTP-USB library (see http://www.bluewatersys.com/blog/?p=74) allows for quick prototyping of a handheld digital camera, with USB connectivity to a standard Windows PC for downloading photos.