From 09a9f0d00a1bd8065f3866c3c577f949569fdf99 Mon Sep 17 00:00:00 2001 From: adamdunkels Date: Thu, 25 Oct 2007 11:08:27 +0000 Subject: [PATCH] Tmote Sky tools for Windows and Linux --- tools/sky/motelist-linux | 276 +++++ tools/sky/motelist-windows.exe | Bin 0 -> 446514 bytes tools/sky/msp430-bsl-linux | 1628 ++++++++++++++++++++++++++++++ tools/sky/msp430-bsl-windows.exe | Bin 0 -> 81920 bytes tools/sky/serialdump-linux | Bin 0 -> 14922 bytes tools/sky/serialdump-windows.exe | Bin 0 -> 17718 bytes 6 files changed, 1904 insertions(+) create mode 100755 tools/sky/motelist-linux create mode 100755 tools/sky/motelist-windows.exe create mode 100755 tools/sky/msp430-bsl-linux create mode 100755 tools/sky/msp430-bsl-windows.exe create mode 100755 tools/sky/serialdump-linux create mode 100755 tools/sky/serialdump-windows.exe diff --git a/tools/sky/motelist-linux b/tools/sky/motelist-linux new file mode 100755 index 000000000..f1b0d9931 --- /dev/null +++ b/tools/sky/motelist-linux @@ -0,0 +1,276 @@ +#!/usr/bin/perl -w +use strict; +# $Id: motelist-linux,v 1.1 2007/05/29 19:34:30 adam Exp $ +# @author Cory Sharp +# @author Joe Polastre + +my $help = <<'EOF'; +usage: motelist [options] + + $Revision: 1.1 $ + +options: + -h display this help + -c compact format, not pretty but easier for parsing + -f specify the usb-serial file (for smote.cs) + -k kernel version: 2.4, 2.6, auto (default) + -m method to scan usb: procfs, sysfs, auto (default) + -dev_prefix force the device prefix for the serial device + -usb display extra usb information +EOF + +my %Opt = ( + compact => 0, + usb => 0, + method => "auto", + kernel => "auto", + dev_prefix => [ "/dev/usb/tts/", "/dev/ttyUSB", "/dev/tts/USB" ], + usbserial => "sudo cat /proc/tty/driver/usbserial |", +); + +while (@ARGV) { + last unless $ARGV[0] =~ /^-/; + my $opt = shift @ARGV; + if( $opt eq "-h" ) { print "$help\n"; exit 0; } + elsif( $opt eq "-c" ) { $Opt{compact} = 1; } + elsif( $opt eq "-f" ) { $Opt{usbserial} = shift @ARGV; } + elsif( $opt eq "-k" ) { $Opt{kernel} = shift @ARGV; } + elsif( $opt eq "-m" ) { $Opt{method} = shift @ARGV; } + elsif( $opt eq "-dev_prefix" ) { $Opt{dev_prefix} = shift @ARGV; } + elsif( $opt eq "-usb" ) { $Opt{usb} = 1; } + else { print STDERR "$help\nerror, unknown command line option $opt\n"; exit 1; } +} + +if( $Opt{kernel} eq "auto" ) { + $Opt{kernel} = "unknown"; + $Opt{kernel} = $1 if snarf("/proc/version") =~ /\bLinux version (\d+\.\d+)/; +} + +if( $Opt{method} eq "auto" ) { + $Opt{method} = ($Opt{kernel} eq "2.4") ? "procfs" : "sysfs"; +} + +my @devs = $Opt{method} eq "procfs" ? scan_procfs() : scan_sysfs(); +print_motelist( sort { cmp_usbdev($a,$b) } @devs ); + + +# +# SysFS +# +sub scan_sysfs { + + # Scan /sys/bus/usb/drivers/usb for FTDI devices + my @ftdidevs = + grep { ($_->{UsbVendor}||"") eq "0403" && ($_->{UsbProduct}||"") eq "6001" } + map { { + SysPath => $_, + UsbVendor => snarf("$_/idVendor",1), + UsbProduct => snarf("$_/idProduct",1), + } } + glob("/sys/bus/usb/drivers/usb/*"); + + # Gather information about each FTDI device + for my $f (@ftdidevs) { + my $syspath = $f->{SysPath}; + + $f->{InfoManufacturer} = snarf("$syspath/manufacturer",1); + $f->{InfoProduct} = snarf("$syspath/product",1); + $f->{InfoSerial} = snarf("$syspath/serial",1); + $f->{UsbDevNum} = snarf("$syspath/devnum",1); + + my $devstr = readlink($syspath); + if( $devstr =~ m{([^/]+)/usb(\d+)/.*-([^/]+)$} ) { + $f->{UsbPath} = "usb-$1-$3"; + $f->{UsbBusNum} = $2; + } + ($f->{SysDev} = $syspath) =~ s{^.*/}{}; + + my $port = "$syspath/$f->{SysDev}:1.0"; + ($f->{DriverName} = readlink("$port/driver")) =~ s{^.*/}{} if -l "$port/driver"; + ($f->{SerialDevName} = (glob("$port/tty*"),undef)[0]) =~ s{^.*/}{}; + $f->{SerialDevNum} = $1 if $f->{SerialDevName} =~ /(\d+)/; + $f->{SerialDevName} = getSerialDevName( $f->{SerialDevNum} ) || " (none)"; + } + + return @ftdidevs; +} + + +# +# Scan Procfs +# +sub scan_procfs { + + my $text_devs = snarf("< /proc/bus/usb/devices"); + my $text_serial = snarf($Opt{usbserial}); + + my @usbdevs = map { {parse_usb_devices_text($_)} } + grep { !/^\s*$/ } split /\n+(?=T:)/, $text_devs; + my %usbtree = build_usb_tree( @usbdevs ); + my %usbserialtree = build_usbserial_tree( $text_serial ); + for my $tts ( values %usbserialtree ) { + $usbtree{usbkey($tts->{path})}{usbserial} = $tts if defined $tts->{path}; + } + + my @ftdidevs = map { { + UsbVendor => $_->{Vendor}, + UsbProduct => $_->{ProdID}, + InfoManufacturer => $_->{Manufacturer}, + InfoProduct => $_->{Product}, + InfoSerial => $_->{SerialNumber}, + UsbBusNum => $_->{nbus}, + UsbDevNum => $_->{ndev}, + UsbPath => (($Opt{kernel} eq "2.4") ? $_->{usbserial}{path} : $_->{usbpath}), + DriverName => $_->{driver}, + SerialDevNum => $_->{usbserial}{tts}, + SerialDevName => getSerialDevName($_->{usbserial}{tts}) || " (none)", + } } + grep { ($_->{Vendor}||"") eq "0403" && ($_->{ProdID}||"") eq "6001" } + values %usbtree; + + return @ftdidevs; +} + +sub build_usb_tree { + my @devs = @_; + my %tree = (); + for my $dev (sort { $a->{Lev} <=> $b->{Lev} } @devs) { + my ($bus,$lev,$prnt) = ( $dev->{Bus}+0, $dev->{Lev}+0, $dev->{Prnt}+0 ); + my $devnum = $dev->{"Dev#"}+0; + $dev->{nbus} = $bus; + $dev->{ndev} = $devnum; + $tree{"bus$bus"} = {} unless exists $tree{"bus$bus"}; + $tree{"bus$bus"}{"dev$devnum"} = $dev; + if( $lev == 0 ) { + $dev->{usbpath} = "usb-$dev->{SerialNumber}"; + } else { + my $sep = ($lev==1) ? "-" : "."; + $dev->{parent} = $tree{"bus$bus"}{"dev$prnt"}; + $dev->{usbpath} = $dev->{parent}{usbpath} . $sep . ($dev->{Port}+1); + } + $tree{usbkey($dev->{usbpath})} = $dev; + } + return %tree; +} + +sub parse_usb_devices_text { + my $text = shift; + $text =~ s/^\S+\s*//gm; + $text =~ s/\s*(\S+=)/\001$1/g; + return map { m/(.*?)=(.*)/ } split /\001/, $text; +} + +sub build_usbserial_tree { + my $text = shift; + my %tree = (); + while( $text =~ /^([^:]+):(.*)/mg ) { + my ($tts,$params) = ($1,$2); + $tree{$tts} = { tts => $tts }; + while ($params =~ m/\s+([^:]+):(?:"([^"]*)"|(\S+))/g) { + $tree{$tts}{$1} = $2||$3; + } + } + return %tree; +} + +sub usbkey { + if( $Opt{kernel} eq "2.4" ) { + (my $key = $_[0]) =~ s/^.*-//; + return $key; + } + return $_[0]; +} + + +# +# getSerialDevName +# +# For each device, force to use dev_prefix if it's not an array. Otherwise, +# assume it's a list of candidate prefixes. Check them and commit to the +# first one that actually exists. +# +sub getSerialDevName { + my $devnum = shift; + my $devname = undef; + if( defined $devnum ) { + if( ref($Opt{dev_prefix}) eq "ARRAY" ) { + $devname = $devnum; + for my $prefix (@{$Opt{dev_prefix}}) { + my $file = $prefix . $devnum; + if( -e $file ) { $devname = $file; last; } + } + } else { + $devname = $Opt{dev_prefix} . $devnum; + } + } + return $devname; +} + + +# +# Print motelist +# +sub print_motelist { + my @devs = @_; + + # If none were found, quit + if( @devs == 0 ) { + print "No devices found.\n"; + return; + } + + # Print a header + if( !$Opt{compact} ) { + if( $Opt{usb} ) { + print << "EOF" unless $Opt{compact}; +Bus Dev USB Path Reference Device Description +--- --- ------------------------ ---------- ---------------- ------------------------------------- +EOF + } else { + print << "EOF" unless $Opt{compact}; +Reference Device Description +---------- ---------------- --------------------------------------------- +EOF + } + } + + # Print the usb information + for my $dev (sort { cmp_usbdev($a,$b) } @devs) { + my $desc = join( " ", $dev->{InfoManufacturer}||"", $dev->{InfoProduct}||"" ) || " (none)"; + my @output = ( $dev->{InfoSerial}||" (none)", $dev->{SerialDevName}, $desc ); + @output = ( $dev->{UsbBusNum}, $dev->{UsbDevNum}, $dev->{UsbPath}, @output ) if $Opt{usb}; + if( $Opt{compact} ) { + print join(",",@output) . "\n"; + } else { + printf( ($Opt{usb}?"%3d %3d %-24s ":"")."%-10s %-16s %s\n", @output ); + } + } +} + + +# +# Cmp Usbdev's +# +sub cmp_usbdev { + my ($a,$b) = @_; + if( defined $a->{SerialDevNum} ) { + if( defined $b->{SerialDevNum} ) { + return $a->{SerialDevNum} <=> $b->{SerialDevNum}; + } + return -1; + } + return 1 if defined $b->{SerialDevNum}; + return ($a->{InfoSerial}||"") cmp ($b->{InfoSerial}||""); +} + +# +# Read a file in +# +sub snarf { + open my $fh, $_[0] or return undef; + my $text = do{local $/;<$fh>}; + close $fh; + $text =~ s/\s+$// if $_[1]; + return $text; +} + diff --git a/tools/sky/motelist-windows.exe b/tools/sky/motelist-windows.exe new file mode 100755 index 0000000000000000000000000000000000000000..8fa1e4b4f0d0991d05360376ea50d7a4aecd2e60 GIT binary patch literal 446514 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 z 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 z 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 +# this is distributed under a free software license, see license.txt +# +# fixes from Colin Domoney +# +# based on the application note slas96b.pdf from Texas Instruments, Inc., +# Volker Rzehak +# additional infos from slaa089a.pdf + +import serial +import sys, time, string, cStringIO, struct + +VERSION = string.split("Revision: 1.39-telos-7 ")[1] #freeze the mspgcc CVS version, and tag telos + +DEBUG = 0 #disable debug messages by default + +#copy of the patch file provided by TI +#this part is (C) by Texas Instruments +PATCH = """@0220 +31 40 1A 02 09 43 B0 12 2A 0E B0 12 BA 0D 55 42 +0B 02 75 90 12 00 1F 24 B0 12 BA 02 55 42 0B 02 +75 90 16 00 16 24 75 90 14 00 11 24 B0 12 84 0E +06 3C B0 12 94 0E 03 3C 21 53 B0 12 8C 0E B2 40 +10 A5 2C 01 B2 40 00 A5 28 01 30 40 42 0C 30 40 +76 0D 30 40 AC 0C 16 42 0E 02 17 42 10 02 E2 B2 +08 02 14 24 B0 12 10 0F 36 90 00 10 06 28 B2 40 +00 A5 2C 01 B2 40 40 A5 28 01 D6 42 06 02 00 00 +16 53 17 83 EF 23 B0 12 BA 02 D3 3F B0 12 10 0F +17 83 FC 23 B0 12 BA 02 D0 3F 18 42 12 02 B0 12 +10 0F D2 42 06 02 12 02 B0 12 10 0F D2 42 06 02 +13 02 38 E3 18 92 12 02 BF 23 E2 B3 08 02 BC 23 +30 41 +q +""" + +#These BSL's are (C) by TI. They come with the application note slaa089a +F1X_BSL = """@0220 +24 02 2E 02 31 40 20 02 2B D2 C0 43 EA FF 32 C2 +F2 C0 32 00 00 00 B2 40 80 5A 20 01 F2 40 85 00 +57 00 F2 40 80 00 56 00 E2 D3 21 00 E2 D3 22 00 +E2 C3 26 00 E2 C2 2A 00 E2 C2 2E 00 B2 40 10 A5 +2C 01 B2 40 00 A5 28 01 3B C0 3A 00 B0 12 D6 04 +82 43 12 02 09 43 36 40 0A 02 37 42 B0 12 AC 05 +C6 4C 00 00 16 53 17 83 F9 23 D2 92 0C 02 0D 02 +28 20 55 42 0B 02 75 90 12 00 80 24 75 90 10 00 +6D 24 B0 12 9C 04 55 42 0B 02 75 90 18 00 31 24 +75 90 1E 00 B8 24 75 90 20 00 17 24 2B B2 11 24 +75 90 16 00 22 24 75 90 14 00 B3 24 75 90 1A 00 +18 24 75 90 1C 00 45 24 04 3C B0 12 36 05 BE 3F +21 53 B0 12 3C 05 BA 3F 03 43 B0 12 36 05 D2 42 +0E 02 56 00 D2 42 0F 02 57 00 D2 42 10 02 16 02 +AD 3F B0 12 36 05 10 42 0E 02 16 42 0E 02 15 43 +07 3C 36 40 FE FF B2 40 06 A5 10 02 35 40 0C 00 +B2 40 00 A5 2C 01 92 42 10 02 28 01 B6 43 00 00 +92 B3 2C 01 FD 23 15 83 F3 23 36 90 FE FF CD 27 +37 40 80 00 36 F0 80 FF 36 90 00 11 0E 28 07 57 +36 F0 00 FF 36 90 00 12 08 28 07 57 36 F0 00 FE +04 3C 16 42 0E 02 17 42 10 02 35 43 75 96 03 20 +17 83 FC 23 B2 3F 82 46 00 02 B3 3F 36 40 E0 FF +37 40 20 00 B0 12 AC 05 7C 96 01 24 2B D3 17 83 +F9 23 2B C2 B0 12 9C 04 2B D2 9F 3F 16 42 0E 02 +17 42 10 02 2B B2 38 24 3B D0 10 00 B0 12 AC 05 +36 90 00 10 06 2C 36 90 00 01 09 2C C6 4C 00 00 +25 3C B2 40 00 A5 2C 01 B2 40 40 A5 28 01 16 B3 +03 20 C2 4C 14 02 1A 3C C2 4C 15 02 86 9A FD FF +08 24 2B D3 3B B0 20 00 04 20 3B D0 20 00 82 46 +00 02 36 90 01 02 04 28 3B D2 3B B0 10 00 02 24 +3B C0 32 00 1A 42 14 02 86 4A FF FF 16 53 17 83 +CD 23 B0 12 9C 04 61 3F B0 12 AC 05 17 83 FC 23 +B0 12 9C 04 5E 3F B2 40 F0 0F 0E 02 B2 40 10 00 +10 02 B2 40 80 00 0A 02 D2 42 10 02 0C 02 D2 42 +10 02 0D 02 82 43 12 02 09 43 36 40 0A 02 27 42 +7C 46 B0 12 40 05 17 83 FB 23 16 42 0E 02 17 42 +10 02 36 90 00 01 0A 28 B2 46 14 02 5C 42 14 02 +B0 12 40 05 17 83 5C 42 15 02 01 3C 7C 46 B0 12 +40 05 17 83 EE 23 B2 E3 12 02 5C 42 12 02 B0 12 +40 05 5C 42 13 02 B0 12 40 05 E0 3E 18 42 12 02 +B0 12 AC 05 C2 4C 12 02 B0 12 AC 05 C2 4C 13 02 +38 E3 3B B2 0A 24 86 9A FE FF 07 24 3B B0 20 00 +04 20 16 53 82 46 00 02 2B D3 18 92 12 02 08 23 +2B B3 06 23 30 41 E2 B2 28 00 FD 27 E2 B2 28 00 +FD 23 B2 40 24 02 60 01 E2 B2 28 00 FD 27 15 42 +70 01 05 11 05 11 05 11 82 45 02 02 05 11 82 45 +04 02 B2 80 1E 00 04 02 57 42 16 02 37 80 03 00 +05 11 05 11 17 53 FD 23 35 50 40 A5 82 45 2A 01 +35 42 B2 40 24 02 60 01 92 92 70 01 02 02 FC 2F +15 83 F7 23 09 43 7C 40 90 00 02 3C 7C 40 A0 00 +C2 43 07 02 C9 EC 12 02 19 E3 1B C3 55 42 07 02 +55 45 56 05 00 55 0C 2E 2E 2E 2E 2E 2E 2E 2E 1A +34 34 92 42 70 01 72 01 B2 50 0C 00 72 01 07 3C +1B B3 0B 20 82 43 62 01 92 B3 62 01 FD 27 E2 C3 +21 00 0A 3C 4C 11 F6 2B 1B E3 82 43 62 01 92 B3 +62 01 FD 27 E2 D3 21 00 92 52 02 02 72 01 D2 53 +07 02 F0 90 0C 00 61 FC D1 23 30 41 C2 43 09 02 +1B C3 55 42 09 02 55 45 BC 05 00 55 0C 56 56 56 +56 56 56 56 56 36 76 00 E2 B2 28 00 FD 23 92 42 +70 01 72 01 92 52 04 02 72 01 82 43 62 01 92 B3 +62 01 FD 27 E2 B2 28 00 1E 28 2B D3 1C 3C 4C 10 +1A 3C 82 43 62 01 92 B3 62 01 FD 27 E2 B2 28 00 +01 28 1B E3 1B B3 01 24 2B D3 C9 EC 12 02 19 E3 +0A 3C 82 43 62 01 92 B3 62 01 FD 27 E2 B2 28 00 +E6 2B 4C 10 1B E3 92 52 02 02 72 01 D2 53 09 02 +C0 3F 82 43 62 01 92 B3 62 01 FD 27 E2 B2 28 00 +01 2C 2B D3 30 41 +q +""" + +F4X_BSL = """@0220 +24 02 2E 02 31 40 20 02 2B D2 C0 43 EA FF 32 C2 +F2 C0 32 00 00 00 B2 40 80 5A 20 01 32 D0 40 00 +C2 43 50 00 F2 40 98 00 51 00 F2 C0 80 00 52 00 +D2 D3 21 00 D2 D3 22 00 D2 C3 26 00 E2 C3 22 00 +E2 C3 26 00 B2 40 10 A5 2C 01 B2 40 00 A5 28 01 +3B C0 3A 00 B0 12 DE 04 82 43 12 02 09 43 36 40 +0A 02 37 42 B0 12 B4 05 C6 4C 00 00 16 53 17 83 +F9 23 D2 92 0C 02 0D 02 28 20 55 42 0B 02 75 90 +12 00 80 24 75 90 10 00 6D 24 B0 12 A4 04 55 42 +0B 02 75 90 18 00 31 24 75 90 1E 00 B8 24 75 90 +20 00 17 24 2B B2 11 24 75 90 16 00 22 24 75 90 +14 00 B3 24 75 90 1A 00 18 24 75 90 1C 00 45 24 +04 3C B0 12 3E 05 BE 3F 21 53 B0 12 44 05 BA 3F +03 43 B0 12 3E 05 D2 42 0E 02 50 00 D2 42 0F 02 +51 00 D2 42 10 02 16 02 AD 3F B0 12 3E 05 10 42 +0E 02 16 42 0E 02 15 43 07 3C 36 40 FE FF B2 40 +06 A5 10 02 35 40 0C 00 B2 40 00 A5 2C 01 92 42 +10 02 28 01 B6 43 00 00 92 B3 2C 01 FD 23 15 83 +F3 23 36 90 FE FF CD 27 37 40 80 00 36 F0 80 FF +36 90 00 11 0E 28 07 57 36 F0 00 FF 36 90 00 12 +08 28 07 57 36 F0 00 FE 04 3C 16 42 0E 02 17 42 +10 02 35 43 75 96 03 20 17 83 FC 23 B2 3F 82 46 +00 02 B3 3F 36 40 E0 FF 37 40 20 00 B0 12 B4 05 +7C 96 01 24 2B D3 17 83 F9 23 2B C2 B0 12 A4 04 +2B D2 9F 3F 16 42 0E 02 17 42 10 02 2B B2 38 24 +3B D0 10 00 B0 12 B4 05 36 90 00 10 06 2C 36 90 +00 01 09 2C C6 4C 00 00 25 3C B2 40 00 A5 2C 01 +B2 40 40 A5 28 01 16 B3 03 20 C2 4C 14 02 1A 3C +C2 4C 15 02 86 9A FD FF 08 24 2B D3 3B B0 20 00 +04 20 3B D0 20 00 82 46 00 02 36 90 01 02 04 28 +3B D2 3B B0 10 00 02 24 3B C0 32 00 1A 42 14 02 +86 4A FF FF 16 53 17 83 CD 23 B0 12 A4 04 61 3F +B0 12 B4 05 17 83 FC 23 B0 12 A4 04 5E 3F B2 40 +F0 0F 0E 02 B2 40 10 00 10 02 B2 40 80 00 0A 02 +D2 42 10 02 0C 02 D2 42 10 02 0D 02 82 43 12 02 +09 43 36 40 0A 02 27 42 7C 46 B0 12 48 05 17 83 +FB 23 16 42 0E 02 17 42 10 02 36 90 00 01 0A 28 +B2 46 14 02 5C 42 14 02 B0 12 48 05 17 83 5C 42 +15 02 01 3C 7C 46 B0 12 48 05 17 83 EE 23 B2 E3 +12 02 5C 42 12 02 B0 12 48 05 5C 42 13 02 B0 12 +48 05 E0 3E 18 42 12 02 B0 12 B4 05 C2 4C 12 02 +B0 12 B4 05 C2 4C 13 02 38 E3 3B B2 0A 24 86 9A +FE FF 07 24 3B B0 20 00 04 20 16 53 82 46 00 02 +2B D3 18 92 12 02 08 23 2B B3 06 23 30 41 E2 B3 +20 00 FD 27 E2 B3 20 00 FD 23 B2 40 24 02 60 01 +E2 B3 20 00 FD 27 15 42 70 01 05 11 05 11 05 11 +82 45 02 02 05 11 82 45 04 02 B2 80 1E 00 04 02 +57 42 16 02 37 80 03 00 05 11 05 11 17 53 FD 23 +35 50 40 A5 82 45 2A 01 35 42 B2 40 24 02 60 01 +92 92 70 01 02 02 FC 2F 15 83 F7 23 09 43 7C 40 +90 00 02 3C 7C 40 A0 00 C2 43 07 02 C9 EC 12 02 +19 E3 1B C3 55 42 07 02 55 45 5E 05 00 55 0C 2E +2E 2E 2E 2E 2E 2E 2E 1A 34 34 92 42 70 01 72 01 +B2 50 0C 00 72 01 07 3C 1B B3 0B 20 82 43 62 01 +92 B3 62 01 FD 27 D2 C3 21 00 0A 3C 4C 11 F6 2B +1B E3 82 43 62 01 92 B3 62 01 FD 27 D2 D3 21 00 +92 52 02 02 72 01 D2 53 07 02 F0 90 0C 00 59 FC +D1 23 30 41 C2 43 09 02 1B C3 55 42 09 02 55 45 +C4 05 00 55 0C 56 56 56 56 56 56 56 56 36 76 00 +E2 B3 20 00 FD 23 92 42 70 01 72 01 92 52 04 02 +72 01 82 43 62 01 92 B3 62 01 FD 27 E2 B3 20 00 +1E 28 2B D3 1C 3C 4C 10 1A 3C 82 43 62 01 92 B3 +62 01 FD 27 E2 B3 20 00 01 28 1B E3 1B B3 01 24 +2B D3 C9 EC 12 02 19 E3 0A 3C 82 43 62 01 92 B3 +62 01 FD 27 E2 B3 20 00 E6 2B 4C 10 1B E3 92 52 +02 02 72 01 D2 53 09 02 C0 3F 82 43 62 01 92 B3 +62 01 FD 27 E2 B3 20 00 01 2C 2B D3 30 41 +q +""" + +#cpu types for "change baudrate" +#use strings as ID so that they can be used in outputs too +F1x = "F1x family" +F4x = "F4x family" + +#known device list +deviceids = { + 0xf149: F1x, + 0xf16c: F1x, #for telosb + 0xf112: F1x, + 0xf413: F4x, + 0xf123: F1x, + 0xf449: F4x, + 0x1232: F1x, +} + +class BSLException(Exception): + pass + +class LowLevel: + "lowlevel communication" + #Constants + MODE_SSP = 0 + MODE_BSL = 1 + + BSL_SYNC = 0x80 + BSL_TXPWORD = 0x10 + BSL_TXBLK = 0x12 #Transmit block to boot loader + BSL_RXBLK = 0x14 #Receive block from boot loader + BSL_ERASE = 0x16 #Erase one segment + BSL_MERAS = 0x18 #Erase complete FLASH memory + BSL_CHANGEBAUD = 0x20 #Change baudrate + BSL_LOADPC = 0x1A #Load PC and start execution + BSL_TXVERSION = 0x1E #Get BSL version + + #Upper limit of address range that might be modified by + #"BSL checksum bug". + BSL_CRITICAL_ADDR = 0x0A00 + + #Header Definitions + CMD_FAILED = 0x70 + DATA_FRAME = 0x80 + DATA_ACK = 0x90 + DATA_NAK = 0xA0 + + QUERY_POLL = 0xB0 + QUERY_RESPONSE = 0x50 + + OPEN_CONNECTION = 0xC0 + ACK_CONNECTION = 0x40 + + DEFAULT_TIMEOUT = 1 + DEFAULT_PROLONG = 10 + MAX_FRAME_SIZE = 256 + MAX_DATA_BYTES = 250 + MAX_DATA_WORDS = 125 + + MAX_FRAME_COUNT = 16 + + #Error messages + ERR_COM = "Unspecific error" + ERR_RX_NAK = "NAK received (wrong password?)" + #ERR_CMD_NOT_COMPLETED = "Command did not send ACK: indicates that it didn't complete correctly" + ERR_CMD_FAILED = "Command failed, is not defined or is not allowed" + ERR_BSL_SYNC = "Bootstrap loader synchronization error" + ERR_FRAME_NUMBER = "Frame sequence number error." + + def calcChecksum(self, data, length): + """Calculates a checksum of "data".""" + checksum = 0 + + for i in range(length/2): + checksum = checksum ^ (ord(data[i*2]) | (ord(data[i*2+1]) << 8)) #xor-ing + return 0xffff & (checksum ^ 0xffff) #inverting + + def __init__(self, aTimeout = None, aProlongFactor = None): + """init bsl object, don't connect yet""" + if aTimeout is None: + self.timeout = self.DEFAULT_TIMEOUT + else: + self.timeout = aTimeout + if aProlongFactor is None: + self.prolongFactor = self.DEFAULT_PROLONG + else: + self.prolongFactor = aProlongFactor + + #flags for inverted use of control pins + #used for some hardware + self.invertRST = 0 + self.invertTEST = 0 + self.swapRSTTEST = 0 + self.telosLatch = 0 + self.telosI2C = 0 + + self.protocolMode = self.MODE_BSL + self.BSLMemAccessWarning = 0 #Default: no warning. + self.slowmode = 0 + + def comInit(self, port): + """Tries to open the serial port given and + initialises the port and variables. + The timeout and the number of allowed errors is multiplied by + 'aProlongFactor' after transmission of a command to give + plenty of time to the micro controller to finish the command. + Returns zero if the function is successful.""" + if DEBUG > 1: sys.stderr.write("* comInit()\n") + self.seqNo = 0 + self.reqNo = 0 + self.rxPtr = 0 + self.txPtr = 0 + # Startup-Baudrate: 9600,8,E,1, 1s timeout + self.serialport = serial.Serial( + port, + 9600, + parity = serial.PARITY_EVEN, + timeout = self.timeout + ) + if DEBUG: sys.stderr.write("using serial port %r\n" % self.serialport.portstr) + self.SetRSTpin() #enable power + self.SetTESTpin() #enable power + self.serialport.flushInput() + self.serialport.flushOutput() + + def comDone(self): + """Closes the used serial port. + This function must be called at the end of a program, + otherwise the serial port might not be released and can not be + used in other programs. + Returns zero if the function is successful.""" + if DEBUG > 1: sys.stderr.write("* comDone()") + self.SetRSTpin(1) #disable power + self.SetTESTpin(0) #disable power + self.serialport.close() + + def comRxHeader(self): + """receive header and split data""" + if DEBUG > 1: sys.stderr.write("* comRxHeader()\n") + + hdr = self.serialport.read(1) + if not hdr: raise BSLException("Timeout") + rxHeader = ord(hdr) & 0xf0; + rxNum = ord(hdr) & 0x0f; + + if self.protocolMode == self.MODE_BSL: + self.reqNo = 0 + self.seqNo = 0 + rxNum = 0 + if DEBUG > 1: sys.stderr.write("* comRxHeader() OK\n") + return rxHeader, rxNum + + def comRxFrame(self, rxNum): + if DEBUG > 1: sys.stderr.write("* comRxFrame()\n") + rxFrame = chr(self.DATA_FRAME | rxNum) + + if DEBUG > 2: sys.stderr.write(" comRxFrame() header...\n") + rxFramedata = self.serialport.read(3) + if len(rxFramedata) != 3: raise BSLException("Timeout") + rxFrame = rxFrame + rxFramedata + + if DEBUG > 3: sys.stderr.write(" comRxFrame() check header...\n") + if rxFrame[1] == chr(0) and rxFrame[2] == rxFrame[3]: #Add. header info. correct? + rxLengthCRC = ord(rxFrame[2]) + 2 #Add CRC-Bytes to length + if DEBUG > 2: sys.stderr.write(" comRxFrame() receiving data, size: %s\n" % rxLengthCRC) + + rxFramedata = self.serialport.read(rxLengthCRC) + if len(rxFramedata) != rxLengthCRC: raise BSLException("Timeout") + rxFrame = rxFrame + rxFramedata + #Check received frame: + if DEBUG > 3: sys.stderr.write(" comRxFrame() crc check\n") + #rxLength+4: Length with header but w/o CRC: + checksum = self.calcChecksum(rxFrame, ord(rxFrame[2]) + 4) + if rxFrame[ord(rxFrame[2])+4] == chr(0xff & checksum) and \ + rxFrame[ord(rxFrame[2])+5] == chr(0xff & (checksum >> 8)): #Checksum correct? + #Frame received correctly (=> send next frame) + if DEBUG > 2: sys.stderr.write("* comRxFrame() OK\n") + return rxFrame + else: + if DEBUG: sys.stderr.write(" comRxFrame() Checksum wrong\n") + else: + if DEBUG: sys.stderr.write(" comRxFrame() Header corrupt %r" % rxFrame) + raise BSLException(self.ERR_COM) #Frame has errors! + + def comTxHeader(self, txHeader): + """send header""" + if DEBUG > 1: sys.stderr.write("* txHeader()\n") + self.serialport.write(txHeader) + + def comTxRx(self, cmd, dataOut, length): + """Sends the command cmd with the data given in dataOut to the + microcontroller and expects either an acknowledge or a frame + with result from the microcontroller. The results are stored + in dataIn (if not a NULL pointer is passed). + In this routine all the necessary protocol stuff is handled. + Returns zero if the function was successful.""" + if DEBUG > 1: sys.stderr.write("* comTxRx()\n") + txFrame = [] + rxHeader = 0 + rxNum = 0 + + dataOut = list(dataOut) #convert to a list for simpler data fill in + #Transmitting part ---------------------------------------- + #Prepare data for transmit + if (length % 2) != 0: + #/* Fill with one byte to have even number of bytes to send */ + if self.protocolMode == self.MODE_BSL: + dataOut.append(0xFF) #fill with 0xFF + else: + dataOut.append(0) #fill with zero + + txFrame = "%c%c%c%c" % (self.DATA_FRAME | self.seqNo, cmd, len(dataOut), len(dataOut)) + + self.reqNo = (self.seqNo + 1) % self.MAX_FRAME_COUNT + + txFrame = txFrame + string.join(dataOut,'') + checksum = self.calcChecksum(txFrame, length + 4) + txFrame = txFrame + chr(checksum & 0xff) + txFrame = txFrame + chr((checksum >> 8) & 0xff) + + accessAddr = (0x0212 + (checksum^0xffff)) & 0xfffe #0x0212: Address of wCHKSUM + if self.BSLMemAccessWarning and accessAddr < self.BSL_CRITICAL_ADDR: + sys.stderr.write("WARNING: This command might change data at address %04x or %04x!\n" % (accessAddr, accessAddr + 1)) + + self.serialport.flushInput() #clear receiving queue + #TODO: Check after each transmitted character, + #TODO: if microcontroller did send a character (probably a NAK!). + for c in txFrame: + self.serialport.write(c) + if DEBUG > 3: sys.stderr.write("\ttx %02x" % ord(c)) + #if self.serialport.inWaiting(): break #abort when BSL replies, probably NAK + else: + if DEBUG > 1: sys.stderr.write( " comTxRx() transmit OK\n") + + #Receiving part ------------------------------------------- + rxHeader, rxNum = self.comRxHeader() #receive header + if DEBUG > 1: sys.stderr.write(" comTxRx() rxHeader=0x%02x, rxNum=%d, seqNo=%d, reqNo=%s\n" % (rxHeader, rxNum, self.seqNo, self.reqNo)) + if rxHeader == self.DATA_ACK: #acknowledge/OK + if DEBUG > 2: sys.stderr.write(" comTxRx() DATA_ACK\n") + if rxNum == self.reqNo: + self.seqNo = self.reqNo + if DEBUG > 2: sys.stderr.write("* comTxRx() DATA_ACK OK\n") + return #Acknowledge received correctly => next frame + raise BSLException(self.ERR_FRAME_NUMBER) + elif rxHeader == self.DATA_NAK: #not acknowledge/error + if DEBUG > 2: sys.stderr.write("* comTxRx() DATA_NAK\n") + raise BSLException(self.ERR_RX_NAK) + elif rxHeader == self.DATA_FRAME: #receive data + if DEBUG > 2: sys.stderr.write("* comTxRx() DATA_FRAME\n") + if rxNum == self.reqNo: + rxFrame = self.comRxFrame(rxNum) + return rxFrame + raise BSLException(self.ERR_FRAME_NUMBER) + elif rxHeader == self.CMD_FAILED: #Frame ok, but command failed. + if DEBUG > 2: sys.stderr.write("* comTxRx() CMD_FAILED\n") + raise BSLException(self.ERR_CMD_FAILED) + + raise BSLException("Unknown header 0x%02x\nAre you downloading to RAM into an old device that requires the patch? Try option -U" % rxHeader) + + def SetDTR(self, level, invert): + """Controls DTR pin (0: GND; 1: VCC; unless inverted flag is set)""" + if invert: + self.serialport.setDTR(not level) + else: + self.serialport.setDTR(level) + if self.slowmode: + time.sleep(0.040) + + def SetRTS(self, level, invert): + """Controls RTS pin (0: GND; 1: VCC; unless inverted flag is set)""" + if invert: + self.serialport.setRTS(not level) + else: + self.serialport.setRTS(level) + if self.slowmode: + time.sleep(0.040) + + def SetRSTpin(self, level=1): + """Controls RST/NMI pin (0: GND; 1: VCC; unless inverted flag is set)""" + if self.swapRSTTEST: + self.SetRTS(level, self.invertRST) + else: + self.SetDTR(level, self.invertRST) + + def SetTESTpin(self, level=1): + """Controls TEST pin (inverted on board: 0: VCC; 1: GND; unless inverted flag is set)""" + if self.swapRSTTEST: + self.SetDTR(level, self.invertTEST) + else: + self.SetRTS(level, self.invertTEST) + + def telosSetSCL(self, level): + self.serialport.setRTS(not level) + + def telosSetSDA(self, level): + self.serialport.setDTR(not level) + + def telosI2CStart(self): + self.telosSetSDA(1) + self.telosSetSCL(1) + self.telosSetSDA(0) + + def telosI2CStop(self): + self.telosSetSDA(0) + self.telosSetSCL(1) + self.telosSetSDA(1) + + def telosI2CWriteBit(self, bit): + self.telosSetSCL(0) + self.telosSetSDA(bit) + time.sleep(2e-6) + self.telosSetSCL(1) + time.sleep(1e-6) + self.telosSetSCL(0) + + def telosI2CWriteByte(self, byte): + self.telosI2CWriteBit( byte & 0x80 ); + self.telosI2CWriteBit( byte & 0x40 ); + self.telosI2CWriteBit( byte & 0x20 ); + self.telosI2CWriteBit( byte & 0x10 ); + self.telosI2CWriteBit( byte & 0x08 ); + self.telosI2CWriteBit( byte & 0x04 ); + self.telosI2CWriteBit( byte & 0x02 ); + self.telosI2CWriteBit( byte & 0x01 ); + self.telosI2CWriteBit( 0 ); # "acknowledge" + + def telosI2CWriteCmd(self, addr, cmdbyte): + self.telosI2CStart() + self.telosI2CWriteByte( 0x90 | (addr << 1) ) + self.telosI2CWriteByte( cmdbyte ) + self.telosI2CStop() + + def telosBReset(self,invokeBSL=0): + + # "BSL entry sequence at dedicated JTAG pins" + # rst !s0: 0 0 0 0 1 1 + # tck !s1: 1 0 1 0 0 1 + # s0|s1: 1 3 1 3 2 0 + + # "BSL entry sequence at shared JTAG pins" + # rst !s0: 0 0 0 0 1 1 + # tck !s1: 0 1 0 1 1 0 + # s0|s1: 3 1 3 1 0 2 + + if invokeBSL: + self.telosI2CWriteCmd(0,1) + self.telosI2CWriteCmd(0,3) + self.telosI2CWriteCmd(0,1) + self.telosI2CWriteCmd(0,3) + self.telosI2CWriteCmd(0,2) + self.telosI2CWriteCmd(0,0) + else: + self.telosI2CWriteCmd(0,3) + self.telosI2CWriteCmd(0,2) + self.telosI2CWriteCmd(0,0) + time.sleep(0.250) #give MSP430's oscillator time to stabilize + self.serialport.flushInput() #clear buffers + + def bslReset(self, invokeBSL=0): + """Applies BSL entry sequence on RST/NMI and TEST/VPP pins + Parameters: + invokeBSL = 1: complete sequence + invokeBSL = 0: only RST/NMI pin accessed + + RST is inverted twice on boot loader hardware + TEST is inverted (only once) + Need positive voltage on DTR, RTS for power-supply of hardware""" + if self.telosI2C: + self.telosBReset(invokeBSL) + return + + if DEBUG > 1: sys.stderr.write("* bslReset(invokeBSL=%s)\n" % invokeBSL) + self.SetRSTpin(1) #power suply + self.SetTESTpin(1) #power suply + time.sleep(0.250) #charge capacitor on boot loader hardware + + if self.telosLatch: + self.SetTESTpin(0) + self.SetRSTpin(0) + self.SetTESTpin(1) + + self.SetRSTpin(0) #RST pin: GND + if invokeBSL: + self.SetTESTpin(1) #TEST pin: GND + self.SetTESTpin(0) #TEST pin: Vcc + self.SetTESTpin(1) #TEST pin: GND + self.SetTESTpin(0) #TEST pin: Vcc + self.SetRSTpin (1) #RST pin: Vcc + self.SetTESTpin(1) #TEST pin: GND + else: + self.SetRSTpin(1) #RST pin: Vcc + time.sleep(0.250) #give MSP430's oscillator time to stabilize + + self.serialport.flushInput() #clear buffers + + def bslSync(self,wait=0): + """Transmits Synchronization character and expects to receive Acknowledge character + if wait is 0 it must work the first time. otherwise if wait is 1 + it is retried (forever). + """ + loopcnt = 5 #Max. tries to get synchronization + + if DEBUG > 1: sys.stderr.write("* bslSync(wait=%d)\n" % wait) + while wait or loopcnt: + loopcnt = loopcnt - 1 #count down tries + self.serialport.flushInput() #clear input, in case a prog is running + + self.serialport.write(chr(self.BSL_SYNC)) #Send synchronization byte + c = self.serialport.read(1) #read answer + if c == chr(self.DATA_ACK): #ACk + if DEBUG > 1: sys.stderr.write(" bslSync() OK\n") + return #Sync. successful + elif not c: #timeout + if loopcnt > 4: + if DEBUG > 1: + sys.stderr.write(" bslSync() timeout, retry ...\n") + elif loopcnt == 4: + #nmi may have caused the first reset to be ignored, try again + self.bslReset(0) + self.bslReset(1) + elif loopcnt > 0: + if DEBUG > 1: + sys.stderr.write(" bslSync() timeout, retry ...\n") + else : + if DEBUG > 1: + sys.stderr.write(" bslSync() timeout\n") + else: #garbage + if DEBUG > 1: sys.stderr.write(" bslSync() failed (0x%02x), retry ...\n" % ord(c)) + + raise BSLException(self.ERR_BSL_SYNC) #Sync. failed + + def bslTxRx(self, cmd, addr, length = 0, blkout = None, wait=0): + """Transmits a command (cmd) with its parameters: + start-address (addr), length (len) and additional + data (blkout) to boot loader. + wait specified if the bsl sync should be tried once or + repeated, forever + Parameters return by boot loader are passed via blkin. + """ + if DEBUG > 1: sys.stderr.write("* bslTxRx()\n") + + if cmd == self.BSL_TXBLK: + #Align to even start address + if (addr % 2) != 0: + addr = addr - 1 #Decrement address and + blkout = chr(0xFF) + blkOut #fill first byte of blkout with 0xFF + length = length + 1 + #Make sure that len is even + if (length % 2) != 0: + blkout = blkout + chr(0xFF) #Inc. len and fill last byte of blkout with 0xFF + length = length + 1 + + elif cmd == self.BSL_RXBLK: + #Align to even start address + if (addr % 2) != 0: + addr = addr - 1 #Decrement address but + length = length + 1 #request an additional byte + #Make sure that len is even + if (length % 2) != 0: + length = length + 1 + + #if cmd == self.BSL_TXBLK or cmd == self.BSL_TXPWORD: + # length = len + 4 + + #Add necessary information data to frame + dataOut = struct.pack("= 1: + #Read one line + l = file.readline() + if not l: break #EOF + l = l.strip() + if l[0] == 'q': break + elif l[0] == '@': #if @ => new address => send frame and set new addr. + #create a new segment + if segmentdata: + self.segments.append( Segment(startAddr, string.join(segmentdata,'')) ) + startAddr = int(l[1:],16) + segmentdata = [] + else: + for i in string.split(l): + segmentdata.append(chr(int(i,16))) + if segmentdata: + self.segments.append( Segment(startAddr, string.join(segmentdata,'')) ) + + def loadELF(self, file): + """load data from a (opened) file in ELF object format. + File must be seekable""" + import elf + obj = elf.ELFObject() + obj.fromFile(file) + if obj.e_type != elf.ELFObject.ET_EXEC: + raise Exception("No executable") + for section in obj.getSections(): + if DEBUG: + sys.stderr.write("ELF section %s at 0x%04x %d bytes\n" % (section.name, section.lma, len(section.data))) + if len(section.data): + self.segments.append( Segment(section.lma, section.data) ) + + def loadFile(self, filename): + """fill memory with the contents of a file. file type is determined from extension""" + #TODO: do a contents based detection + if filename[-4:].lower() == '.txt': + self.loadTIText(open(filename, "rb")) + elif filename[-4:].lower() in ('.a43', '.hex'): + self.loadIHex(open(filename, "rb")) + else: + self.loadELF(open(filename, "rb")) + + def getMemrange(self, fromadr, toadr): + """get a range of bytes from the memory. unavailable values are filled with 0xff.""" + res = '' + toadr = toadr + 1 #python indxes are excluding end, so include it + while fromadr < toadr: + #print "fromto: %04x %04x" % (fromadr, toadr) + for seg in self.segments: + #print seg + segend = seg.startaddress + len(seg.data) + if seg.startaddress <= fromadr and fromadr < segend: + #print "startok 0x%04x %d" % (seg.startaddress, len(seg.data)) + #print ("0x%04x "*3) % (segend, fromadr, toadr) + if toadr > segend: #not all data in segment + #print "out of segment" + catchlength = segend-fromadr + else: + catchlength = toadr-fromadr + #print toadr-fromadr + #print catchlength + res = res + seg.data[fromadr-seg.startaddress : fromadr-seg.startaddress+catchlength] + fromadr = fromadr + catchlength #adjust start + if len(res) >= toadr-fromadr: + break#return res + else: + res = res + chr(255) + fromadr = fromadr + 1 #adjust start + #print "fill FF" + #print "res: %r" % res + return res + + +class BootStrapLoader(LowLevel): + """higher level Bootstrap Loader functions.""" + + ERR_VERIFY_FAILED = "Error: verification failed" + ERR_ERASE_CHECK_FAILED = "Error: erase check failed" + + ACTION_PROGRAM = 0x01 #Mask: program data + ACTION_VERIFY = 0x02 #Mask: verify data + ACTION_ERASE_CHECK = 0x04 #Mask: erase check + + #Max. bytes sent within one frame if parsing a TI TXT file. + #( >= 16 and == n*16 and <= MAX_DATA_BYTES!) + MAXDATA = 240-16 + + + def __init__(self, *args, **kargs): + LowLevel.__init__(self, *args, **kargs) + self.byteCtr = 0 + self.meraseCycles = 1 + self.patchRequired = 0 + self.patchLoaded = 0 + self.bslVer = 0 + self.passwd = None + self.data = None + self.maxData = self.MAXDATA + self.cpu = None + + + def preparePatch(self): + """prepare to download patch""" + if DEBUG > 1: sys.stderr.write("* preparePatch()\n") + + if self.patchLoaded: + #Load PC with 0x0220. + #This will invoke the patched bootstrap loader subroutines. + self.bslTxRx(self.BSL_LOADPC, #Command: Load PC + 0x0220) #Address to load into PC + self.BSLMemAccessWarning = 0 #Error is removed within workaround code + return + + def postPatch(self): + """setup after the patch is loaded""" + if DEBUG > 1: sys.stderr.write("* postPatch()\n") + if self.patchLoaded: + self.BSLMemAccessWarning = 1 #Turn warning back on. + + + def verifyBlk(self, addr, blkout, action): + """verify memory against data or 0xff""" + if DEBUG > 1: sys.stderr.write("* verifyBlk()\n") + + if action & self.ACTION_VERIFY or action & self.ACTION_ERASE_CHECK: + if DEBUG: sys.stderr.write(" Check starting at 0x%04x, %d bytes ... \n" % (addr, len(blkout))) + + self.preparePatch() + blkin = self.bslTxRx(self.BSL_RXBLK, addr, len(blkout)) + self.postPatch() + + for i in range(len(blkout)): + if action & self.ACTION_VERIFY: + #Compare data in blkout and blkin + if blkin[i] != blkout[i]: + sys.stderr.write("Verification failed at 0x%04x (0x%02x, 0x%02x)\n" % (addr+i, ord(blkin[i]), ord(blkout[i]))) + sys.stderr.flush() + raise BSLException(self.ERR_VERIFY_FAILED) #Verify failed! + continue + elif action & self.ACTION_ERASE_CHECK: + #Compare data in blkin with erase pattern + if blkin[i] != chr(0xff): + sys.stderr.write("Erase Check failed at 0x%04x (0x%02x)\n" % (addr+i, ord(blkin[i]))) + sys.stderr.flush() + raise BSLException(self.ERR_ERASE_CHECK_FAILED) #Erase Check failed! + continue + + def programBlk(self, addr, blkout, action): + """programm a memory block""" + if DEBUG > 1: sys.stderr.write("* programBlk()\n") + + #Check, if specified range is erased + self.verifyBlk(addr, blkout, action & self.ACTION_ERASE_CHECK) + + if action & self.ACTION_PROGRAM: + if DEBUG: sys.stderr.write(" Program starting at 0x%04x, %i bytes ...\n" % (addr, len(blkout))) + self.preparePatch() + #Program block + self.bslTxRx(self.BSL_TXBLK, addr, len(blkout), blkout) + self.postPatch() + + #Verify block + self.verifyBlk(addr, blkout, action & self.ACTION_VERIFY) + + #segments: + #list of tuples or lists: + #segements = [ (addr1, [d0,d1,d2,...]), (addr2, [e0,e1,e2,...])] + def programData(self, segments, action): + """programm or verify data""" + if DEBUG > 1: sys.stderr.write("* programData()\n") + for seg in segments: + currentAddr = seg.startaddress + pstart = 0 + while pstart len(seg.data): + length = len(seg.data) - pstart + self.programBlk(currentAddr, seg.data[pstart:pstart+length], action) + pstart = pstart + length + currentAddr = currentAddr + length + self.byteCtr = self.byteCtr + length #total sum + + def uploadData(self, startaddress, size, wait=0): + """upload a datablock""" + if DEBUG > 1: sys.stderr.write("* uploadData()\n") + data = '' + pstart = 0 + while pstart size: + length = size - pstart + data = data + self.bslTxRx(self.BSL_RXBLK, + pstart+startaddress, + length, + wait=wait)[:-2] #cut away checksum + pstart = pstart + length + return data + + def txPasswd(self, passwd=None, wait=0): + """transmit password, default if None is given.""" + if DEBUG > 1: sys.stderr.write("* txPassword(%r)\n" % passwd) + if passwd is None: + #Send "standard" password to get access to protected functions. + sys.stderr.write("Transmit default password ...\n") + sys.stderr.flush() + #Flash is completely erased, the contents of all Flash cells is 0xff + passwd = chr(0xff)*32 + else: + #sanity check of password + if len(passwd) != 32: + raise ValueError, "password has wrong length (%d)\n" % len(passwd) + sys.stderr.write('Transmit password ...\n') + sys.stderr.flush() + #send the password + self.bslTxRx(self.BSL_TXPWORD, #Command: Transmit Password + 0xffe0, #Address of interupt vectors + 0x0020, #Number of bytes + passwd, #password + wait=wait) #if wait is 1, try to sync forever + + + #----------------------------------------------------------------- + + def actionMassErase(self): + """Erase the flash memory completely (with mass erase command)""" + sys.stderr.write("Mass Erase...\n") + sys.stderr.flush() + self.bslReset(1) #Invoke the boot loader. + for i in range(self.meraseCycles): + if i == 1: sys.stderr.write("Additional Mass Erase Cycles...\n") + self.bslTxRx(self.BSL_MERAS, #Command: Mass Erase + 0xff00, #Any address within flash memory. + 0xa506) #Required setting for mass erase! + self.passwd = None #No password file required! + #print "Mass Erase complete" + #Transmit password to get access to protected BSL functions. + self.txPasswd() + + def actionStartBSL(self, usepatch=1, adjsp=1, replacementBSL=None, forceBSL=0, mayuseBSL=0, speed=None, bslreset=1): + """start BSL, download patch if desired and needed, adjust SP if desired""" + sys.stderr.write("Invoking BSL...\n") + sys.stderr.flush() + if bslreset: + self.bslReset(1) #Invoke the boot loader. + self.txPasswd(self.passwd) #transmit password + + #Read actual bootstrap loader version. + #sys.stderr.write("Reading BSL version ...\n") + blkin = self.bslTxRx(self.BSL_RXBLK, #Command: Read/Receive Block + 0x0ff0, #Start address + 16) #No. of bytes to read + dev_id, bslVerHi, bslVerLo = struct.unpack(">H8xBB4x", blkin[:-2]) #cut away checksum and extract data + + if self.cpu is None: #cpy type forced? + if deviceids.has_key(dev_id): + self.cpu = deviceids[dev_id] #try to autodectect CPU type + if DEBUG: + sys.stderr.write("Autodetect successful: %04x -> %s\n" % (dev_id, self.cpu)) + else: + sys.stderr.write("Autodetect failed! Unkown ID: %04x. Trying to continue anyway.\n" % dev_id) + self.cpu = F1x #assume something and try anyway.. + + sys.stderr.write("Current bootstrap loader version: %x.%x (Device ID: %04x)\n" % (bslVerHi, bslVerLo, dev_id)) + sys.stderr.flush() + self.bslVer = (bslVerHi << 8) | bslVerLo + + if self.bslVer <= 0x0110: #check if patch is needed + self.BSLMemAccessWarning = 1 + else: + self.BSLMemAccessWarning = 0 #Fixed in newer versions of BSL. + + if self.bslVer <= 0x0130 and adjsp: + #only do this on BSL where it's needed to prevent + #malfunction with F4xx devices/ newer ROM-BSLs + + #Execute function within bootstrap loader + #to prepare stack pointer for the following patch. + #This function will lock the protected functions again. + sys.stderr.write("Adjust SP. Load PC with 0x0C22 ...\n") + self.bslTxRx(self.BSL_LOADPC, #Command: Load PC + 0x0C22) #Address to load into PC + #Re-send password to re-gain access to protected functions. + self.txPasswd(self.passwd) + + #get internal BSL replacement if needed or forced by the user + #required if speed is set but an old BSL is in the device + #if a BSL is given by the user, that one is used and not the internal one + if ((mayuseBSL and speed and self.bslVer < 0x0150) or forceBSL) and replacementBSL is None: + replacementBSL = Memory() #File to program + if self.cpu == F4x: + if DEBUG: + sys.stderr.write("Using built in BSL replacement for F4x devices\n") + sys.stderr.flush() + replacementBSL.loadTIText(cStringIO.StringIO(F4X_BSL)) #parse embedded BSL + else: + if DEBUG: + sys.stderr.write("Using built in BSL replacement for F1x devices\n") + sys.stderr.flush() + replacementBSL.loadTIText(cStringIO.StringIO(F1X_BSL)) #parse embedded BSL + + #now download the new BSL, if allowed and needed (version lower than the + #the replacement) or forced + if replacementBSL is not None: + self.actionDownloadBSL(replacementBSL) + + #debug message with the real BSL version in use (may have changed after replacement BSL) + if DEBUG: + sys.stderr.write("Current bootstrap loader version: 0x%04x\n" % (self.bslVer,)) + sys.stderr.flush() + + #now apply workarounds or patches if BSL in use requires that + if self.bslVer <= 0x0110: #check if patch is needed + if usepatch: #test if patch is desired + sys.stderr.write("Patch for flash programming required!\n") + self.patchRequired = 1 + + sys.stderr.write("Load and verify patch ...\n") + sys.stderr.flush() + #Programming and verification is done in one pass. + #The patch file is only read and parsed once. + segments = Memory() #data to program + segments.loadTIText(cStringIO.StringIO(PATCH)) #parse embedded patch + #program patch + self.programData(segments, self.ACTION_PROGRAM | self.ACTION_VERIFY) + self.patchLoaded = 1 + else: + if DEBUG: + sys.stderr.write("Device needs patch, but not applied (usepatch is false).\n") #message if not patched + + #should the baudrate be changed? + if speed is not None: + self.actionChangeBaudrate(speed) #change baudrate + + def actionDownloadBSL(self, bslsegments): + sys.stderr.write("Load new BSL into RAM...\n") + sys.stderr.flush() + self.programData(bslsegments, self.ACTION_PROGRAM) + sys.stderr.write("Verify new BSL...\n") + sys.stderr.flush() + self.programData(bslsegments, self.ACTION_VERIFY) #File to verify + + #Read startvector of bootstrap loader + #blkin = self.bslTxRx(self.BSL_RXBLK, 0x0300, 2) + #blkin = self.bslTxRx(self.BSL_RXBLK, 0x0220, 2) + blkin = self.bslTxRx(self.BSL_RXBLK, bslsegments[0].startaddress, 2) + startaddr = struct.unpack("=1.6, downloadable >=1.5)""" + try: + baudconfigs = self.bauratetable[self.cpu] + except KeyError: + raise ValueError, "unknown CPU type %s, can't switch baudrate" % self.cpu + try: + a,l = baudconfigs[baudrate] + except KeyError: + raise ValueError, "baudrate not valid. valid values are %r" % baudconfigs.keys() + + sys.stderr.write("Changing baudrate to %d ...\n" % baudrate) + sys.stderr.flush() + self.bslTxRx(self.BSL_CHANGEBAUD, #Command: change baudrate + a, l) #args are coded in adr and len + time.sleep(0.010) #recomended delay + self.serialport.setBaudrate(baudrate) + + def actionReadBSLVersion(self): + """informational output of BSL version number. + (newer MSP430-BSLs only)""" + ans = self.bslTxRx(self.BSL_TXVERSION, 0) #Command: receive version info + #the following values are in big endian style!!! + family_type, bsl_version = struct.unpack(">H8xH4x", ans[:-2]) #cut away checksum and extract data + print "Device Type: 0x%04x\nBSL version: 0x%04x\n" % (family_type, bsl_version) + + +def usage(): + """print some help message""" + sys.stderr.write(""" +USAGE: %s [options] [file] +Version: %s + +If "-" is specified as file the data is read from the stdinput. +A file ending with ".txt" is considered to be in TIText format, +'.a43' and '.hex' as IntelHex and all other filenames are +considered as ELF files. + +General options: + -h, --help Show this help screen. + -c, --comport=port Specify the communication port to be used. + (Default is 0) + 0->COM1 / ttyS0 + 1->COM2 / ttyS1 + etc. + -P, --password=file Specify a file with the interrupt vectors that + are used as password. This can be any file that + has previously been used to program the device. + (e.g. -P INT_VECT.TXT). + -f, --framesize=num Max. number of data bytes within one transmitted + frame (16 to 240 in steps of 16) (e.g. -f 240). + -m, --erasecycles=num Number of mass erase cycles (default is 1). Some + old F149 devices need additional erase cycles. + On newer devices it is no longer needed. (e.g. for + an old F149: -m20) + -U, --unpatched Do not download the BSL patch, even when it is + needed. This is used when a program is downloaded + into RAM and executed from there (and where flash + programming is not needed.) + -D, --debug Increase level of debug messages. This won't be + very useful for the average user... + -I, --intelhex Force fileformat to IntelHex + -T, --titext Force fileformat to be TIText + -N, --notimeout Don't use timeout on serial port (use with care) + -B, --bsl=bsl.txt Load and use new BSL from the TI Text file + -S, --speed=baud Reconfigure speed, only possible with newer + MSP403-BSL versions (>1.5, read slaa089a.pdf for + details). If the --bsl option is not used, an + internal BSL replacement will be loaded. + Needs a target with at least 2kB RAM! + Possible values are 9600, 19200, 38400 + (default 9600) + -1, --f1x Specify CPU family, in case autodetect fails + -4, --f4x Specify CPU family, in case autodetect fails + --F1x and --f2x are only needed when the "change + baudrate" feature is used and the autodetect feature + fails. If the device ID that is uploaded is known, it + has precedence to the command line option. + --invert-reset Invert signal on RST pin (used for some BSL hardware) + --invert-test Invert signal on TEST/TCK pin (used for some BSL + hardware) + --swap-reset-test Swap the RST and TEST pins (used for some BSL hardware) + --telos-latch Special twiddle in BSL reset for Telos hardware + --telos-i2c DTR/RTS map via an I2C switch to TCK/RST in Telos Rev.B + --telos Implies options --invert-reset, --invert-test, + --swap-reset-test, and --telos-latch + --telosb Implies options --swap-reset-test, --telos-i2c, + --no-BSL-download, and --speed=38400 + --tmote Identical operation to --telosb + --no-BSL-download Do not download replacement BSL (disable automatic) + --force-BSL-download Download replacement BSL even if not needed (the one + in the device would have the required features) + --slow Add delays when operating the conrol pins. Useful if + the pins/circuit has high capacitance. + +Program Flow Specifiers: + -e, --masserase Mass Erase (clear all flash memory) + -E, --erasecheck Erase Check by file + -p, --program Program file + -v, --verify Verify by file + +The order of the above options matters! The table is ordered by normal +execution order. For the options "Epv" a file must be specified. +Program flow specifiers default to "pvr" if a file is given. +Don't forget to specify "e" or "eE" when programming flash! + +Data retreiving: + -u, --upload=addr Upload a datablock (see also: -s). + -s, --size=num Size of the data block do upload. (Default is 2) + -x, --hex Show a hexadecimal display of the uploaded data. + (Default) + -b, --bin Get binary uploaded data. This can be used + to redirect the output into a file. + +Do before exit: + -g, --go=address Start programm execution at specified address. + This implies option --wait. + -r, --reset Reset connected MSP430. Starts application. + This is a normal device reset and will start + the programm that is specified in the reset + vector. (see also -g) + -w, --wait Wait for before closing serial port. + +If it says "NAK received" it's probably because you specified no or a +wrong password. +""" % (sys.argv[0], VERSION)) + +#add some arguments to a function, but don't call it yet, instead return +#a wrapper object for later invocation +class curry: + """create a callable with some arguments specified in advance""" + def __init__(self, fun, *args, **kwargs): + self.fun = fun + self.pending = args[:] + self.kwargs = kwargs.copy() + + def __call__(self, *args, **kwargs): + if kwargs and self.kwargs: + kw = self.kwargs.copy() + kw.update(kwargs) + else: + kw = kwargs or self.kwargs + return apply(self.fun, self.pending + args, kw) + + def __repr__(self): + #first try if it a function + try: + return "curry(%s, %r, %r)" % (self.fun.func_name, self.pending, self.kwargs) + except AttributeError: + #fallback for callable classes + return "curry(%s, %r, %r)" % (self.fun, self.pending, self.kwargs) + +def hexify(line, bytes, width=16): + return '%04x %s%s %s' % ( + line, + ('%02x '*len(bytes)) % tuple(bytes), + ' '* (width-len(bytes)), + ('%c'*len(bytes)) % tuple(map(lambda x: (x>=32 and x<127) and x or ord('.'), bytes)) + ) + +#Main: +def main(): + global DEBUG + import getopt + filetype = None + filename = None + comPort = 0 #Default setting. + speed = None + unpatched = 0 + reset = 0 + wait = 0 #wait at the end + goaddr = None + bsl = BootStrapLoader() + toinit = [] + todo = [] + startaddr = None + size = 2 + hexoutput = 1 + notimeout = 0 + bslrepl = None + mayuseBSL = 1 + forceBSL = 0 + + sys.stderr.write("MSP430 Bootstrap Loader Version: %s\n" % VERSION) + + try: + opts, args = getopt.getopt(sys.argv[1:], + "hc:P:wf:m:eEpvrg:UDudsxbITNB:S:V14", + ["help", "comport=", "password=", "wait", "framesize=", + "erasecycles=", "masserase", "erasecheck", "program", + "verify", "reset", "go=", "unpatched", "debug", + "upload=", "download=", "size=", "hex", "bin", + "intelhex", "titext", "notimeout", "bsl=", "speed=", + "bslversion", "f1x", "f4x", "invert-reset", "invert-test", + "swap-reset-test", "telos-latch", "telos-i2c", "telos", "telosb", + "tmote","no-BSL-download", "force-BSL-download", "slow"] + ) + except getopt.GetoptError: + # print help information and exit: + usage() + sys.exit(2) + + for o, a in opts: + if o in ("-h", "--help"): + usage() + sys.exit() + elif o in ("-c", "--comport"): + try: + comPort = int(a) #try to convert decimal + except ValueError: + comPort = a #take the string and let serial driver decide + elif o in ("-P", "--password"): + #extract password from file + bsl.passwd = Memory(a).getMemrange(0xffe0, 0xffff) + elif o in ("-w", "--wait"): + wait = 1 + elif o in ("-f", "--framesize"): + try: + maxData = int(a) #try to convert decimal + except ValueError: + sys.stderr.write("framesize must be a valid number\n") + sys.exit(2) + #Make sure that conditions for maxData are met: + #( >= 16 and == n*16 and <= MAX_DATA_BYTES!) + if maxData > BootStrapLoader.MAX_DATA_BYTES: + maxData = BootStrapLoader.MAX_DATA_BYTES + elif maxData < 16: + maxData = 16 + bsl.maxData = maxData - (maxData % 16) + sys.stderr.write( "Max. number of data bytes within one frame set to %i.\n" % maxData) + elif o in ("-m", "--erasecycles"): + try: + meraseCycles = int(a) #try to convert decimal + except ValueError: + sys.stderr.write("erasecycles must be a valid number\n") + sys.exit(2) + #sanity check of value + if meraseCycles < 1: + sys.stderr.write("erasecycles must be a positive number\n") + sys.exit(2) + if meraseCycles > 20: + sys.stderr.write("warning: erasecycles set to a large number (>20): %d\n" % meraseCycles) + sys.stderr.write( "Number of mass erase cycles set to %i.\n" % meraseCycles) + bsl.meraseCycles = meraseCycles + elif o in ("-e", "--masserase"): + toinit.append(bsl.actionMassErase) #Erase Flash + elif o in ("-E", "--erasecheck"): + toinit.append(bsl.actionEraseCheck) #Erase Check (by file) + elif o in ("-p", "--programm"): + todo.append(bsl.actionProgram) #Program file + elif o in ("-v", "--verify"): + todo.append(bsl.actionVerify) #Verify file + elif o in ("-r", "--reset"): + reset = 1 + elif o in ("-g", "--go"): + try: + goaddr = int(a) #try to convert decimal + except ValueError: + try: + goaddr = int(a[2:],16) #try to convert hex + except ValueError: + sys.stderr.write("go address must be a valid number\n") + sys.exit(2) + wait = 1 + elif o in ("-U", "--unpatched"): + unpatched = 1 + elif o in ("-D", "--debug"): + DEBUG = DEBUG + 1 + elif o in ("-u", "--upload"): + try: + startaddr = int(a) #try to convert decimal + except ValueError: + try: + startaddr = int(a,16) #try to convert hex + except ValueError: + sys.stderr.write("upload address must be a valid number\n") + sys.exit(2) + elif o in ("-s", "--size"): + try: + size = int(a) + except ValueError: + try: + size = int(a,16) + except ValueError: + sys.stderr.write("size must be a valid number\n") + sys.exit(2) + elif o in ("-x", "--hex"): + hexoutput = 1 + elif o in ("-b", "--bin"): + hexoutput = 0 + elif o in ("-I", "--intelhex"): + filetype = 0 + elif o in ("-T", "--titext"): + filetype = 1 + elif o in ("-N", "--notimeout"): + notimeout = 1 + elif o in ("-B", "--bsl"): + bslrepl = Memory() #File to program + bslrepl.loadFile(a) + elif o in ("-V", "--bslversion"): + todo.append(bsl.actionReadBSLVersion) #load replacement BSL as first item + elif o in ("-S", "--speed"): + try: + speed = int(a) #try to convert decimal + except ValueError: + sys.stderr.write("speed must be decimal number\n") + sys.exit(2) + elif o in ("-1", "--f1x"): + bsl.cpu = F1x + elif o in ("-4", "--f4x"): + bsl.cpu = F4x + elif o in ("--invert-reset", ): + bsl.invertRST = 1 + elif o in ("--invert-test", ): + bsl.invertTEST = 1 + elif o in ("--swap-reset-test", ): + bsl.swapRSTTEST = 1 + elif o in ("--telos-latch", ): + bsl.telosLatch = 1 + elif o in ("--telos-i2c", ): + bsl.telosI2C = 1 + elif o in ("--telos", ): + bsl.invertRST = 1 + bsl.invertTEST = 1 + bsl.swapRSTTEST = 1 + bsl.telosLatch = 1 + elif o in ("--telosb", ): + bsl.swapRSTTEST = 1 + bsl.telosI2C = 1 + mayuseBSL = 0 + speed = 38400 + elif o in ("--tmote", ): + bsl.swapRSTTEST = 1 + bsl.telosI2C = 1 + mayuseBSL = 0 + speed = 38400 + elif o in ("--no-BSL-download", ): + mayuseBSL = 0 + elif o in ("--force-BSL-download", ): + forceBSL = 1 + elif o in ("--slow", ): + bsl.slowmode = 1 + + if len(args) == 0: + sys.stderr.write("Use -h for help\n") + elif len(args) == 1: #a filename is given + if not todo: #if there are no actions yet + todo.extend([ #add some useful actions... + bsl.actionProgram, + bsl.actionVerify, + ]) + filename = args[0] + else: #number of args is wrong + usage() + sys.exit(2) + + if DEBUG: #debug infos + sys.stderr.write("Debug level set to %d\n" % DEBUG) + sys.stderr.write("Python version: %s\n" % sys.version) + + #sanity check of options + if notimeout and goaddr is not None and startaddr is not None: + sys.stderr.write("Option --notimeout can not be used together with both --upload and --go\n") + sys.exit(1) + + if notimeout: + sys.stderr.write("Warning: option --notimeout can cause improper function in some cases!\n") + bsl.timeout = 0 + + if goaddr and reset: + sys.stderr.write("Warning: option --reset ignored as --go is specified!\n") + reset = 0 + + if startaddr and reset: + sys.stderr.write("Warning: option --reset ignored as --upload is specified!\n") + reset = 0 + + sys.stderr.flush() + + #prepare data to download + bsl.data = Memory() #prepare downloaded data + if filetype is not None: #if the filetype is given... + if filename is None: + raise ValueError("no filename but filetype specified") + if filename == '-': #get data from stdin + file = sys.stdin + else: + file = open(filename, "rb") #or from a file + if filetype == 0: #select load function + bsl.data.loadIHex(file) #intel hex + elif filetype == 1: + bsl.data.loadTIText(file) #TI's format + else: + raise ValueError("illegal filetype specified") + else: #no filetype given... + if filename == '-': #for stdin: + bsl.data.loadIHex(sys.stdin) #assume intel hex + elif filename: + bsl.data.loadFile(filename) #autodetect otherwise + + if DEBUG > 3: sys.stderr.write("File: %r" % filename) + + bsl.comInit(comPort) #init port + + #initialization list + if toinit: #erase and erase check + if DEBUG: sys.stderr.write("Preparing device ...\n") + #bsl.actionStartBSL(usepatch=0, adjsp=0) #no workarounds needed + #if speed: bsl.actionChangeBaudrate(speed) #change baud rate as fast as possible + for f in toinit: f() + + if todo or goaddr or startaddr: + if DEBUG: sys.stderr.write("Actions ...\n") + #connect to the BSL + bsl.actionStartBSL( + usepatch=not unpatched, + replacementBSL=bslrepl, + forceBSL=forceBSL, + mayuseBSL=mayuseBSL, + speed=speed, + ) + + #work list + if todo: + if DEBUG > 0: #debug + #show a nice list of sheduled actions + sys.stderr.write("TODO list:\n") + for f in todo: + try: + sys.stderr.write(" %s\n" % f.func_name) + except AttributeError: + sys.stderr.write(" %r\n" % f) + for f in todo: f() #work through todo list + + if reset: #reset device first if desired + bsl.actionReset() + + if goaddr is not None: #start user programm at specified address + bsl.actionRun(goaddr) #load PC and execute + + #upload datablock and output + if startaddr is not None: + if goaddr: #if a program was started... + #don't restart BSL but wait for the device to enter it itself + sys.stderr.write("Waiting for device to reconnect for upload: ") + sys.stderr.flush() + bsl.txPasswd(bsl.passwd, wait=1) #synchronize, try forever... + data = bsl.uploadData(startaddr, size) #upload data + else: + data = bsl.uploadData(startaddr, size) #upload data + if hexoutput: #depending on output format + m = 0 + while m < len(data): #print a hex display + print hexify(startaddr+m, map(ord,data[m:m+16])) + m = m + 16 + else: + sys.stdout.write(data) #binary output w/o newline! + wait = 0 #wait makes no sense as after the upload the device is still in BSL + + if wait: #wait at the end if desired + sys.stderr.write("Press ...\n") #display a prompt + sys.stderr.flush() + raw_input() #wait for newline + + bsl.comDone() #Release serial communication port + +if __name__ == '__main__': + try: + main() + except SystemExit: + raise #let pass exit() calls + except KeyboardInterrupt: + if DEBUG: raise #show full trace in debug mode + sys.stderr.write("user abort.\n") #short messy in user mode + sys.exit(1) #set errorlevel for script usage + except Exception, msg: #every Exception is caught and displayed + if DEBUG: raise #show full trace in debug mode + sys.stderr.write("\nAn error occoured:\n%s\n" % msg) #short messy in user mode + sys.exit(1) #set errorlevel for script usage diff --git a/tools/sky/msp430-bsl-windows.exe b/tools/sky/msp430-bsl-windows.exe new file mode 100755 index 0000000000000000000000000000000000000000..2ce91da068551bf33b9df4eb83473b5b466214d2 GIT binary patch literal 81920 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 z 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