Saleae Support
HomeDownloadUser ForumContact Us
  • Saleae Support
  • Orders & Shipping
    • Place an Online Order
    • Place a Purchase Order (PO)
    • Get a Quote
    • Check your Order Status
    • Distributors
    • Pricing and Availability
    • Discounts
    • Tax & VAT Exemption
    • Saleae Business Information
    • Shipping Policy
    • Receiving Invoices
    • Sales FAQ
      • What Is Included with the Product?
      • What Accessories Should I Purchase with My Device?
      • Is the Saleae Software Sold Separately?
      • Does Saleae Have a Trade-In or Upgrade Plan?
      • How Can I Find the Current Status of My Order?
      • Part Numbers, ECCN, HS Codes, and Country of Origin
      • Discontinued Products
      • International Customs and Duty Information
      • Does Saleae Offer Demo Units or Units on Loan?
      • When Is My Card Charged?
      • Unable to Ship to PO Box Error
      • Referred a Friend? Email Us!
      • Does Saleae Provide Drop-Shipping Service?
  • Getting Started
    • Setup
    • Configure
    • Record
    • Navigate
    • Measure
    • Trigger
    • Protocols
  • User Guide
    • Product Summary
    • Safety & Warranty
    • Supported Voltages
    • Device Calibration
    • Using Logic
      • Navigating the Software
      • Connecting the Logic Analyzer
      • Logic Accessories
      • Device Settings
      • Capture Modes
      • Navigating Your Data
      • Time Bar Settings
      • Measurements, Timing Markers & Notes
      • Capture & Preset File Management
      • Exporting Data
      • Delete Part of your Capture
      • Analyzers
      • Data Table & Terminal View
      • Color Themes
      • Demo Mode
      • Software Glitch Filter
      • Keyboard Shortcuts
      • Automatic Updates
      • Message Us Directly
  • Software
    • Supported Operating Systems
    • Download
    • Installation
    • Firmware Updates
    • Driver Install
    • Legacy Software
      • Logic 1.x Download (Deprecated)
      • Logic 1.x Installation (Deprecated)
      • Logic 1.x Changelog (Deprecated)
      • Logic 1.x User Guide (Deprecated)
  • Protocol Analyzers
    • Supported Protocols
    • Analyzer User Guides
      • Async Serial Analyzer - User Guide
        • Decode UART
        • Decode RS-232, RS-485, & RS-422
      • SPI Analyzer - User Guide
      • I2C Analyzer - User Guide
      • CAN Analyzer - User Guide
      • Simple Parallel Analyzer - User Guide
      • I2S / PCM Analyzer - User Guide
      • DMX-512 Analyzer - User Guide
      • SMBus Analyzer - User Guide
      • Decode Differential and High Voltage Data
  • Software Extensions
    • Extension Installation
    • Create and Use Extensions
    • High-Level Analyzer (HLA) Extensions
      • Shared High Level Analyzers (HLAs)
    • Measurement Extensions
      • Analog Measurement Extensions
      • Digital Measurement Extensions
    • Extension File Format
    • About Third-Party Extensions
    • Disabling Marketplace Extensions
    • Publish an Extension
    • HLA - Analyzer Frame Format
      • Async Serial - Frame Format
      • I2C - Frame Format
      • SPI - Frame Format
      • CAN - Frame Format
      • Manchester - Frame Format
      • 1-Wire - Frame Format
      • Async RGB LED - Frame Format
      • Simple Parallel - Frame Format
      • LIN - Frame Format
      • I2S - Frame Format
    • API Documentation
  • Automation & Analyzer SDK
    • Automation API - Logic 2
    • Automation API - Legacy Logic 1.x
    • Protocol Analyzer SDK
      • FrameV2 / HLA Support - Analyzer SDK
      • Rename a Custom Analyzer
    • More Information on our SDKs
      • Can I Access Raw Data in Real Time?
      • Migrate Code to the New Analyzer SDK
      • Sharing Custom Low-Level Analyzer (LLA) Code
      • VB.NET Support for Automation
  • Datasheets & Specifications
    • Datasheets
    • Logic Hardware Revisions
    • Logic Dimensions
    • Compliance Documents
  • Troubleshooting
    • Installation Errors
    • The Software Fails to Launch
    • The Software Crashes
    • Logic is Not Detected
    • Getting your Machine ID
    • Getting your Software Crash Logs
    • Getting the Console Output
    • Location of Your Config File
    • Error Message: ReadTimeout
    • The Captured Data Looks Incorrect
    • The Captured Data is Corrupted
    • A Protocol Analyzer Produces Unexpected Results
    • The 'Waiting for Trigger' Window Never Closes
    • Device USB VID and PID Information
    • Error Message: Out of Memory Exception Was Thrown
    • PC Performance Issues with Logic
    • Data Export Is Not Working
    • Error Message: A device was found, but the software was unable to access it
    • Trouble Downloading the Latest Software
    • Logic Does Not Connect over USB 3.0
    • Why Am I Seeing Spikes in the Digital Capture?
    • Logic Interferes with My Circuit Operation
    • The Add Analyzer Menu Is Not Displaying
    • Other Drivers Interfere with Logic's Operation
    • The Maximum Sample Rate is Not Selectable
    • The Digital and Analog Recording on the Same Channel Appear Different
    • Advanced USB Debugging for USB 3.0 Users with Linux Kernels 3.3 and Older
    • Saving or Loading Anything Crashes the Software
    • Error Message: The application was unable to start correctly (0xc0000005)
    • Memory Usage with Triggered Captures
    • The Cabinet File disk1.cab has an Invalid Digital Signature (Logic 1.x)
    • Software Crashes with Virtual Desktops
    • Pre-Trigger Buffer is Incomplete
    • Linux Shared Memory Crash
    • Missing Files: api-ms-win-crt-runtime-l1-1-0.dll or msvcp140.dll
    • Known Issues on OS X
    • A Measurement Appears Incorrect
    • All Known Issues
    • USB 3.0 Cable Customer Notice (2017)
    • Warning Message: Logic Pro is running as a USB 2.0 device
    • Software Issues with Encryption Products
    • Linux Permission Requirements for Logic Software
    • My Rise Time and Fall Time Measurements Seem Incorrect
    • The Analog Waveform Loads Very Slowly after Capture Is Complete
    • Input Channels are Missing
    • Exported MATLAB File Does Not Open
    • Saleae Logic LED Blinks Red
    • Crashes Caused by macOS Mojave (10.14)
    • Troubleshooting Signal Crosstalk
    • Error Message: DeviceSetupFailure
    • Error Message: Unable to detect WebGL and Other GPU Issues
    • Warning Message: Unsupported Version
    • Error Function: Device2::SetupDevice
    • Warning Message: Possible USB Host Controller Problem Detected
    • Error Message: StartCommandError
    • Logic 2 Error Messages
    • PC Detection Test
    • CentOS Compatibility Issues
    • Error Message: Failed to Load Extension
    • CSV Export is Slow
    • Set an Analyzer Starting Point in your Capture
    • Logic 2 is Consuming Disk Space
    • Connection Conflicts with USB Debuggers
    • PC Restart Causes Logic to Disconnect
    • HLA Fails to Display Special Characters
    • Data Table Shows Incorrect Values
    • Error Message: Failed to Load Custom Analyzer
    • Error Message: Capture Stopped
    • Error Loading Marketplace Extensions
    • Error: Capture stopped because backlog data exceeded 90%
    • This Analyzer's Native Export is Not Supported in Logic 2
    • Mouse Scrolling Issues
    • Error: A device was found, but it was removed before initialization completed
    • Error: An unknown error occurred during device connection
    • Visual Studio Error: Failed to Launch Debug Adapter
    • VS Code Fails to Launch Python Automation API Script
    • Analog Waveforms Do Not Appear on Linux
    • Reinstall USB Host Controller Drivers
  • FAQ
    • Technical FAQ
      • System Requirements for Saleae Products
      • What Is the Normal Behavior of the LED?
      • What Is the Difference between Logic/Logic16 (Gen1) and Logic 8/Pro 8/Pro 16 (Gen2)?
      • Recommended USB 3.0 Host Controller Cards
      • Device Settings Configuration Tips
      • What Is the Worst Case Channel to Channel Skew?
      • What is Asynchronous Sampling?
      • Which Saleae Products Can Decode 4-Bit Parallel LCD Communications?
      • How Can I Compare Two Clock Signals for Synchronization and Drift?
      • Converting I2S/PCM Captures into Audio
      • My Capture Shows an Uneven Duty Cycle
      • Can I Create or Edit .logicdata Files?
      • Can Saleae Logic Run on ARM / Apple Processors?
      • What Annotations Are Supported?
      • Time & Memory Saving Tools
      • How Can I Record Power Consumption?
      • Moving Logic to Its Own Host Controller
      • How Long Does It Take to Save a File?
      • XMonad on Linux Causes Issues
      • What Is the Maximum Bandwidth of Logic?
      • How Long Can I Record Data?
      • Can I Export Protocol Results Between Timing Markers?
      • Can I Generate an Analog Graph from Digital Data?
      • Time Measurement Error
      • Can These Products Replace an Oscilloscope?
      • Can I Use Multiple Logics on a Single PC?
      • Native Windowing Features Are Not Working Such as Snap or Gestures
      • Opening .logicdata Capture Files
      • How to Choose the Right Logic Analyzer for You
      • Saleae Open Source Support
      • How to Trigger the End of a Capture Instead of the Start
      • Using the Hardware with USB Extension Cables, Through Virtual Machines, or Ethernet Extenders
      • Are the Ground Pins Required for Each Input Used?
      • Can Saleae Products Output Data?
      • Resolution of the Analog Inputs
      • What Sampling Rate Should I Use?
      • Can I Share Data Captures with Others?
      • Binary Export Format (Digital) - Logic 1.x
      • MATLAB Data Export Format - Legacy Logic 1.x
      • Recording Multiple Protocols at the Same Time
      • Changing the Display Radix (Base)
      • Which Logic Analyzer Should I Get?
      • How to View and Debug Firmware Variables, State, and Function Calls
      • Using Saleae Logic Devices with Third-Party Pattern Generators
      • Can Logic Operate with a Full-Speed USB Isolator?
      • Which Saleae Devices Support Analog Recording?
      • How to Manage Protocol Analyzers when Using the Socket API
      • How to Export Serial Protocol Results to a Raw Binary File
      • How to Trigger On a Pulse with No Maximum Time Limit - Logic 1.x
      • Finding Your USB 3.0 Host Controller Information
      • Logic Reports Different USB Current Requirements
      • Is It Possible to Adjust the Logic Thresholds for the Digital Inputs?
      • Why Does Channel 0 Use a Black Wire?
      • Software Shows Multiple Logic Analyzers Attached
      • Are the Input Channels Isolated from Each Other?
      • Are There Feature Differences in the Software when Different Logic Analyzers Are Used?
      • Packet Level Decoding Support in the Analyzer SDK
      • What Higher-Level Protocol Analysis Features Are Available?
      • Support for USB 3.0 and USB 3.1
      • How Can I Compare Signals from Different Captures?
      • Do the Saleae Logic Analyzers Support Trigger Out?
      • Why is the Length of my Capture Incorrect?
      • The Options Button is Missing
      • Can I Change the Voltage Range of the Analog Inputs?
      • How Does the ASCII Radix Display Characters?
      • Do I Have a USB 3.0 Port?
      • What Is the Best Way to Compare Similar Sequences of Protocol Data?
      • Which Version of the Software Should I Use?
      • Import Custom Low Level Analyzer
      • OSX Analyzer SDK Xcode Setup
      • Can Custom Analyzers Process Analog Channels?
      • Automating Long Overnight Captures
      • What Options Are There to Export Multiple Protocol Analyzer Results into the Same File?
      • Do the Saleae Devices Support AC Coupling?
      • Suggestions for Capturing Multiple Instances of a Triggered Event Automatically
      • How Many Protocol Analyzers Can Be Used at Once?
      • Is It Possible to Run the Saleae Software on a PC without SSE2 Instructions?
      • Is It Possible to Import Data into the Logic Software?
      • How Do I Convert Exported CSV Analog Data in Voltages?
      • Is There Cross-Platform Support for the SaleaeSocketApi C# Project
      • Why Does Logic Get Warm?
      • Binary Export Format (Analog) - Logic 1.x
      • Electrical Isolation Suggestions
      • FCC and CE Testing Recommendations
      • 'Save Capture' and 'Export Data' is Disabled in the Software
      • File Format Description for Exporting Protocol Analyzer Results
      • Is There a Newer Version of the Software Available?
      • Is There a Way to Change the Window Resolution?
      • How Can I Extract Recorded Data Using Socket API?
      • Does the Software Support Windows 10 Tablets or Windows RT Tablets?
      • Standalone Software Information
      • Does the Saleae Software Support the Original Logic and Logic 16?
      • Timing Markers Disappear When I Start a New Capture
      • What Sample Rate Settings Are Available? Can I Sample at a Slower Rate?
      • How Do I Differentiate Data in the Export File when Duplicate Analyzers Are Used?
      • Running Multiple Versions of the Software
      • Test Clip Differences - Gen 1 & Gen 2
      • USB-C Cable Recommendations
      • Is My Capture Data Private?
      • Ethernet Connectivity Suggestions
      • Binary Export Format - Logic 2
      • Viewing I2C Addresses as 8-bit
      • Can I use Python Packages in my Custom Extension?
      • Are the Inputs Synchronously Sampled or Sweep Sampled?
      • Is Logic Affected by the Log4j Exploit?
      • Connecting Remotely with SSH
      • Is Silent Installation Supported?
      • Is the .sal File Format Documented?
      • Export Data via Socket API
      • Running Logic in a CI Environment on Windows with the SYSTEM Account
    • General FAQ
      • How Do I Get More Help on an Issue That's Outside the Scope of Saleae Support?
      • How to Identify Each Saleae Device
      • License for the Saleae Logic Software, SDKs, and APIs
      • How Do You Pronounce Saleae?
      • How to Create Project Content for Saleae
  • Returns & Warranty
    • Submit a Warranty Claim
  • Community
    • Ideas & Feedback
    • User Forum
    • Community Projects
    • Community Created Accessories
    • Community Shared Analyzers
  • Tutorials
    • Oscilloscope Tutorial
    • Logic Analyzer Tutorial
    • Learning Portal
      • Digital Protocols
        • Learn Asynchronous Serial
        • Learn I2C - Inter-Integrated Circuit
        • Learn SPI - Serial Peripheral Interface
        • Learn CAN – Controller Area Network
        • Digital MultipleX (DMX512)
        • Manchester
        • 1-Wire
        • Learn I2S / PCM
        • Management Data Input/Output (MDIO)
        • BiSS C
        • HDMI Consumer Electronics Control (CEC)
        • PS/2 Keyboard/Mouse
        • Universal Serial Bus (USB) 2.0
        • Single-Wire Interface (SWI)
        • Simple Parallel
        • Local Interconnect Network (LIN)
        • Joint Test Action Group (JTAG)
      • Common Acronyms and Definitions
      • What is a Glitch?
      • What is RAM? Why Does Logic Use it?
      • What is a Display Radix?
      • What is Data Bandwidth? Can I Reduce this in Logic?
    • Example Projects
      • STM32 Nucleo Board - Digital Signals
      • STM32 Nucleo Board - Analog Signals
      • STM32 Nucleo Board - Analyzing UART
      • STM32 Nucleo Board - Analyzing SPI
      • STM32 Nucleo Board - Analyzing I2C
Powered by GitBook
On this page
  • Topology
  • Synchronization Without Enable Lines
  • START and STOP – I2C's Synchronization Events
  • Selecting a Slave to Talk To – Without Enable Lines
  • Writing a Bit on the Bus
  • A Step-by-Step I2C Transaction
  • The I2C Transaction, Summarized
  • Multiple Masters
  • Variations and Settings
  • Data Rates
  • 10-Bit Addresses
  • How 7-Bit Addresses Are Listed in Datasheets
  • Further Reading
Edit on GitHub
Export as PDF
  1. Tutorials
  2. Learning Portal
  3. Digital Protocols

Learn I2C - Inter-Integrated Circuit

I2C is a very common communication protocol typically used by microcontrollers to communicate with various peripheral ICs, typically on the same PCB. I2C has two wires: a data (SDA) line and a clock (SCL) line. Peripherals on the bus each have their own address. Among other reasons, I2C is attractive because it is highly standardized.

Topology

I2C uses just two wires: a data line called SDA and a clock line called SCL. Even as you add more devices to the bus, there are still only two wires.

Both I2C lines are open-drain and are pulled up with a resistor. To put a 1 on the wire, you change your output to high-z. To put a 0 on the wire, pull it low.

If using a microcontroller GPIO pin, change the pin to input mode to produce a 1; to produce a 0, you would output a 0 to the pin and then change its mode to output mode.

The voltage used in I2C can be any logic level (e.g., 3.3V) that all the participants can tolerate.

Synchronization Without Enable Lines

Recall that SPI enable lines provide synchronization. When the enable line transitions from inactive to active, this event establishes the beginning of a data transfer. How does I2C produce a synchronization event from only two wires?

With synchronous serial in general (including SPI), the data line is allowed to change pretty much any time it can get away with it. I2C changes this, establishing that under normal circumstances, the data line may only change state when the clock is low.

During normal data transfer, the data line may only change when the clock is low.

Since changing the data line when the clock is high is not allowed during normal data transfer, I2C "reserves" this case and uses it to signal a synchronization event.

There are two ways the data line can change while the clock is high. It can transition from 0 to 1 while the clock is high, or it can transition from 1 to 0. In I2C, these each mean something specific.

START and STOP – I2C's Synchronization Events

  • A START event occurs when the CLK (clock) is high and SDL (data line) falls (1 to 0).

  • A STOP event occurs when the CLK (clock) is high and SDL (data line) rises (0 to 1).

Selecting a Slave to Talk To – Without Enable Lines

With the SPI bus, the master has individual enable lines for each slave, allowing it to specify exactly which one it wanted to talk with.

Instead, I2C uses addresses. Here's how it works:

Every slave device on the bus has an address. These addresses are assigned by NXP and vary with the type of device (eeproms, DACs, sensors, etc.). Sometimes, devices have a few pins that can be used to slightly change their address. You can look up your device's address in its datasheet.

In I2C, addresses are 7-bits long.

Writing a Bit on the Bus

As long as SDA (data) does not change when CLK (clock) is high, data can be sent on the bus. CLK will go low, SDA will change to a 1 or 0 if it needs to, and then the clock will go high. In I2C, a clock rising edge means that the data line is valid.

CLK then goes low again, and the process repeats. During the time that SCK is high, SDA should not change unless the master is trying to signal START or STOP.

Bits are written with the most significant bit first.

A Step-by-Step I2C Transaction

Idle

When the bus is idle, no one is pulling either line low. They are both pulled up.

Start Event

The master pulls the SDA (data) line low. Since the CLK is still high, this special situation is recognized by anyone listening as a START event. The START event means "listen up in case your name is called."

Address, Read/Write Bit

Next, the master writes out 7 address bits (most significant first, as with all I2C data).

The master pulls the clock line low, changes (if required) the data line, and brings the clock line high, writing the first bit. Then the clock line is pulled low again, and the process repeats.

The 8th bit is the direction bit. If this bit is a 0, it means this: Hey, device, I'm going to write some data to you. If it is a 1, it means this: Hey, device, please send me some data.

Acknowledge

At this point, the master has written out 8 bits. The first 7 bits are the slave's address, and the 8th bit is if it will be writing data to the slave or reading data from it.

If there actually is device on the bus that has the particular address and is actually paying attention, that device will write the next bit (the 9th bit) as a zero.

Here is the way it works: The master lets the data line float (1). If a slave wants to acknowledge, it pulls down the data line (0). On the positive edge of the clock, the master checks the data line. If it's a 1, no device has acknowledged (a NAK). If it's a 0, then the device we addressed has heard us and is ready to move on to the next step.

Data Transfer

The very first 8 bits after a START indicate the address of the slave device, and direction data will flow.

The master can now write (or read) as much data as it wants from the slave. More clocks just mean more data bits. The only way out of this is with a START/RESTART or STOP event.

Data is sent one byte (8 bits) at a time, MSB first. If writing data to the device, the master controls both the data line and the clock line. If reading data from the device, the master controls just the clock line and lets the slave pull down the data line as it needs to.

Each byte sent or received is followed by a NAK (leaving the data line high) or ACK (pulling the data line low) by the slave. This acknowledgment bit is the 9th bit.

Clock Stretching

Sometimes a slave device may not be able to keep up with the master (remember, the master is controlling the clock). After each byte, the slave can force the master to wait. To do this, it first acknowledges the previous byte (as usual), waits for the master to bring the clock low again (in preparation for the first bit of the next byte), and then it pulls the clock low itself until it is ready to proceed with the next byte.

When it comes time for the master to "clock in" the next bit, it will release (float) the clock. If the slave device is not ready and is stretching the clock, the master will notice that the clock has not actually returned to a logic 1 and will know to wait.

STOP (or Repeated START)

This process of reading (or writing) bytes continues until one of two things happens: (1) The master decides it is done, or (2) the slave replies to one of the bytes with a NAK.

If the master receives a NAK from the slave, it must start over (issue a STOP or repeated START).

A repeated START is simply a START that has been preceded by another START without any STOP in between.

If there is only one master, then STOP and repeated START are functionally identical. Regardless, if a slave detects a START or a repeated START, it must start paying attention and listening to the address that will follow.

The only reason the STOP event is needed is to tell other master devices that the current master is done using the bus. We'll discuss multiple masters a little further on.

The I2C Transaction, Summarized

  1. The master performs a START (or repeated START).

  2. The master writes out 7 bits (the address of the slave it wants to talk to).

  3. The master writes out one bit, indicating if it wants to write to or read from the slave (0=write to slave, 1=read from slave).

  4. The slave, if it exists and is working, replies with an ACK. If the master gets a NAK, it must restart the process (go to step 1).

  5. The master, at its leisure, then reads (or writes) data to/from the slave.

    • Data are always sent MSB first, 8 bits at a time, followed by 1 acknowledge bit.

    • If the master is writing to the slave, it controls both the clock and the data line.

    • If the master is reading from the slave, it controls the clock line and lets the slave control the data line.

    • If the master received a NAK as the acknowledge bit, it must restart the process (go to step 1).

    • If the slave wants more time, it may hold the clock line low after the master has pulled it low following the acknowledge bit. When the master subsequently releases (floats) the clock line, it must notice that the clock line does not float high and must then wait until the slave releases it and it does become high.

  6. Communication continues, one byte at a time, with the addressed slave and in the direction indicated. To communicate with a different slave or change the direction of data transfer, the master must restart the procedure (go to step 1).

  7. If the master is completely done and wishes to allow other master devices access to the bus, it issues the STOP event.

Multiple Masters

In some situations, such as when devices can be "hot plugged" into a bus, there may be multiple masters on the same bus.

Masters monitor start and stop conditions on the bus and know not to use the bus until any START events are terminated with a STOP. In addition, when first starting up, a master should monitor the bus for any activity in case it has started up in the middle of bus communication, such as when it is hot plugged. If any activity at all is detected, it must wait until a STOP event.

In the rare (but possible) event that two or more masters begin talking at the same time, a process of arbitration occurs. This is actually quite simple. Since the I2C bus is pulled up, any master writing a 0 will win out over any master attempting to write a 1. After attempting to write a 1, each master checks to make sure the bus actually has a 1 on it. If not, it knows that it has lost arbitration with another master and must wait for a STOP event.

Variations and Settings

A significant difference between the different low-level protocols (SPI, serial, I2C, etc.) is the level of variation there can be in exactly how it operates.

One of the advantages of I2C (or disadvantages, depending on your point of view) is that it is fairly rigid in its specification.

Data Rates

Since I2C is a synchronous serial implementation, it can operate at a variety of clock speeds. Generally, I2C runs in the range of 100kbit to 400kbit. Speeds up to 3.4Mbit are possible, but a special, master-controlled pull-up is generally required to speed up the CLK rise time.

10-Bit Addresses

The I2C specification was extended to allow 10-bit addresses since, due to its popularity, more addresses were needed. 10-bit devices can co-exist with 7-bit devices on the same bus.

Here is how 10-bit addresses are used:

  • The master puts a 7-bit address on the bus, as usual.

  • This address is in the form 0b 1111 0XX.

  • The master then writes a the 8th bit, the direction bit, as usual.

  • The two XX bits in the address byte above specify the most significant bits of the 10-bit address.

  • Next, the master sends a 2nd byte, 0b XXXX XXXX, which comprises the least significant 8 bits of the 10-bit address.

How 7-Bit Addresses Are Listed in Datasheets

Imagine you are using a microcontroller to write out the 7-bit address and direction bit to initiate talking with a slave device. If using a I2C peripheral (or subroutine), you would load it with a single byte, with the address and direction bit combined.

Often, datasheets will refer to the slave's address as an 8-bit number, which includes the direction bit. Don't be confused. The address is really just 7 bits long.

Not surprisingly, there is some disagreement as to how the address and direction should be displayed. Therefore, the Saleae I2C analyzer has the following display options:

Reference

Example I2C Devices

Further Reading

Top Resources

Example I2C Parts

What Logic Decodes

  • Start Bit

  • Address Byte

  • Read/Write Bit

  • ACK/NAK

  • Data Byte(s)

  • Stop Bit

PreviousLearn Asynchronous SerialNextLearn SPI - Serial Peripheral Interface

Last updated 9 months ago

Wikipedia
I2C Specification 2.1
SparkFun Tutorial
NXP I2C Overview (video)
EEPROM
GPIO Expander
Digital to Analog converter (DAC)
Real time clock
Compass
Capacitive touch
Camera (also uses parallel data)
Programmable Oscillator
Nintendo Wiimote Accessories
Temperature sensor
Accelerometer
Gyro
Wikipedia
I2C Specification 2.1
EEPROM
GPIO Expander
Digital to Analog converter (DAC)
Real time clock
Compass
Capacitive touch
Camera - (also uses parallel data)
Programmable Oscillator
Nintendo Wiimote Accessories
Temperature sensor
Accelerometer
Gyro