X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=decoders%2Fsdcard_spi%2Fpd.py;h=0850c305831e2c15e468901691d472b4ce568a4c;hb=c761524941fcb2237ceb65082e504e5e48e62a05;hp=318a1189bc907e36340a0f65201d144654b5ba37;hpb=0b5fc0742d89d72ceed0aef14a61e16d7dfa9099;p=libsigrokdecode.git diff --git a/decoders/sdcard_spi/pd.py b/decoders/sdcard_spi/pd.py index 318a118..0850c30 100644 --- a/decoders/sdcard_spi/pd.py +++ b/decoders/sdcard_spi/pd.py @@ -69,11 +69,12 @@ cmd_name = { 51: 'SEND_SCR', } -def ann_cmd_list(): +def cmd_list(): l = [] for i in range(63 + 1): - l.append(['cmd%d' % i, 'CMD%d' % i]) - return l + l.append(('cmd%d' % i, 'CMD%d' % i)) + + return tuple(l) class Decoder(srd.Decoder): api_version = 1 @@ -84,19 +85,16 @@ class Decoder(srd.Decoder): license = 'gplv2+' inputs = ['spi'] outputs = ['sdcard_spi'] - probes = [] - optional_probes = [] - options = {} - annotations = ann_cmd_list() + [ - ['cmd-desc', 'Command description'], - ['r1', 'R1 reply'], - ['r1b', 'R1B reply'], - ['r2', 'R2 reply'], - ['r3', 'R3 reply'], - ['r7', 'R7 reply'], - ['bits', 'Bits'], - ['bit-warnings', 'Bit warnings'], - ] + annotations = cmd_list() + ( + ('cmd-desc', 'Command description'), + ('r1', 'R1 reply'), + ('r1b', 'R1B reply'), + ('r2', 'R2 reply'), + ('r3', 'R3 reply'), + ('r7', 'R7 reply'), + ('bits', 'Bits'), + ('bit-warnings', 'Bit warnings'), + ) annotation_rows = ( ('bits', 'Bits', (70, 71)), ('cmd-reply', 'Commands/replies', @@ -115,14 +113,17 @@ class Decoder(srd.Decoder): self.is_acmd = False # Indicates CMD vs. ACMD self.blocklen = 0 self.read_buf = [] + self.cmd_str = '' def start(self): - # self.out_python = self.register(srd.OUTPUT_PYTHON) self.out_ann = self.register(srd.OUTPUT_ANN) def putx(self, data): self.put(self.cmd_ss, self.cmd_es, self.out_ann, data) + def putc(self, cmd, desc): + self.putx([cmd, ['%s: %s' % (self.cmd_str, desc)]]) + def putb(self, data): self.put(self.bit_ss, self.bit_es, self.out_ann, data) @@ -155,7 +156,7 @@ class Decoder(srd.Decoder): s = 'ACMD' if self.is_acmd else 'CMD' def tb(byte, bit): - return self.cmd_token_bits[5 - byte][7 - bit] + return self.cmd_token_bits[5 - byte][bit] # Bits[47:47]: Start bit (always 0) bit, self.bit_ss, self.bit_es = tb(5, 7)[0], tb(5, 7)[1], tb(5, 7)[2] @@ -198,34 +199,33 @@ class Decoder(srd.Decoder): # Handle command. if cmd in (0, 1, 9, 16, 17, 41, 49, 55, 59): self.state = 'HANDLE CMD%d' % cmd - a = '%s%d (%s)' % (s, cmd, cmd_name[cmd]) + self.cmd_str = '%s%d (%s)' % (s, cmd, cmd_name[cmd]) else: self.state = 'HANDLE CMD999' a = '%s%d: %02x %02x %02x %02x %02x %02x' % ((s, cmd) + tuple(t)) - - self.putx([cmd, [a]]) + self.putx([cmd, [a]]) # ... if self.is_acmd and cmd != 55: self.is_acmd = False - def handle_cmd0(self, ): + def handle_cmd0(self): # CMD0: GO_IDLE_STATE - self.putx([64, ['Reset the SD card']]) + self.putc(0, 'Reset the SD card') self.state = 'GET RESPONSE R1' def handle_cmd1(self): # CMD1: SEND_OP_COND - self.putx([64, ['Send HCS info and activate the card init process']]) + self.putc(1, 'Send HCS info and activate the card init process') hcs = (self.arg & (1 << 30)) >> 30 - self.bit_ss = self.cmd_token_bits[5 - 4][7 - 6][1] - self.bit_es = self.cmd_token_bits[5 - 4][7 - 6][2] + self.bit_ss = self.cmd_token_bits[5 - 4][6][1] + self.bit_es = self.cmd_token_bits[5 - 4][6][2] self.putb([70, ['HCS: %d' % hcs]]) self.state = 'GET RESPONSE R1' def handle_cmd9(self): # CMD9: SEND_CSD (128 bits / 16 bytes) - self.putx([64, ['Ask card to send its card specific data (CSD)']]) + self.putc(9, 'Ask card to send its card specific data (CSD)') if len(self.read_buf) == 0: self.cmd_ss = self.ss self.read_buf.append(self.miso) @@ -243,7 +243,7 @@ class Decoder(srd.Decoder): def handle_cmd10(self): # CMD10: SEND_CID (128 bits / 16 bytes) - self.putx([64, ['Ask card to send its card identification (CID)']]) + self.putc(10, 'Ask card to send its card identification (CID)') self.read_buf.append(self.miso) if len(self.read_buf) < 16: return @@ -256,12 +256,12 @@ class Decoder(srd.Decoder): # CMD16: SET_BLOCKLEN self.blocklen = self.arg # TODO: Sanity check on block length. - self.putx([64, ['Set the block length to %d bytes' % self.blocklen]]) + self.putc(16, 'Set the block length to %d bytes' % self.blocklen) self.state = 'GET RESPONSE R1' def handle_cmd17(self): # CMD17: READ_SINGLE_BLOCK - self.putx([64, ['Read a block from address 0x%04x' % self.arg]]) + self.putc(17, 'Read a block from address 0x%04x' % self.arg) if len(self.read_buf) == 0: self.cmd_ss = self.ss self.read_buf.append(self.miso) @@ -275,7 +275,7 @@ class Decoder(srd.Decoder): def handle_cmd41(self): # ACMD41: SD_SEND_OP_COND - self.putx([64, ['Send HCS info and activate the card init process']]) + self.putc(41, 'Send HCS info and activate the card init process') self.state = 'GET RESPONSE R1' def handle_cmd49(self): @@ -283,7 +283,7 @@ class Decoder(srd.Decoder): def handle_cmd55(self): # CMD55: APP_CMD - self.putx([64, ['Next command is an application-specific command']]) + self.putc(55, 'Next command is an application-specific command') self.is_acmd = True self.state = 'GET RESPONSE R1' @@ -291,7 +291,7 @@ class Decoder(srd.Decoder): # CMD59: CRC_ON_OFF crc_on_off = self.arg & (1 << 0) s = 'on' if crc_on_off == 1 else 'off' - self.putx([64, ['Turn the SD card CRC option %s' % s]]) + self.putc(59, 'Turn the SD card CRC option %s' % s) self.state = 'GET RESPONSE R1' def handle_cmd999(self): @@ -338,11 +338,11 @@ class Decoder(srd.Decoder): # The R1 response token format (1 byte). # Sent by the card after every command except for SEND_STATUS. - self.cmd_ss, self.cmd_es = self.miso_bits[0][1], self.miso_bits[7][2] + self.cmd_ss, self.cmd_es = self.miso_bits[7][1], self.miso_bits[0][2] self.putx([65, ['R1: 0x%02x' % res]]) def putbit(bit, data): - b = self.miso_bits[7 - bit] + b = self.miso_bits[bit] self.bit_ss, self.bit_es = b[1], b[2] self.putb([70, data])