You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
microwatt/scripts/mw_debug.py

63 lines
1.6 KiB
Python

#!/usr/bin/python3
import urjtag;
def do_command(urc, op, addr, data):
urc.set_dr_in(op,1,0)
urc.set_dr_in(data,65,2)
urc.set_dr_in(addr,73,66)
# print("Sending:", urc.get_dr_in_string())
urc.shift_dr()
urc.set_dr_in(0x0,73,0)
for x in range(5):
urc.shift_dr()
# print("Received:", urc.get_dr_out_string())
rsp_code = urc.get_dr_out(1,0)
if rsp_code == 0:
return urc.get_dr_out(65,2)
if rsp_code != 3:
print("Weird response ! rsp=%x" % rsp_code);
print("Timeout sending command !")
def do_read(urc, addr):
return do_command(urc, 1, addr, 0)
def do_write(urc, addr, val):
do_command(urc, 2, addr, val)
def main():
# Init jtag
#urjtag.loglevel( urjtag.URJ_LOG_LEVEL_ALL )
urc = urjtag.chain()
urc.cable("DigilentHS1")
print('Cable frequency:', urc.get_frequency())
#urc.tap_detect()
#length = urc.len()
#for i in range(0,urc.len()):
# idcode = urc.partid(0)
# print('[%d] 0x%08x' % (i, idcode))
urc.addpart(6);
print("Part ID: ", urc.partid(0))
#urc.part(0)
#urc.reset();
urc.add_register("USER2_REG", 74);
urc.add_instruction("USER2", "000011", "USER2_REG");
urc.add_register("IDCODE_REG", 32);
urc.add_instruction("IDCODE", "001001", "IDCODE_REG");
# Send test command
urc.set_instruction("IDCODE")
urc.shift_ir()
urc.shift_dr()
print("Got:", hex(urc.get_dr_out()))
urc.set_instruction("USER2")
urc.shift_ir()
print("Reading 0x00: %x" % do_read(urc, 0))
print("Reading 0xaa: %x" % do_read(urc, 0xaa))
if __name__ == "__main__":
main()