diff options
| author | Nick Foster <nick@nerdnetworks.org> | 2011-02-14 15:08:33 -0800 | 
|---|---|---|
| committer | Nick Foster <nick@nerdnetworks.org> | 2011-02-14 15:08:33 -0800 | 
| commit | 3ad192d0cae8c9538ca14d52059847530cc77bd1 (patch) | |
| tree | a74057a9565f89289e565da9dd71ca17e7d3b8fa | |
| parent | 1b4e4fb577b88f6d8c81e47ebc53c2ac8d517cdc (diff) | |
| download | uhd-3ad192d0cae8c9538ca14d52059847530cc77bd1.tar.gz uhd-3ad192d0cae8c9538ca14d52059847530cc77bd1.tar.bz2 uhd-3ad192d0cae8c9538ca14d52059847530cc77bd1.zip | |
Modified net burner to allow reading of images from N2XX.
| -rwxr-xr-x | host/utils/usrp_n2xx_net_burner.py | 53 | 
1 files changed, 51 insertions, 2 deletions
| diff --git a/host/utils/usrp_n2xx_net_burner.py b/host/utils/usrp_n2xx_net_burner.py index f52a2cbc1..db94d50a4 100755 --- a/host/utils/usrp_n2xx_net_burner.py +++ b/host/utils/usrp_n2xx_net_burner.py @@ -27,6 +27,7 @@ import re  import struct  import socket  import sys +import os.path  ########################################################################  # constants @@ -258,6 +259,32 @@ def verify_image(ip, image, addr):    else:      print "Success." +def read_flash(ip, image, size, addr): +  print "Reading image" +  readsize = size +  readdata = str() +  while readsize > 0: +    if readsize < FLASH_DATA_PACKET_SIZE: thisreadsize = readsize +    else: thisreadsize = FLASH_DATA_PACKET_SIZE +    out_pkt = pack_flash_args_fmt(USRP2_FW_PROTO_VERSION, update_id_t.USRP2_FW_UPDATE_ID_READ_TEH_FLASHES_LOL, seq(), addr, thisreadsize, "") +    in_pkt = send_and_recv(out_pkt, ip) +     +    (proto_ver, pktid, rxseq, flash_addr, rxlength, data) = unpack_flash_args_fmt(in_pkt) + +    if pktid != update_id_t.USRP2_FW_UPDATE_ID_KK_READ_TEH_FLASHES_OMG: +      raise Exception, "Invalid reply %c from device." % (chr(pktid)) + +    readdata += data[:thisreadsize] +    readsize -= FLASH_DATA_PACKET_SIZE +    addr += FLASH_DATA_PACKET_SIZE + +  print "Read back %i bytes" % len(readdata) +   +  #write to disk +  f = open(image, 'w') +  f.write(readdata) +  f.close() +      def reset_usrp(ip):      out_pkt = pack_flash_args_fmt(USRP2_FW_PROTO_VERSION, update_id_t.USRP2_FW_UPDATE_ID_RESET_MAH_COMPUTORZ_LOL, seq(), 0, 0, "")      in_pkt = send_and_recv(out_pkt, ip) @@ -299,6 +326,7 @@ def get_options():      parser.add_option("--fw",   type="string",                 help="firmware image path (optional)", default='')      parser.add_option("--fpga", type="string",                 help="fpga image path (optional)",     default='')      parser.add_option("--reset", action="store_true",          help="reset the device after writing", default=False) +    parser.add_option("--read", action="store_true",           help="read to file instead of write from file", default=False)      parser.add_option("--overwrite-safe", action="store_true", help="never ever use this option", default=False)      (options, args) = parser.parse_args() @@ -313,11 +341,32 @@ if __name__=='__main__':      if not options.fpga and not options.fw and not options.reset: raise Exception, 'Must specify either a firmware image or FPGA image, and/or reset.' -    if options.overwrite_safe: +    if options.overwrite_safe and not options.read:          print("Are you REALLY, REALLY sure you want to overwrite the safe image? This is ALMOST ALWAYS a terrible idea.")          print("If your image is faulty, your USRP2+ will become a brick until reprogrammed via JTAG.")          response = raw_input("""Type "yes" to continue, or anything else to quit: """)          if response != "yes":              sys.exit(0) -    burn_fw(ip=options.ip, fw=options.fw, fpga=options.fpga, reset=options.reset, safe=options.overwrite_safe) +    if options.read is True: +        if options.fw: +            file = options.fw +            if os.path.isfile(file): +                response = raw_input("File already exists -- overwrite? (y/n) ") +                if response != "y": +                    sys.exit(0) +            size = FW_IMAGE_SIZE_BYTES +            addr = SAFE_FW_IMAGE_LOCATION_ADDR if options.overwrite_safe else PROD_FW_IMAGE_LOCATION_ADDR +            read_flash(options.ip, file, size, addr) +        if options.fpga:              +            file = options.fpga +            if os.path.isfile(file): +                response = raw_input("File already exists -- overwrite? (y/n) ") +                if response != "y": +                    sys.exit(0) +            size = FPGA_IMAGE_SIZE_BYTES +            addr = SAFE_FPGA_IMAGE_LOCATION_ADDR if options.overwrite_safe else PROD_FPGA_IMAGE_LOCATION_ADDR +            read_flash(options.ip, file, size, addr) +             +    else:     +        burn_fw(ip=options.ip, fw=options.fw, fpga=options.fpga, reset=options.reset, safe=options.overwrite_safe) | 
