⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jtag.py

📁 Contiki是一个开源
💻 PY
📖 第 1 页 / 共 2 页
字号:
        raise NotImplementedError        #sys.stderr.write("Load PC with 0x%04x ...\n" % address)    def funclet(self):        """download and start funclet"""        sys.stderr.write("Download and execute of funclet...\n")        if len(self.data) > 1:            raise JTAGException("don't know how to handle multiple segments in funclets")        _parjtag.funclet(self.data[0].data)        sys.stderr.write("Funclet OK.\n")def usage():    """print some help message"""    sys.stderr.write("""USAGE: %s [options] [file]Version: %sIf "-" is specified as file the data is read from the stdinput.A file ending with ".txt" is considered to be in TIText format allother filenames are considered IntelHex.General options:  -h, --help            Show this help screen.  -l, --lpt=name        Specify an other parallel port.                        (defaults to LPT1 (/dev/parport0 on unix)  -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  -f, --funclet         The given file is a funclet (a small program to                        be run in RAM)  -R, --ramsize         Specify the amont of RAM to be used to program                        flash (default 256).Program Flow Specifiers:  -e, --masserase       Mass Erase (clear all flash memory)  -m, --mainerase       Erase main flash memory only  --eraseinfo           Erase info flash memory only (0x1000-0x10ff)  --erase=address       Selectively erase segment at the specified address  -E, --erasecheck      Erase Check by file  -p, --program         Program file  -v, --verify          Verify by fileThe order of the above options matters! The table is ordered by normalexecution order. For the options "Epv" a file must be specified.Program flow specifiers default to "p" if a file is given.Don't forget to specify "e" or "eE" when programming flash!"p" already verifies the programmed data, "v" adds an additionalverification though uploading the written data for a 1:1 compare.No default action is taken if "p" and/or "v" is given, say specifyingonly "v" does a check by file of a programmed device.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.  -i, --ihex            Uploaded data is output in Intel HEX format.                        This can be used to clone a device.Do before exit:  -g, --go=address      Start programm execution at specified address.                        This implies option "w" (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                        interrupt vector. (see also -g)  -w, --wait            Wait for <ENTER> before closing parallel port.""" % (sys.argv[0], VERSION))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 portif __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    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -