On Sat, Sep 12, 2009 at 01:45:50PM +0900, ILKYOUNG KWOUN wrote:
> Hello,
>
> Since I did not received any responding for my previous posting(
> http://lists.gnu.org/archive/html/discuss-gnuradio/2009-09/msg00079.html), I
> decided to upgrade the fpga image and firmwaredd by re-flashing the SD card
> with up to date txrx.bin and u2_rev3.bin files.
> However, I cannot find the 'u2_flash_tool' program(script?) at the
> 'TOPDIR/usrp2/firmware' as explained in wiki page(
> http://gnuradio.org/trac/wiki/USRP2UserFAQ#HowdoIchangethefirmwareandfpgacodeontheSDCard
> ).
> I remember I used to use it last year. But I cannot find the file in
> gnuradio-3.2, gnuradio3.2.1, and gnuradio-3.2.2 release.
>
> Did I miss something? Or is there anybody what happened?
>
> ILKYOUNG
Sorry, looks like it's missing from the tarballs.
I'll fix that in a minute, but I've attached it for you.
Eric
#!/usr/bin/env python
import sys
from optparse import OptionParser
SECTOR_SIZE = 512 # bytes
MAX_FILE_SIZE = 1 * (2**20) # maximum number of bytes we'll burn to a slot
FPGA_OFFSET = 0 # offset in flash to fpga image
FIRMWARE_OFFSET = 1 * (2**20) # offset in flash to firmware image
def read_file_data(filename):
f = open(filename, "rb")
file_data = f.read(MAX_FILE_SIZE)
t = len(file_data) % SECTOR_SIZE
if t != 0:
file_data += (SECTOR_SIZE - t)*chr(0) # pad to an even sector size w/
zeros
return file_data
def write_flash(offset, filename, devname):
file_data = read_file_data(filename)
dev = open(devname, "wb")
dev.seek(offset, 0) # seek to absolute byte offset
dev.write(file_data)
dev.flush()
dev.close()
return True
def verify_flash(offset, filename, devname):
file_data = read_file_data(filename)
dev = open(devname, "rb")
dev.seek(offset, 0) # seek to absolute byte offset
dev_data = dev.read(len(file_data))
if len(dev_data) != len(file_data):
sys.stderr.write("short read on device %s\n" % (devname,))
return False
if file_data == dev_data:
return True
# doesn't match
nwrong = 0
for i in range(len(file_data)):
if dev_data[i] != file_data[i]:
sys.stderr.write("mismatch at offset %7d. Expected 0x%02x, got
0x%02x\n" % (
i, ord(file_data[i]), ord(dev_data[i])))
nwrong += 1
if nwrong > 16:
sys.stderr.write("> 16 errors, stopping comparison\n")
break
return False
def read_flash(offset, filename, devname):
dev = open(devname, "rb")
dev.seek(offset, 0) # seek to absolute byte offset
dev_data = dev.read(MAX_FILE_SIZE)
dev.close()
open(filename, "wb").write(dev_data)
def main():
parser = OptionParser(usage="%prog: [options] filename")
parser.add_option("-w", "--write", action="store_const", const="write",
dest="mode",
help="write FILE to TARGET slot")
parser.add_option("-v", "--verify", action="store_const", const="verify",
dest="mode",
help="verify FILE against TARGET slot")
parser.add_option("-r", "--read", action="store_const", const="read",
dest="mode",
help="read TARGET slot, write to FILE")
parser.add_option("-t", "--target", type="choice", choices=("fpga", "s/w"),
default="s/w",
help="select TARGET slot from: fpga, s/w
[default=%default]")
parser.add_option("", "--dev", default=None,
help="specify flash device file, e.g., /dev/sdb. Be
careful!")
parser.set_defaults(target="s/w", mode=None)
(options, args) = parser.parse_args()
if len(args) != 1:
parser.print_help()
raise SystemExit
filename = args[0]
if options.mode is None:
sys.stderr.write("specify mode with -w, -v or -r\n")
parser.print_help()
raise SystemExit
if options.dev is None:
sys.stderr.write("specify the device file with --dev\n")
parser.print_help()
raise SystemExit
offset = { "fpga" : FPGA_OFFSET, "s/w" : FIRMWARE_OFFSET }[options.target]
if options.mode == "write":
r = (write_flash(offset, filename, options.dev)
and verify_flash(offset, filename, options.dev))
elif options.mode == "verify":
r = verify_flash(offset, filename, options.dev)
elif options.mode == "read":
r = read_flash(offset, filename, options.dev)
else:
raise NotImplemented
if not r:
raise SystemExit, 1
if __name__ == "__main__":
main()
_______________________________________________
Discuss-gnuradio mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/discuss-gnuradio