Difference between revisions of "T2 on IMote2 Documentation"

From TinyOS Wiki
Jump to: navigation, search
Line 4: Line 4:
 
== Installing TinyOS2.x in Windows ==
 
== Installing TinyOS2.x in Windows ==
 
[[Installing and Configuring T2 for iMote2 on Windows  XP]]
 
[[Installing and Configuring T2 for iMote2 on Windows  XP]]
 +
 +
== OpenOCD JTAG programming for IMote2==
 +
 +
* The following instruction works with [http://www.olimex.com/dev/arm-usb-tiny.html USB JTAG cable from Olimex] under Linux. The cable is available from  http://microcontrollershop.com/
 +
* The instructions are based on Ubuntu 7.10
 +
* [http://openocd.berlios.de/web/ OpenOCD website]
 +
* ARM-USB-TINY only works with [http://www.ftdichip.com/Drivers/D2XX.htm libftd2xx from FTDI]
 +
 +
===Install FTDI libftd2xx driver===
 +
*run the following as root or using sudo
 +
gunzip libftd2xx0.4.13.tar.gz
 +
tar -xvf libftd2xx0.4.13.tar
 +
cp ftd2xx.h /usr/local/include
 +
cp WinTypes.h /usr/local/include
 +
cp libftd2xx.so.0.4.13 /usr/local/lib
 +
cd /usr/local/lib
 +
ln -s libftd2xx.so.0.4.13 libftd2xx.so
 +
cd /usr/lib
 +
ln -s /usr/local/lib/libftd2xx.so.0.4.13 libftd2xx.so
 +
ldconfig
 +
 +
The closed source drivers from FTDI rely on having <tt>/proc/bus/usb</tt> available.  This is not enabled in Ubuntu by default.  We enable it by editing <tt>/etc/init.d/mountdevsubfs.sh</tt> and uncommenting the following lines:
 +
 +
#
 +
# Magic to make /proc/bus/usb work
 +
#
 +
mkdir -p /dev/bus/usb/.usbfs
 +
domount usbfs "" /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
 +
ln -s .usbfs/devices /dev/bus/usb/devices
 +
mount --rbind /dev/bus/usb /proc/bus/usb
 +
 +
We now need to set up the permissions correctly for the Olimex JTAG programmer.  Create a file called <tt>/etc/udev/rules.d/45-ft2232.rules</tt> with the following text:
 +
 +
BUS!="usb", ACTION!="add", SUBSYSTEM!=="usb_device", GOTO="kcontrol_rules_end"
 +
 +
SYSFS{idProduct}=="0004", SYSFS{idVendor}=="15ba", MODE="664", GROUP="adm"
 +
 +
LABEL="kcontrol_rules_end"
 +
 +
You will have to reboot your machine for the changes to take effect.
 +
 +
=== Build OpenOCD ===
 +
 +
* check out OpenOCD svn repository
 +
svn checkout http://svn.berlios.de/svnroot/repos/openocd
 +
* build OpenOCD
 +
  cd openocd/trunk
 +
  ./bootstrap
 +
  ./configure --enable-ft2232_ftd2xx
 +
  make
 +
 +
* install OpenOCD
 +
  sudo make install
 +
  sudo chmod 4755 /usr/local/bin/openocd
 +
  sudo mkdir -p /usr/local/etc
 +
  sudo cp $INTELMOTE2_CONTRIB_DIR/tools/platforms/intelmote2/openocd/arm-usb-tiny.cfg /usr/local/etc
 +
  sudo chmod 755 /usr/local/etc/arm-usb-tiny.cfg
 +
 +
This will install openocd to /usr/local/bin. Be sure this is on your PATH.
 +
 +
=== Program iMote2 with OpenOCD ===
 +
 +
* Connect iMote2 to the debug board.
 +
* Connect JTAG interface with USB to debug board and then connect to PC. (Best to connect directly to PC - going through a hub does not always work.)
 +
* Connect USB cable to debug board and then to PC. (As above, best to connect directly rather than through a hub.) You will therefore have two USB cables running from the PC: one to the JTAG interface and the other directly to the debug board.
 +
* Press the reset button on the iMote2.
 +
* You can now manually install the binary on the mote by running:
 +
 +
$INTELMOTE2_CONTRIB_DIR/tools/platforms/intelmote2/openocd/imote2-ocd-program.py build/intelmote2/main.bin.out
 +
 +
==== Manual programming method. ====
 +
 +
The above uses our custom "imote2-ocd-program.py" program that is a wrapper for running openocd and programming the mote.  You can also run openocd by hand:
 +
 +
  openocd -f /usr/local/etc/arm-usb-tiny.cfg
 +
and then connect to it with:
 +
  telnet localhost 3333
 +
 +
Various commands you can use:
 +
halt
 +
poll
 +
resume
 +
flash info 0
 +
 +
=== Accessing serial data ===
 +
 +
To read data from the node's serial port, use port /dev/ttyUSB1 (/dev/ttyUSB0 is used for programming), and set serial settings to baud rate 115200 7 bits, even parity, 1 stop bit. Using 'minicom' will show the data being printed by printUART().
 +
 +
=== Using GDB ===
 +
 +
It is possible to use GDB to debug the iMote2 while it is running.
 +
 +
* Compile your binary using the "debug" flag:
 +
make intelmote2 debug install.100
 +
* After the mote is installed with the new binary, start up openocd:
 +
openocd -f /usr/local/etc/arm-usb-tiny.cfg
 +
* Run xscale-elf-gdb (which should have been installed with the xscale toolchain):
 +
xscale-elf-gdb build/intelmote2/main.exe
 +
* Tell gdb to use localhost:4444 as the debugging target. (This is the port that openocd listens on for gdb commands.)
 +
(gdb) target remote localhost:4444
 +
* Then continue:
 +
(gdb) cont
 +
* You can then hit Ctrl-C to halt the mote, and inspect what is going on. For example,
 +
(gdb) info reg
 +
(gdb) where
 +
and so forth.

Revision as of 20:18, 28 May 2008

Installing xscale-elf compiler tools

xscale-elf Debian

Installing TinyOS2.x in Windows

Installing and Configuring T2 for iMote2 on Windows XP

OpenOCD JTAG programming for IMote2

Install FTDI libftd2xx driver

  • run the following as root or using sudo
gunzip libftd2xx0.4.13.tar.gz
tar -xvf libftd2xx0.4.13.tar
cp ftd2xx.h /usr/local/include
cp WinTypes.h /usr/local/include
cp libftd2xx.so.0.4.13 /usr/local/lib
cd /usr/local/lib
ln -s libftd2xx.so.0.4.13 libftd2xx.so
cd /usr/lib
ln -s /usr/local/lib/libftd2xx.so.0.4.13 libftd2xx.so
ldconfig

The closed source drivers from FTDI rely on having /proc/bus/usb available. This is not enabled in Ubuntu by default. We enable it by editing /etc/init.d/mountdevsubfs.sh and uncommenting the following lines:

#
# Magic to make /proc/bus/usb work
#
mkdir -p /dev/bus/usb/.usbfs
domount usbfs "" /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
ln -s .usbfs/devices /dev/bus/usb/devices
mount --rbind /dev/bus/usb /proc/bus/usb

We now need to set up the permissions correctly for the Olimex JTAG programmer. Create a file called /etc/udev/rules.d/45-ft2232.rules with the following text:

BUS!="usb", ACTION!="add", SUBSYSTEM!=="usb_device", GOTO="kcontrol_rules_end"

SYSFS{idProduct}=="0004", SYSFS{idVendor}=="15ba", MODE="664", GROUP="adm"

LABEL="kcontrol_rules_end"

You will have to reboot your machine for the changes to take effect.

Build OpenOCD

  • check out OpenOCD svn repository
svn checkout http://svn.berlios.de/svnroot/repos/openocd
  • build OpenOCD
 cd openocd/trunk
 ./bootstrap
 ./configure --enable-ft2232_ftd2xx
 make
  • install OpenOCD
 sudo make install
 sudo chmod 4755 /usr/local/bin/openocd
 sudo mkdir -p /usr/local/etc
 sudo cp $INTELMOTE2_CONTRIB_DIR/tools/platforms/intelmote2/openocd/arm-usb-tiny.cfg /usr/local/etc
 sudo chmod 755 /usr/local/etc/arm-usb-tiny.cfg

This will install openocd to /usr/local/bin. Be sure this is on your PATH.

Program iMote2 with OpenOCD

  • Connect iMote2 to the debug board.
  • Connect JTAG interface with USB to debug board and then connect to PC. (Best to connect directly to PC - going through a hub does not always work.)
  • Connect USB cable to debug board and then to PC. (As above, best to connect directly rather than through a hub.) You will therefore have two USB cables running from the PC: one to the JTAG interface and the other directly to the debug board.
  • Press the reset button on the iMote2.
  • You can now manually install the binary on the mote by running:
$INTELMOTE2_CONTRIB_DIR/tools/platforms/intelmote2/openocd/imote2-ocd-program.py build/intelmote2/main.bin.out

Manual programming method.

The above uses our custom "imote2-ocd-program.py" program that is a wrapper for running openocd and programming the mote. You can also run openocd by hand:

 openocd -f /usr/local/etc/arm-usb-tiny.cfg

and then connect to it with:

 telnet localhost 3333

Various commands you can use:

halt
poll
resume
flash info 0

Accessing serial data

To read data from the node's serial port, use port /dev/ttyUSB1 (/dev/ttyUSB0 is used for programming), and set serial settings to baud rate 115200 7 bits, even parity, 1 stop bit. Using 'minicom' will show the data being printed by printUART().

Using GDB

It is possible to use GDB to debug the iMote2 while it is running.

  • Compile your binary using the "debug" flag:
make intelmote2 debug install.100
  • After the mote is installed with the new binary, start up openocd:
openocd -f /usr/local/etc/arm-usb-tiny.cfg
  • Run xscale-elf-gdb (which should have been installed with the xscale toolchain):
xscale-elf-gdb build/intelmote2/main.exe
  • Tell gdb to use localhost:4444 as the debugging target. (This is the port that openocd listens on for gdb commands.)
(gdb) target remote localhost:4444
  • Then continue:
(gdb) cont
  • You can then hit Ctrl-C to halt the mote, and inspect what is going on. For example,
(gdb) info reg
(gdb) where

and so forth.