From: Uwe Hermann Date: Wed, 16 May 2012 20:48:47 +0000 (+0200) Subject: srd: spi: Document output protocol, send CS# changes. X-Git-Tag: libsigrokdecode-0.1.1~116 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=3e3c03309ee21d839f85e981d361ca77b08d5ba0;p=libsigrokdecode.git srd: spi: Document output protocol, send CS# changes. As per guidelines in HACKING, the protocol "commands"/items should be ALLCAPS, thus change 'data' to 'DATA'. Also, fix MX25Lxx05D protocol decoder accordingly, currently the only one we have which stacks on top of SPI. Add a new 'CS-CHANGE' output protocol item, which is sent upon every change of the CS# pin value (either 0->1, or vice versa). This is needed by various higher-level PDs. --- diff --git a/decoders/mx25lxx05d/mx25lxx05d.py b/decoders/mx25lxx05d/mx25lxx05d.py index f7c8476..eb0e798 100644 --- a/decoders/mx25lxx05d/mx25lxx05d.py +++ b/decoders/mx25lxx05d/mx25lxx05d.py @@ -232,7 +232,7 @@ class Decoder(srd.Decoder): ptype, mosi, miso = data - if ptype != 'data': + if ptype != 'DATA': return cmd = mosi diff --git a/decoders/spi/__init__.py b/decoders/spi/__init__.py index c1b5889..8734acf 100644 --- a/decoders/spi/__init__.py +++ b/decoders/spi/__init__.py @@ -23,6 +23,24 @@ Serial Peripheral Interface protocol decoder. Details: TODO + +Protocol output format: + +SPI packet: +[, , ] + +Commands: + - 'DATA': contains the MISO data, contains the MOSI data. + The data is _usually_ 8 bits (but can also be fewer or more bits). + Both data items are Python numbers, not strings. + - 'CS CHANGE': is the old CS# pin value, is the new value. + Both data items are Python numbers (0/1), not strings. + +Example: + ['CS-CHANGE', 1, 0] + ['DATA', 0xff, 0x3a] + ['DATA', 0x65, 0x00] + ['CS-CHANGE', 0, 1] ''' from .spi import * diff --git a/decoders/spi/spi.py b/decoders/spi/spi.py index 72a3dfb..2f10ef4 100644 --- a/decoders/spi/spi.py +++ b/decoders/spi/spi.py @@ -73,6 +73,7 @@ class Decoder(srd.Decoder): self.bytesreceived = 0 self.samplenum = -1 self.cs_was_deasserted_during_data_word = 0 + self.oldcs = -1 def start(self, metadata): self.out_proto = self.add(srd.OUTPUT_PROTO, 'spi') @@ -85,6 +86,14 @@ class Decoder(srd.Decoder): # TODO: Either MISO or MOSI could be optional. CS# is optional. for (self.samplenum, (miso, mosi, sck, cs)) in data: + if self.oldcs != cs: + # Send all CS# pin value changes. + self.put(self.samplenum, self.samplenum, self.out_proto, + ['CS-CHANGE', self.oldcs, cs]) + self.put(self.samplenum, self.samplenum, self.out_ann, + [0, ['CS-CHANGE: %d->%d' % (self.oldcs, cs)]]) + self.oldcs = cs + # Ignore sample if the clock pin hasn't changed. if sck == self.oldsck: continue @@ -131,7 +140,7 @@ class Decoder(srd.Decoder): continue self.put(self.start_sample, self.samplenum, self.out_proto, - ['data', self.mosidata, self.misodata]) + ['DATA', self.mosidata, self.misodata]) self.put(self.start_sample, self.samplenum, self.out_ann, [ANN_HEX, ['MOSI: 0x%02x, MISO: 0x%02x' % (self.mosidata, self.misodata)]])