X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=decoders%2Fspi%2Fpd.py;h=4a686ddd204a9fbff6b439f37e90db2f9ef14dda;hb=e4302cbe5cb375a50bd9a30a8a2855d9fa6ab14d;hp=0618a8a8ca35573f52602f05bca7f5d8347c4366;hpb=8a110ab1ea46d89d36a610e4249fe1eabed27757;p=libsigrokdecode.git diff --git a/decoders/spi/pd.py b/decoders/spi/pd.py index 0618a8a..4a686dd 100644 --- a/decoders/spi/pd.py +++ b/decoders/spi/pd.py @@ -111,6 +111,10 @@ class Decoder(srd.Decoder): ('mosi-bits', 'MOSI bits', (3,)), ('other', 'Other', (4,)), ) + binary = ( + ('miso', 'MISO'), + ('mosi', 'MOSI'), + ) def __init__(self): self.samplerate = None @@ -134,6 +138,7 @@ class Decoder(srd.Decoder): def start(self): self.out_python = self.register(srd.OUTPUT_PYTHON) self.out_ann = self.register(srd.OUTPUT_ANN) + self.out_bin = self.register(srd.OUTPUT_BINARY) self.out_bitrate = self.register(srd.OUTPUT_META, meta=(int, 'Bitrate', 'Bitrate during transfers')) @@ -149,8 +154,10 @@ class Decoder(srd.Decoder): if self.have_miso: ss, es = self.misobits[-1][1], self.misobits[0][2] + self.put(ss, es, self.out_bin, (0, bytes([so]))) if self.have_mosi: ss, es = self.mosibits[-1][1], self.mosibits[0][2] + self.put(ss, es, self.out_bin, (1, bytes([si]))) self.put(ss, es, self.out_python, ['BITS', si_bits, so_bits]) self.put(ss, es, self.out_python, ['DATA', si, so]) @@ -176,14 +183,16 @@ class Decoder(srd.Decoder): self.mosibits = [] if self.have_mosi else None self.bitcount = 0 + def cs_asserted(self, cs): + active_low = (self.options['cs_polarity'] == 'active-low') + return (cs == 0) if active_low else (cs == 1) + def handle_bit(self, miso, mosi, clk, cs): # If this is the first bit of a dataword, save its sample number. if self.bitcount == 0: self.ss_block = self.samplenum - self.cs_was_deasserted = False - if self.have_cs: - active_low = (self.options['cs_polarity'] == 'active-low') - self.cs_was_deasserted = (cs == 1) if active_low else (cs == 0) + self.cs_was_deasserted = \ + not self.cs_asserted(cs) if self.have_cs else False ws = self.options['wordsize'] @@ -247,6 +256,10 @@ class Decoder(srd.Decoder): # Reset decoder state when CS# changes (and the CS# pin is used). self.reset_decoder_state() + # We only care about samples if CS# is asserted. + if self.have_cs and not self.cs_asserted(cs): + return + # Ignore sample if the clock pin hasn't changed. if clk == self.oldclk: return