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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 +# 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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 aG1$Xk4}(1n_AuDPU=O)b4*uY8{J|GTOo4;| literal 0 HcmV?d00001 diff --git a/tools/sky/serialdump-linux b/tools/sky/serialdump-linux new file mode 100755 index 0000000000000000000000000000000000000000..8c7af779d6833ab75857ae8d2a59688e0d68cfab GIT binary patch literal 14922 zcmeHOe{@vUoxk%VFhV3DL`^N$7fm$mnn{2_DL*U_2En3G6Hpgnn9RIn#!hBtXWn4a z8VnAj%nqTn^;fsGN9?xSYS+Vd)wNaZARdEfJuR*Dba%Bq=@#3WhV7vhD_bMk&*$Fv zl9zy8>hbJf-sJo4{oL>Oe($~C`(y6C@4mZy>sC7)4q-W`a0#L#_qshT@DpouT^2ly-|oLj?~0@hJ=q!!q*8iH`2Aho@t8kl1d@i|FVOXa z?D7jm$_T~NhDfKPx}Ff-dUr6mC*H& zxFZ=cbkUheMq);%;=~mPN+U6m)B_qf)$AsP!L5`8A9*YbA+Vv}Ex}1IQ+x&|{)A7&D^C0;Q8#T(@rR z%2xk8Z!-`yJv#-!qMj{w~PEke?xYsc+O~HU>e=Ea4XFn^$z+?NC zVRASD{#3}Gqz{Fs=wq;+rjHIfLZ1@_he*vW`9mdINoQmTTx^0%)d>NvVZCI?N*a7o#uJ$0V_wJ|?GC^k)mPG51F1 zgs1q=D0MjzEVMA z);!EmMrNV27H%Ls2 zg*Ol{mzb6d-$L9hF)bM0MyyFpONLpYQl-SSXgEPEB&KDTbxw-T6dbhR^My>YJ(q2OfiegAtgE;;hvMY#C&;_+Kl%`Q z#*kfMrr^wF>%bk%YIr`%5@ly2#3jl|{wcEZ2g%A0F#64JRy_DZ#TN^?A2%Gz9YKz0 z&snG#<|9^&=}WgUOIx939yLfjn61Y1TQZMIgv>n1${!>vKfvhs%7ZI6jB>}Obf$n?b>p_=TtNzm-sw=*X*YeX}~wB&|Oz-wkbRgW10s1EEK9V6??u2 zyQ-tl}dV*+rWK>}0o zVWxH0@rSF(`i+(Ga#MDXQVvU@ry~=tne)B_R8tH2Y@xRX>92xx@zXY43&0!58c@p_ z)J(8^Ji%fn&}<3Z;N^W!Qrb+197Z8dpL8KZh^Cl`hocYz|V==1` zbEsHW@%69D+%X^TDpc(HEs8ZJQp-dypwu3$GsQr5n^{Ws;RVp1^9^PChJ@@;_b_{* zvPXN37LOxLZpGdQkXVKGAY=`WAzFtW^nTU^8ee^jwmc3IF}yYJJDz(%<>)xd60l0N zklEUu5Y86vVpskL=6nwmn-#xZm4b?jdsY1FSdbU5KzP7+TrLNWFYyiC`S-HvGyiot zd})gN?51dB+n!Z-GyjD&jqhZp@1(8z4wad#{u>PYiY!E_0zb7CPp1cSPqjd2<{+P* zihKXS-#7{K?t`H(tDn_k#nZdWXy{4Hg^kcxDj>x`b`7}fnXFGvqVc$`r`QA6Q9{l= zTn|Yrvju78pHm=f3b4ODM)SRmSj@UuC%sqxKZS&iyL4Jbb{YHy*QPvit6S48pOrvnuxf05acy5=k)K zS~a5#YxcafxEza?UX6P5NR#P%MWpB1R4*+USK8ntV;A2=6Fo(xE=XAjT`#=20g}gEOK@!l4cI_S-oT0poDChXP#o6 z?q@tE4B23^T4?3ppbl1jHlSSQ(hiAWMY-53eH&rcu;RV~E8=^l^dMsT`(Ax5eLck| z*J3%c*?Ex9*CA)jP~o35TrrIGckw0F1q;K|$H8mw-8QJ%GA>}YUpY2CJ%{?RkDmEG zhk>929*Uax6nKPs5w~C8V+x(VO`Sj_0-$?F+Dq9;iZ~J*RnmIjc zR6Wbk=+S)ZNM_iLnDm<&xtZH%?)k2kIlhf!0wgP52Bi4Vj5!4-8BVb=73k6zYbiY$ z2}DEb?u53vv1bb&sm<}&76u}GbhK^o`Bov+=DTU_igl}eo7T4ac#fqh*Vv_FOxcjLq-sI{$IyFu%Yhjd#Wskju9tavQi zEBRVOAR5&|0VAMAQYu*@5d4g8q~;*$SoW!yX2i8{B&3hapynyNO#5ck0oiY%Xdo2Q zcorqI)C0k=X6QYJhO=Q7$l<3Bcal%h4fS~8AmI zmG0JK29gHju^0~XBC#&kxjv;e)WdGmgtmG8r?!xtj)t^Y+&~90Gb(Bj+mWM?#f$29TS9=GT8`=A|vckXn*gsz*%^gQT?pkIJ~2RZ|qf%^|119?H$f^GzD1;s!+Kzl)713dwH9%SWF&it-x zZC$K2;F`c3ZN9g~yHIP`*pZGIX@wf+rX`w(h3Wf}Z1FaG=a1=>$kMrBqR#V|JpXcj zU^=DA@JbQ84?6ZPb?@W~8B&iHcup}L-9YgxcdLHL{>XmA{>grK0&P&IlE~*Zcsj*b z&Pw+-(y`zAkWS^R64gri&*J$7P%miG>t)1%@9edJGdwlmV>`6cmBZ!vsHfgDi*u%9 zrlWF76`u7oW=(g^_$b~YIqQUL#`Njeq6@na^r)b_1+j~#FPXk})+fuIm|n}S5^Fg- zO05$#A{QIJ88S{WkCKjeW?YD;gS`XfI7c59xM+b}AE>kJLS;@~`f?S7V}5PRvid7r zHQKFzQ+vg2o1M7q;J8w%zU*A8vAv5J-XK^)@DRxvX8AbyS-xem zM54^eS-|CW)Hc=L+J!ffsBD>&GlJ`K#4U4{sTd9v*EA)ytgET1d0B0()Uf*lFDyHd zy|A_8W#!D{s&ZI)qokaJTo*W0Sxg(I!r0bp9G>T8F8h4Ki6a`v4qiT}0_Oygt{4sp zg5f|?PAaYc#}CqY`mwZBq)Ig*YV!2xP4#vgfezutv4`@*RtOsOWI}jxexQ3-tX$h@ z1iFMb9Kfw1Z>Tqhgv!SSAa7SJ?Zsw3#mhc+;0G_MM=7rYiKrpGG@9`8Kt^~w0lu1TO5oTGrCg9A`i~!fCmb2=SK!hc? z26Ag4*KaYwqdwB-Y;v4VkDzgCcwNABl%d-Rvh;Bl8^WTQldI({)%PNTVb)jR*OwPK zchm5uv-Eu)*pl0gmq5F5snp_8)Czyul#?pBR@IcfC_`t-J%TXxQO*N7k9Kakf3(T* zwofJGEFEBtg};L^ZA^V!lUHl%z9`$5j%nC#Pl2p_d57+GZCnRfQjW6U2U&95V+?7y zTZcHyQHFFFWXY|;ng5#FiFa}-L-#U>`Lld{H_#3_jS;5PO#g@Qsn2qhyUG?}1%Czs zD@@t`D}>l>C4z6M{x!mOInR|s)Z64N-XAB)HA3#MWv5WWmK=W9Cg{5b%D8N`oF!K| zN$!V`d)8t?*b2@z<(f?exvPcvfu+opqb%2-w4LSFG~gbvr38^ykiM=SxOnK_GdY7Zp}HbN*9U<-mDPVU+>rGlf;} zwDz7Z*@M;mr1%)zaGZw}mY&?(D$H7_c|~FFlrjHe{!o}Rk=jNmTrM%^1BJQshU2)0 zbD1~BIldLJSty!Fk)uT8wrOwaq5bk;WyRlr=wFs=$O@M=u{ z7Kw518<^u))#nm%Eimt=S$Kmf&pDX(*#^vY41&Prq6=7FEjIBT!0l%FE7AWmz`S$Z zim8qA)>?(XbJX_@@U8hoL;pSiOlQ^S1z>CbtHKv8M@)VeGEDy;CSGmgVG~>J`HqRd zXY!|`V)pV?v7&IBK-4z}nA=LmRXNMWa^U`NE6n=%fO&_D$@tC4CIsx?Waz+FeJW9( zBn3^U!N14Ek0H$bzG7mlypKlh0grbJZ7`(1BK%fk60L2n)s zgyR0LXuKm3^~(*IKalPba%1MlC4=r>D+9dn9oKJx)i^l z97af+jDLAEF~!91dh9%YTV%)5Kx3Z-**WS9rAaYRY>(m94Lerf2iZ$W`vYU!Z}Q}~ zLuY+WWLLt20#jIh<78*5YRfwk_GtA1l|6=^C)qK-ZL(v(E)OJZA68A^`XdV$E%f5< ug+CGW8)01a@OJbF*&XFqQ4@qGe=23G!MQ#P8~Y;5u7p=J?0C|bWB&_iAMR-Y literal 0 HcmV?d00001 diff --git a/tools/sky/serialdump-windows.exe b/tools/sky/serialdump-windows.exe new file mode 100755 index 0000000000000000000000000000000000000000..12d0ae62425355e78a2ecc1a7a6bfc6aad7df6fc GIT binary patch literal 17718 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