📄 tos-bsl.in
字号:
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 <ENTER> 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -