Difference between revisions of "Protocol decoder:I2c"

From sigrok
Jump to navigation Jump to search
m
 
(7 intermediate revisions by 4 users not shown)
Line 3: Line 3:
| name            = Inter-Integrated Circuit
| name            = Inter-Integrated Circuit
| description    = Two-wire, multi-master, serial bus
| description    = Two-wire, multi-master, serial bus
| status          = <span style="background-color: lime">supported</span>
| status          = supported
| license        = GPLv2+
| license        = GPLv2+
| source_code_dir = i2c
| source_code_dir = i2c
Line 11: Line 11:
| probes          = SCL, SDA
| probes          = SCL, SDA
| optional_probes = &mdash;
| optional_probes = &mdash;
| options        = address_format
}}
}}


The '''i2c''' protocol decoder supports the [https://en.wikipedia.org/wiki/I%C2%B2C Inter-Integrated Circuit] (I²C) bidirectional, multi-master serial protocol.
The '''i2c''' protocol decoder supports the [https://en.wikipedia.org/wiki/I%C2%B2C Inter-Integrated Circuit] (I²C) bidirectional, multi-master serial protocol.
== Hardware ==
TODO.


== Protocol ==
== Protocol ==
Line 43: Line 40:


Later an optional 10bit slave addressing scheme was added.
Later an optional 10bit slave addressing scheme was added.
== Decoder ==
You can show the available options with the --show command:
<small>
$ '''sigrok-cli -P i2c --show'''
</small>
[http://www.eevblog.com/forum/testgear/ds1000z-series-serial-decode/msg536854/#msg536854 EEVblog forum post] showing how to use the '''i2c''' decoder, among other things (like reading the input from a CSV file, stacking decoders, binary output).
Another example of i2c decoder usage with sigrok-cli is:
<small>
$ '''sigrok-cli -i trace.sr -P i2c:scl=D1:sda=D0:address_format=unshifted -A i2c=address-read:address-write:data-read:data-write'''
i2c-1: Write
i2c-1: Address write: A0
i2c-1: Data write: 01
i2c-1: Data write: 50
i2c-1: Read
i2c-1: Address read: A1
i2c-1: Data read: FF
i2c-1: Data read: 11
i2c-1: Data read: 22
i2c-1: Data read: 33
i2c-1: Data read: 44
i2c-1: Data read: 55
</small>


== Resources ==
== Resources ==


* [https://en.wikipedia.org/wiki/I%C2%B2C Wikipedia: I²C]
* [https://en.wikipedia.org/wiki/I%C2%B2C Wikipedia: I²C]
* [http://www.nxp.com/acrobat/literature/9398/39340011.pdf NXP: I2C-bus specification and user manual] (v2.1)
* [http://www.nxp.com/documents/other/UM10204_v5.pdf NXP: I2C-bus specification and user manual] (v5)
* [http://www.nxp.com/acrobat/usermanuals/UM10204_3.pdf NXP: I2C-bus specification and user manual] (v3)


__FORCETOC__
__FORCETOC__


[[Category:Protocol decoder]]
[[Category:Protocol decoder]]

Latest revision as of 17:45, 7 December 2019

i2c
Pd i2c example.png
Name Inter-Integrated Circuit
Description Two-wire, multi-master, serial bus
Status supported
License GPLv2+
Source code decoders/i2c
Input logic
Output i2c
Probes SCL, SDA
Optional probes
Options address_format

The i2c protocol decoder supports the Inter-Integrated Circuit (I²C) bidirectional, multi-master serial protocol.

Protocol

The Inter-Integrated Circuit (I²C) bus is a bidirectional, multi-master bus using two signals (SCL = serial clock line, SDA = serial data line).

There can be many devices on the same bus. Each device can potentially be master or slave (and that can change during runtime). Both slave and master can potentially play the transmitter or receiver role (this can also change at runtime).

Possible maximum data rates:

  • Standard mode: 100 kbit/s
  • Fast mode: 400 kbit/s
  • Fast-mode Plus: 1 Mbit/s
  • High-speed mode: 3.4 Mbit/s

Basic protocol:

  • START condition: SDA = falling, SCL = high
  • Repeated START condition: same as START condition
  • Data bit sampling: SCL = rising
  • STOP condition: SDA = rising, SCL = high

All data bytes on SDA are exactly 8 bits long (transmitted MSB-first). Each byte has to be followed by a 9th ACK/NACK bit. If that bit is low, that indicates an ACK, if it's high that indicates a NACK.

After the first START condition, a master sends the device address of the slave it wants to talk to. Slave addresses are 7 bits long (MSB-first). After those 7 bits, a data direction bit is sent. If the bit is low that indicates a WRITE operation, if it's high that indicates a READ operation.

Later an optional 10bit slave addressing scheme was added.

Decoder

You can show the available options with the --show command:

$ sigrok-cli -P i2c --show

EEVblog forum post showing how to use the i2c decoder, among other things (like reading the input from a CSV file, stacking decoders, binary output).

Another example of i2c decoder usage with sigrok-cli is:

$ sigrok-cli -i trace.sr -P i2c:scl=D1:sda=D0:address_format=unshifted -A i2c=address-read:address-write:data-read:data-write
i2c-1: Write
i2c-1: Address write: A0
i2c-1: Data write: 01
i2c-1: Data write: 50
i2c-1: Read
i2c-1: Address read: A1
i2c-1: Data read: FF
i2c-1: Data read: 11
i2c-1: Data read: 22
i2c-1: Data read: 33
i2c-1: Data read: 44
i2c-1: Data read: 55

Resources