X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=decoders%2Fi2c.py;h=e63ab8525454eb48ae10a2b244e01bb0862aa4b1;hb=876f83fd3396ce581e700741e58414c2f4f6277e;hp=b0273c092b453cc105d3efabb259d5b206e1fb90;hpb=ea90233eb2e76cca10adf3ed3c016c5b6cb993e1;p=libsigrokdecode.git diff --git a/decoders/i2c.py b/decoders/i2c.py index b0273c0..e63ab85 100644 --- a/decoders/i2c.py +++ b/decoders/i2c.py @@ -22,7 +22,6 @@ # I2C protocol decoder # -# # The Inter-Integrated Circuit (I2C) bus is a bidirectional, multi-master # bus using two signals (SCL = serial clock line, SDA = serial data line). # @@ -69,28 +68,28 @@ # TODO: Handle multiple different I2C devices on same bus # -> we need to decode multiple protocols at the same time. -# -# I2C protocol output format: -# -# The protocol output consists of a (Python) list of I2C "packets", each of -# which is of the form -# -# [, , ] -# -# is one of: -# - 'START' (START condition) -# - 'START_REPEAT' (Repeated START) -# - 'ADDRESS_READ' (Slave address, read) -# - 'ADDRESS_WRITE' (Slave address, write) -# - 'DATA_READ' (Data, read) -# - 'DATA_WRITE' (Data, write) -# - 'STOP' (STOP condition) -# -# is the data or address byte associated with the ADDRESS_* and DATA_* -# command. For START, START_REPEAT and STOP, this is None. -# -# is either 'ACK' or 'NACK', but may also be None. -# +""" +I2C protocol output format: + +The protocol output consists of a (Python) list of I2C "packets", each of +which is of the form + + [ _i2c_command_, _data_, _ack_bit_ ] + +_i2c_command_ is one of: + - 'START' (START condition) + - 'START_REPEAT' (Repeated START) + - 'ADDRESS_READ' (Address, read) + - 'ADDRESS_WRITE' (Address, write) + - 'DATA_READ' (Data, read) + - 'DATA_WRITE' (Data, write) + - 'STOP' (STOP condition) + +_data_ is the data or address byte associated with the ADDRESS_* and DATA_* +command. For START, START_REPEAT and STOP, this is None. + +_ack_bit_ is either 'ACK' or 'NACK', but may also be None. +""" import sigrokdecode as srd @@ -102,14 +101,14 @@ ANN_RAW = 2 # Values are verbose and short annotation, respectively. protocol = { 'START': ['START', 'S'], - 'START_REPEAT': ['START REPEAT', 'Sr'], + 'START REPEAT': ['START REPEAT', 'Sr'], 'STOP': ['STOP', 'P'], 'ACK': ['ACK', 'A'], 'NACK': ['NACK', 'N'], - 'ADDRESS_READ': ['ADDRESS READ', 'AR'], - 'ADDRESS_WRITE': ['ADDRESS WRITE', 'AW'], - 'DATA_READ': ['DATA READ', 'DR'], - 'DATA_WRITE': ['DATA WRITE', 'DW'], + 'ADDRESS READ': ['ADDRESS READ', 'AR'], + 'ADDRESS WRITE': ['ADDRESS WRITE', 'AW'], + 'DATA READ': ['DATA READ', 'DR'], + 'DATA WRITE': ['DATA WRITE', 'DW'], } # States @@ -186,7 +185,7 @@ class Decoder(srd.Decoder): return False def found_start(self, scl, sda): - cmd = 'START_REPEAT' if (self.is_repeat_start == 1) else 'START' + cmd = 'START REPEAT' if (self.is_repeat_start == 1) else 'START' self.put(self.out_proto, [cmd, None, None]) self.put(self.out_ann, [ANN_SHIFTED, [protocol[cmd][0]]]) @@ -234,13 +233,13 @@ class Decoder(srd.Decoder): ack_bit = 'NACK' if (sda == 1) else 'ACK' if self.state == FIND_ADDRESS and self.wr == 1: - cmd = 'ADDRESS_WRITE' + cmd = 'ADDRESS WRITE' elif self.state == FIND_ADDRESS and self.wr == 0: - cmd = 'ADDRESS_READ' + cmd = 'ADDRESS READ' elif self.state == FIND_DATA and self.wr == 1: - cmd = 'DATA_WRITE' + cmd = 'DATA WRITE' elif self.state == FIND_DATA and self.wr == 0: - cmd = 'DATA_READ' + cmd = 'DATA READ' self.put(self.out_proto, [cmd, d, ack_bit]) self.put(self.out_ann, [ANN_SHIFTED,