|
|
(One intermediate revision by the same user not shown) |
Line 5: |
Line 5: |
| [[Installing and Configuring T2 for iMote2 on Windows XP]] | | [[Installing and Configuring T2 for iMote2 on Windows XP]] |
| | | |
− | == OpenOCD JTAG programming for IMote2== | + | == OpenOCD IMote2 programming == |
− | | + | [[OpenOCD 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.
| |