From TinyOS Wiki
Jump to: navigation, search

IntelMote2 (iMote2) - High-performance Wireless Sensor Network Node

iMote2 mote.

The Imote2 is an advanced wireless sensor node platform developed at Intel Research as part of Platform X <ref>Platform X. Intel Research wiki.</ref>. It is built around the low-power PXA271 XScale CPU and also integrates an IEEE 802.15.4 compliant radio. The design is modular and stackable with interface connectors for expansion boards on both the top and bottom sides, providing a standard set of I/O signals as well as additional high-speed interfaces for application specific I/O.

Hardware Features

  • PXA271 XScale Processor
    • Core Frequency: 13/104/208/312/416 MHz
    • 256 KB SRAM
    • 32 MB SDRAM
    • 32 MB Flash
  • Zigbee (IEEE 802.15.4) Radio (TI CC2420)
  • Mini-USB Client (slave)
    • RS232 console over USB
    • power
  • I-Mote2 Basic Sensor connector (31+ 21 pin connector)
  • Indicators: Tri-color status LED; Power LED; battery charger LED, console LED
  • Switches: on/off slider, Hard reset, Soft reset, User programmable switch
Basic Sensor Board.
iMote2 with the enalab camera board.


There is a number of accessories to assist developers in their work. Sensor boards are meant to enable sensing capabilities. Interface boards can behave as gateways between computer and mote and, depending on the TinyOS version, can enable programming over USB ports. JTAG programmers are mainly used in TinyOS 2 for flashing (programming) motes and as gateways.

Users should be aware of the fact that hardware availability may not imply driver existence for every TinyOS version. Consequently, some sensor boards may not have available drivers to operate their functionalities either fully or partially.

Sensor Boards

  • Basic Sensor Board - ITS400: 3 axis accelerometer, temperature, humidity and light sensors and 12-bit analog input
  • Multimedia Sensor Board - IMB400: Video Camera Chip (OmniVision OV7670), Audio Capture (Wolfson WM8940), Miniature Speaker, Microphone, PIR Motion Sensor
  • Structural Health Monitoring Board - ISM400: 3-axis accelerometer, temperature, humidity and light sensors and single‐channel analog input to 16‐bit ADC
  • Enalab Camera board OV7649 VGA imager chip

Interface Board

  • Interface board - IIB2400: jtag interface, dual usb ports

JTAG Programmers

The following programmers operate by means of OpenOCD:

TinyOS Support

There is TinyOS support for both tinyos-1.x and tinyos-2.x versions. The iMote2 platform is part of the core tinyos-2.x distribution. There have been contributions aiming at porting most of the features from T1 to T2<ref> TinyOS 2 on iMote2. Status of TinyOS 2 support for iMote2. TinyOS wiki.</ref>. Hereafter you can find instructions and documentation links regarding setting up the iMote2 development environment for T2. Compiler instructions may be used as well for T1 installations as long as you update the executable names of the compiler invokes since they might be different depending on the gcc installation method. Although this section is focused on T2, you may find links to iMote2-T1 in references <ref>T1 for iMote2. Crossbow Inc.</ref> <ref>iMote2 installation instructions. Includes T1. Konrad Lorincz</ref>.

Generally, any programmer will have to deal with three issues to have a fully operable TinyOS for a given platform: TinyOS tree installation, cross compiler installation for the platform processor and a programmer able to flash (program) motes and communicate with them. Unlike other platforms such as micaZ, iMote2 does not have such an easy-to-install development environment (as of Nov. 2010) since its manufacturer (Memsic) does not provide a programming interface operable in T2 and its processor manufacturer (Marvell) has not released a compiler which integrates easily with our environment. However, it is still possible to set up a complete development environment for iMote2-TinyOS 2. Next three subsections focus on every aforementioned topic in order to enhance what you find in the regular installation instructions <ref name="inst-TOS211"> Installing TinyOS 2.1.1. TinyOS regular installation method. TinyOS wiki</ref> on this wiki.

XScale Compiler

Since coding and compilation are performed on a separate system from iMote2 (another computer) a cross compiler is required. There are currently many sources pointing out different methods to obtain a xcompiler ready to use, but generally they can be sorted into three groups:

  1. Packaged compilers newer than GCC 4.x
  2. Packaged compilers of GCC 3.4.3
  3. Self-compiled compilers from source (usually of GCC 3.4.3)

Such three methods are briefly described hereafter. If you wish further details on this topic see iMote2 Compiler on this wiki <ref> iMote2 Compiler. TinyOS wiki.</ref>.

Packaged compilers newer than GCC 4.x

If you have a Debian-based system, this method is probably the easiest of three and may lead you to obtain better exec files. There are currently two available versions: one with elf output and another with eabi output. Both work fine and have been tested for some time at a WSN lab <ref>Compiling for an ARM architecture: iMote2-TinyOS. Experiences at Consolider COMONSENS</ref> , it is up to you which of the two to use. For further information you may read Compiling for an ARM architecture: iMote2-TinyOS.

As of Nov. 2010, a few minor changes in your TinyOS tree installation are required to use any of these two compilers. It is recommended to check section 7 of Compiling for an ARM architecture: iMote2-TinyOS <ref>Compiling for an ARM architecture: iMote2-TinyOS. Technical Report.</ref> for such changes and hints to optimize your compilation.

Packaged compilers of GCC 3.4.3

TinyOS regular installation uses this method. If you are running Cygwin (Windows) or another Linux distribution (you do not have a Debian-based system) it is unlikely that you can install the previous packages. However, you can still use rpm files for your system. Now, you will need to download three files (newlib, binutils and gcc) instead of one as it happened before.

Self-compiled compilers from source

In the event that you cannot use any of the aforementioned methods or you simply want to create from source your own compiler, you will have to download newlib, gcc, binutils and compile them. This option is the longest and most tedious. Mac OS users may find useful some particular instructions for their operating system <ref> Installing XScale-ELF cross compiler for intelmote2 on Mac OS X. TinyOS wiki.</ref>.

JTAG for iMote2

In order to flash any iMote2, you will need an interface board (IIB2400), a JTAG and a driver to transfer binary files (exe) to the mote over the JTAG cable. Besides Olimex JTAGs (ARM-USB-TINY and ARM-USB-TINY-H), two more cables have been reported work with iMote2: Amontec JTAGKey and JTAG Wiggler. The former can be purchased and the latter can be self-made. In addition, 'Intel(R) JTAG' was one of the first JTAGs utilized for iMote2.

OpenOCD is a driver able to operate with JTAG cables on Linux. As of version 0.4, ARM-USB-TINY, Amontec JTAG and JTAG Wiggler are supported. It is expected that ARM-USB-TINY-H will be in the future. Next links can help you installing and setting up OpenOCD for different JTAGs:

If you work on Cygwin (Windows), you may use JFlahmm to flash your motes.

Development Environment Usage

Two steps are described in this section to provide users with a quick check of their development environment for iMote2- TinyOS 2.

Compiling an Application

Once the TinyOS tree and the compiler are installed, you should be able to compile iMote2 applications just like with any other regular platform. This way, in order to compile Blink, do the following:

cd $TOSROOT/apps/Blink
make intelmote2

Installing on iMote2

As you have your application executable file on your computer, next step is to transfer it to an iMote2, i.e. programming the mote.

If you work on Linux and have a programmer supported by OpenOCD, you can install Blink as follows:

cd $TOSROOT/apps/Blink
make intelmote2 install openocd

If you work on Windows and have 'Intel(R) JTAG' programmer, you can install Blink as follows:

cd $TOSROOT/apps/Blink
make intelmote2 install jflashmm



Other resources not cited

Mailing lists

Besides the typical TinyOS mailing lists, there are two lists that might be helpful: