X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=decoders%2Fcjtag%2Fpd.py;h=3fb636aacba1488da2cd47a457126b483d682bc1;hb=1742244d6393b1d8fba0119eb48464e16a8b9a97;hp=b6d343aadd54cc9932854d88bc07e5446683b260;hpb=de5a2d286ecf1f8feeb149a0c96d1831d167a080;p=libsigrokdecode.git diff --git a/decoders/cjtag/pd.py b/decoders/cjtag/pd.py index b6d343a..3fb636a 100644 --- a/decoders/cjtag/pd.py +++ b/decoders/cjtag/pd.py @@ -55,6 +55,12 @@ jtag_states = [ 'SHIFT-IR', 'EXIT1-IR', 'EXIT2-IR', ] +cjtag_states = [ + 'CJTAG-EC', 'CJTAG-SPARE', 'CJTAG-TPDEL', 'CJTAG-TPREV', 'CJTAG-TPST', + 'CJTAG-RDYC', 'CJTAG-DLYC', 'CJTAG-SCNFMT', 'CJTAG-CP', 'CJTAG-OAC', + 'OSCAN1', '4-WIRE', +] + class Decoder(srd.Decoder): api_version = 3 id = 'cjtag' @@ -66,25 +72,27 @@ class Decoder(srd.Decoder): outputs = ['jtag'] tags = ['Debug/trace'] channels = ( - {'id': 'tck', 'name': 'TCK', 'desc': 'Test clock'}, - {'id': 'tms', 'name': 'TMS', 'desc': 'Test mode select'}, + {'id': 'tckc', 'name': 'TCKC', 'desc': 'Test clock'}, + {'id': 'tmsc', 'name': 'TMSC', 'desc': 'Test mode select'}, ) - annotations = tuple([tuple([s.lower(), s]) for s in jtag_states]) + ( \ + annotations = \ + tuple([tuple([s.lower(), s]) for s in jtag_states]) + \ + tuple([tuple([s.lower(), s]) for s in cjtag_states]) + ( \ ('bit-tdi', 'Bit (TDI)'), ('bit-tdo', 'Bit (TDO)'), ('bitstring-tdi', 'Bitstring (TDI)'), ('bitstring-tdo', 'Bitstring (TDO)'), ('bit-tms', 'Bit (TMS)'), - ('state-tapc', 'TAPC state'), ) annotation_rows = ( - ('bits-tdi', 'Bits (TDI)', (16,)), - ('bits-tdo', 'Bits (TDO)', (17,)), - ('bitstrings-tdi', 'Bitstrings (TDI)', (18,)), - ('bitstrings-tdo', 'Bitstrings (TDO)', (19,)), - ('bits-tms', 'Bits (TMS)', (20,)), - ('states-tapc', 'TAPC states', (21,)), - ('states', 'States', tuple(range(15 + 1))), + ('bits-tdi', 'Bits (TDI)', (28,)), + ('bits-tdo', 'Bits (TDO)', (29,)), + ('bitstrings-tdi', 'Bitstrings (TDI)', (30,)), + ('bitstrings-tdo', 'Bitstrings (TDO)', (31,)), + ('bits-tms', 'Bits (TMS)', (32,)), + ('cjtag-states', 'CJTAG states', + tuple(range(len(jtag_states), len(jtag_states + cjtag_states)))), + ('jtag-states', 'JTAG states', tuple(range(len(jtag_states)))), ) def __init__(self): @@ -203,7 +211,7 @@ class Decoder(srd.Decoder): elif self.state == 'UPDATE-IR': self.state = 'SELECT-DR-SCAN' if (tms) else 'RUN-TEST/IDLE' - def handle_rising_tck_edge(self, tdi, tdo, tck, tms): + def handle_rising_tckc_edge(self, tdi, tdo, tck, tms): # Rising TCK edges always advance the state machine. self.advance_state_machine(tms) @@ -219,9 +227,10 @@ class Decoder(srd.Decoder): self.putx([jtag_states.index(self.oldstate), [self.oldstate]]) self.putp(['NEW STATE', self.state]) - self.putx([21, [self.oldcjtagstate]]) + self.putx([len(jtag_states) + cjtag_states.index(self.oldcjtagstate), + [self.oldcjtagstate]]) if (self.oldcjtagstate.startswith('CJTAG-')): - self.putx([20, [str(self.oldtms)]]) + self.putx([32, [str(self.oldtms)]]) self.oldtms = tms # Upon SHIFT-*/EXIT1-* collect the current TDI/TDO values. @@ -231,8 +240,8 @@ class Decoder(srd.Decoder): self.ss_bitstring = self.samplenum self.first_bit = False else: - self.putx([16, [str(self.bits_tdi[0])]]) - self.putx([17, [str(self.bits_tdo[0])]]) + self.putx([28, [str(self.bits_tdi[0])]]) + self.putx([29, [str(self.bits_tdo[0])]]) # Use self.samplenum as ES of the previous bit. self.bits_samplenums_tdi[0][1] = self.samplenum self.bits_samplenums_tdo[0][1] = self.samplenum @@ -253,7 +262,7 @@ class Decoder(srd.Decoder): b = ''.join(map(str, self.bits_tdi[1:])) h = ' (0x%x' % int('0b0' + b, 2) + ')' s = t + ': ' + b + h + ', ' + str(len(self.bits_tdi[1:])) + ' bits' - self.putx_bs([18, [s]]) + self.putx_bs([30, [s]]) self.putp_bs([t, [b, self.bits_samplenums_tdi[1:]]]) self.bits_tdi = [] self.bits_samplenums_tdi = [] @@ -262,7 +271,7 @@ class Decoder(srd.Decoder): b = ''.join(map(str, self.bits_tdo[1:])) h = ' (0x%x' % int('0b0' + b, 2) + ')' s = t + ': ' + b + h + ', ' + str(len(self.bits_tdo[1:])) + ' bits' - self.putx_bs([19, [s]]) + self.putx_bs([31, [s]]) self.putp_bs([t, [b, self.bits_samplenums_tdo[1:]]]) self.bits_tdo = [] self.bits_samplenums_tdo = [] @@ -273,10 +282,10 @@ class Decoder(srd.Decoder): self.ss_item = self.samplenum - def handle_tms_edge(self, tck, tms): + def handle_tmsc_edge(self): self.escape_edges += 1 - def handle_tapc_state(self, tck, tms): + def handle_tapc_state(self): self.oldcjtagstate = self.cjtagstate if self.escape_edges >= 8: @@ -289,31 +298,29 @@ class Decoder(srd.Decoder): self.escape_edges = 0 def decode(self): - tdi_real = 0 - tms_real = 0 - tdo_real = 0 + tdi = tms = tdo = 0 while True: - # Wait for a rising edge on TCK. - tck, tms = self.wait({0: 'r'}) - self.handle_tapc_state(tck, tms) + # Wait for a rising edge on TCKC. + tckc, tmsc = self.wait({0: 'r'}) + self.handle_tapc_state() if self.cjtagstate == 'OSCAN1': if self.oscan1cycle == 0: # nTDI - tdi_real = 1 if (tms == 0) else 0 + tdi = 1 if (tmsc == 0) else 0 self.oscan1cycle = 1 elif self.oscan1cycle == 1: # TMS - tms_real = tms + tms = tmsc self.oscan1cycle = 2 elif self.oscan1cycle == 2: # TDO - tdo_real = tms - self.handle_rising_tck_edge(tdi_real, tdo_real, tck, tms_real) + tdo = tmsc + self.handle_rising_tckc_edge(tdi, tdo, tckc, tms) self.oscan1cycle = 0 else: - self.handle_rising_tck_edge(None, None, tck, tms) + self.handle_rising_tckc_edge(None, None, tckc, tmsc) - while (tck == 1): - tck, tms_n = self.wait([{0: 'f'}, {1: 'e'}]) - if tms_n != tms: - tms = tms_n - self.handle_tms_edge(tck, tms) + while (tckc == 1): + tckc, tmsc_n = self.wait([{0: 'f'}, {1: 'e'}]) + if tmsc_n != tmsc: + tmsc = tmsc_n + self.handle_tmsc_edge()