X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=client%2FGoodFETJTAG.py;h=b579d747878cf588302cd5f152979bd4a822c786;hp=4dc4061c130dcaa558fe7b430078ec4ced852d73;hb=d08bfd3c7cdc687fd68ba9025702c262665e52d3;hpb=5fb0341d348e101b30794945a6c91546e25e8e7b;ds=sidebyside diff --git a/client/GoodFETJTAG.py b/client/GoodFETJTAG.py index 4dc4061..b579d74 100644 --- a/client/GoodFETJTAG.py +++ b/client/GoodFETJTAG.py @@ -16,6 +16,13 @@ EXEC = 0x31 NOK = 0x7E OK = 0x7F +# JTAG commands +JTAG_RESET_TAP = 0x82 +JTAG_RESET_TARGET = 0x83 +JTAG_DETECT_IR_WIDTH = 0x84 +JTAG_DETECT_CHAIN_LENGTH = 0x85 +JTAG_GET_DEVICE_ID = 0x86 + from GoodFET import GoodFET from intelhex import IntelHex @@ -26,13 +33,50 @@ class GoodFETJTAG(GoodFET): JTAGAPP=0x10; APP=JTAGAPP; + def _check_return(self, verb, length=0): + if (self.app == self.APP) and \ + (self.verb == verb) and \ + (len(self.data) == length): + print "OK" + return True + print "Failed!" + return False + def setup(self): """Move the FET into the JTAG configuration.""" - print "Initializing JTAG..." - #self.writecmd(self.APP, SETUP, 0, self.data) + sys.stdout.write("Initializing JTAG...") + self.writecmd(self.APP, SETUP) + self._check_return(SETUP) + + def reset_tap(self): + sys.stdout.write("Resetting TAP...") + self.writecmd(self.APP, JTAG_RESET_TAP) + self._check_return(JTAG_RESET_TAP) + + def reset_target(self): + sys.stdout.write("Resseting target device...") + self.writecmd(self.APP, JTAG_RESET_TARGET) + self._check_return(JTAG_RESET_TARGET) + + def detect_ir_width(self): + sys.stdout.write("Detecting IR width...") + self.writecmd(self.APP, JTAG_DETECT_IR_WIDTH) + self._check_return(JTAG_DETECT_IR_WIDTH, 2) + width = struct.unpack("!H", self.data)[0] + return width + + def detect_chain_length(self): + sys.stdout.write("Detecting chain length...") + self.writecmd(self.APP, JTAG_DETECT_CHAIN_LENGTH) + self._check_return(JTAG_DETECT_CHAIN_LENGTH, 2) + length = struct.unpack("!H", self.data)[0] + return length - def detect(self): - """Detect the JTAG IR width.""" - pass + def get_device_id(self, chip): + sys.stdout.write("Getting ID for device %d..." % chip) + self.writecmd(self.APP, JTAG_GET_DEVICE_ID, 2, struct.pack("!H", chip)) + self._check_return(JTAG_GET_DEVICE_ID, 4) + id = struct.unpack("!L", self.data)[0] + return id