def reset(self, execute=0, release=0): """perform a reset and optionaly release device.""" if self.verbose: sys.stderr.write("Reset %sdevice...\n" % (release and 'and release ' or '')) sys.stderr.flush() _parjtag.reset(execute, release)
def main(): global DEBUG import getopt filetype = None filename = None reset = 0 wait = 0 goaddr = None jtag = JTAG() toinit = [] todo = [] startaddr = None size = 2 outputformat= HEX lpt = None funclet = None ramsize = None sys.stderr.write("MSP430 parallel JTAG programmer Version: %s\n" % VERSION) try: opts, args = getopt.getopt(sys.argv[1:], "hl:weEmpvrg:Du:d:s:xbiITfR:S", ["help", "lpt=", "wait" "masserase", "erasecheck", "mainerase", "program", "erase=", "eraseinfo", "verify", "reset", "go=", "debug", "upload=", "download=", "size=", "hex", "bin", "ihex", "intelhex", "titext", "funclet", "ramsize=", "progress"] ) 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 ("-l", "--lpt"): lpt = a elif o in ("-w", "--wait"): wait = 1 elif o in ("-e", "--masserase"): toinit.append(jtag.actionMassErase) #Erase Flash elif o in ("-E", "--erasecheck"): toinit.append(jtag.actionEraseCheck) #Erase Check (by file) elif o in ("-m", "--mainerase"): toinit.append(jtag.actionMainErase) #Erase main Flash elif o == "--erase": try: seg = int(a, 0) toinit.append(jtag.makeActionSegmentErase(seg)) except ValueError: sys.stderr.write("segment address must be a valid number in dec, hex or octal\n") sys.exit(2) elif o == "--eraseinfo": toinit.append(jtag.makeActionSegmentErase(0x1000)) toinit.append(jtag.makeActionSegmentErase(0x1080)) elif o in ("-p", "--program"): todo.append(jtag.actionProgram) #Program file elif o in ("-v", "--verify"): todo.append(jtag.actionVerify) #Verify file elif o in ("-r", "--reset"): reset = 1 elif o in ("-g", "--go"): try: goaddr = int(a, 0) #try to convert decimal except ValueError: sys.stderr.write("upload address must be a valid number in dec, hex or octal\n") sys.exit(2) elif o in ("-D", "--debug"): DEBUG = DEBUG + 1 elif o in ("-u", "--upload"): try: startaddr = int(a, 0) #try to convert number of any base except ValueError: sys.stderr.write("upload address must be a valid number in dec, hex or octal\n") sys.exit(2) elif o in ("-s", "--size"): try: size = int(a, 0) except ValueError: sys.stderr.write("upload address must be a valid number in dec, hex or octal\n") sys.exit(2) #outut formats elif o in ("-x", "--hex"): outputformat = HEX elif o in ("-b", "--bin"): outputformat = BINARY elif o in ("-i", "--ihex"): outputformat = INTELHEX #input formats elif o in ("-I", "--intelhex"): filetype = 0 elif o in ("-T", "--titext"): filetype = 1 #others elif o in ("-f", "--funclet"): funclet = 1 elif o in ("-R", "--ramsize"): try: ramsize = int(a, 0) except ValueError: sys.stderr.write("ramsize must be a valid number in dec, hex or octal\n") sys.exit(2) elif o in ("-S", "--progress"): jtag.showprogess = 1 if len(args) == 0: sys.stderr.write("Use -h for help\n") elif len(args) == 1: #a filename is given if not funclet: if not todo: #if there are no actions yet todo.extend([ #add some useful actions... jtag.actionProgram, ]) 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) _parjtag.configure(DEBUG_OPTION, DEBUG) sys.stderr.write("python version: %s\n" % sys.version) #sanity check of options 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 #prepare data to download jtag.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 jtag.data.loadIHex(file) #intel hex elif filetype == 1: jtag.data.loadTIText(file) #TI's format else: raise ValueError("illegal filetype specified") else: #no filetype given... if filename == '-': #for stdin: jtag.data.loadIHex(sys.stdin) #assume intel hex elif filename: jtag.data.loadFile(filename) #autodetect otherwise if DEBUG > 5: sys.stderr.write("File: %r\n" % filename) try: jtag.connect(lpt) #try to open port except IOError: raise #do not handle here else: #continue if open was successful if ramsize is not None: _parjtag.configure(RAMSIZE_OPTION, ramsize) #initialization list if toinit: #erase and erase check if DEBUG: sys.stderr.write("Preparing device ...\n") for f in toinit: f() #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 jtag.actionReset() if funclet is not None: #download and start funclet jtag.funclet() if goaddr is not None: #start user programm at specified address jtag.actionRun(goaddr) #load PC and execute #upload datablock and output if startaddr is not None: if goaddr: #if a program was started... raise NotImplementedError #TODO: #sys.stderr.write("Waiting to device for reconnect for upload: ") data = jtag.uploadData(startaddr, size) #upload data if outputformat == HEX: #depending on output format hexdump( (startaddr, data) ) #print a hex display elif outputformat == INTELHEX: makeihex( (startaddr, data) ) #ouput a intel-hex file else: sys.stdout.write(data) #binary output w/o newline! wait = 0 #wait makes no sense as after the upload the device is still stopped if wait: #wait at the end if desired sys.stderr.write("Press <ENTER> ...\n") #display a prompt raw_input() #wait for newline _parjtag.reset(1, 1) #reset and release target #~ jtag.actionReset() jtag.close() #Release communication port
def actionReset(self): """perform a reset""" sys.stderr.write("Reset device ...\n") _parjtag.reset(0, 0)
def actionReset(self): """perform a reset""" _parjtag.reset(0, 0)
sys.stdout.flush() sys.stderr.write("Erase info mem segments ... ") jtag.eraseSegment( SEGA_ADDR, 128 ) jtag.eraseSegment( SEGB_ADDR, 128 ) sys.stderr.write("ok\n"); sys.stderr.write("Write info memory segments ...") jtag.downloadData( SEGA_ADDR, "".join(dataA) ) jtag.downloadData( SEGB_ADDR, "".join(dataB) ) sys.stderr.write("ok\n") sys.stderr.flush() sys.stderr.write("Reset and release msp430 ... ") sys.stderr.flush() _parjtag.reset(1, 1 ) jtag.close() sys.stderr.write("ok\n") sys.stderr.write("Good Night, and Good Luck\n") except SystemExit: raise except KeyboardInterrupt: sys.stderr.write("User abort.\n"); sys.exit(1) except Exception, msg: sys.stderr.write("\nAn error occoured:\n%s\n" % msg ) sys.exit(1)
def main(): global DEBUG import getopt filetype = None filename = None reset = 0 wait = 0 goaddr = None jtag = JTAG() toinit = [] todo = [] startaddr = None size = 2 outputformat = HEX lpt = None funclet = None ramsize = None sys.stderr.write("MSP430 parallel JTAG programmer Version: %s\n" % VERSION) try: opts, args = getopt.getopt( sys.argv[1:], "hl:weEmpvrg:Du:d:s:xbiITfR:S", [ "help", "lpt=", "wait" "masserase", "erasecheck", "mainerase", "program", "erase=", "eraseinfo", "verify", "reset", "go=", "debug", "upload=", "download=", "size=", "hex", "bin", "ihex", "intelhex", "titext", "funclet", "ramsize=", "progress" ]) 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 ("-l", "--lpt"): lpt = a elif o in ("-w", "--wait"): wait = 1 elif o in ("-e", "--masserase"): toinit.append(jtag.actionMassErase) #Erase Flash elif o in ("-E", "--erasecheck"): toinit.append(jtag.actionEraseCheck) #Erase Check (by file) elif o in ("-m", "--mainerase"): toinit.append(jtag.actionMainErase) #Erase main Flash elif o == "--erase": try: seg = int(a, 0) toinit.append(jtag.makeActionSegmentErase(seg)) except ValueError: sys.stderr.write( "segment address must be a valid number in dec, hex or octal\n" ) sys.exit(2) elif o == "--eraseinfo": toinit.append(jtag.makeActionSegmentErase(0x1000)) toinit.append(jtag.makeActionSegmentErase(0x1080)) elif o in ("-p", "--program"): todo.append(jtag.actionProgram) #Program file elif o in ("-v", "--verify"): todo.append(jtag.actionVerify) #Verify file elif o in ("-r", "--reset"): reset = 1 elif o in ("-g", "--go"): try: goaddr = int(a, 0) #try to convert decimal except ValueError: sys.stderr.write( "upload address must be a valid number in dec, hex or octal\n" ) sys.exit(2) elif o in ("-D", "--debug"): DEBUG = DEBUG + 1 elif o in ("-u", "--upload"): try: startaddr = int(a, 0) #try to convert number of any base except ValueError: sys.stderr.write( "upload address must be a valid number in dec, hex or octal\n" ) sys.exit(2) elif o in ("-s", "--size"): try: size = int(a, 0) except ValueError: sys.stderr.write( "upload address must be a valid number in dec, hex or octal\n" ) sys.exit(2) #outut formats elif o in ("-x", "--hex"): outputformat = HEX elif o in ("-b", "--bin"): outputformat = BINARY elif o in ("-i", "--ihex"): outputformat = INTELHEX #input formats elif o in ("-I", "--intelhex"): filetype = 0 elif o in ("-T", "--titext"): filetype = 1 #others elif o in ("-f", "--funclet"): funclet = 1 elif o in ("-R", "--ramsize"): try: ramsize = int(a, 0) except ValueError: sys.stderr.write( "ramsize must be a valid number in dec, hex or octal\n") sys.exit(2) elif o in ("-S", "--progress"): jtag.showprogess = 1 if len(args) == 0: sys.stderr.write("Use -h for help\n") elif len(args) == 1: #a filename is given if not funclet: if not todo: #if there are no actions yet todo.extend([ #add some useful actions... jtag.actionProgram, ]) 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) _parjtag.configure(DEBUG_OPTION, DEBUG) sys.stderr.write("python version: %s\n" % sys.version) #sanity check of options 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 #prepare data to download jtag.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 jtag.data.loadIHex(file) #intel hex elif filetype == 1: jtag.data.loadTIText(file) #TI's format else: raise ValueError("illegal filetype specified") else: #no filetype given... if filename == '-': #for stdin: jtag.data.loadIHex(sys.stdin) #assume intel hex elif filename: jtag.data.loadFile(filename) #autodetect otherwise if DEBUG > 5: sys.stderr.write("File: %r\n" % filename) try: jtag.connect(lpt) #try to open port except IOError: raise #do not handle here else: #continue if open was successful if ramsize is not None: _parjtag.configure(RAMSIZE_OPTION, ramsize) #initialization list if toinit: #erase and erase check if DEBUG: sys.stderr.write("Preparing device ...\n") for f in toinit: f() #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 jtag.actionReset() if funclet is not None: #download and start funclet jtag.funclet() if goaddr is not None: #start user programm at specified address jtag.actionRun(goaddr) #load PC and execute #upload datablock and output if startaddr is not None: if goaddr: #if a program was started... raise NotImplementedError #TODO: #sys.stderr.write("Waiting to device for reconnect for upload: ") data = jtag.uploadData(startaddr, size) #upload data if outputformat == HEX: #depending on output format hexdump((startaddr, data)) #print a hex display elif outputformat == INTELHEX: makeihex((startaddr, data)) #ouput a intel-hex file else: sys.stdout.write(data) #binary output w/o newline! wait = 0 #wait makes no sense as after the upload the device is still stopped if wait: #wait at the end if desired sys.stderr.write("Press <ENTER> ...\n") #display a prompt raw_input() #wait for newline _parjtag.reset(1, 1) #reset and release target #~ jtag.actionReset() jtag.close() #Release communication port