Overzicht en voordelen van de I2C-bus

Ontwikkeld door Philips in de jaren 80, I2C (alternatief gespeld als I2C) is een van de meest gebruikte seriële communicatieprotocollen in de elektronica geworden. I2C faciliteert communicatie tussen elektronische componenten of geïntegreerd circuits, of de componenten op hetzelfde zijn PCB of verbonden met een kabel.

Fase twee van het I2C-protocol
Mwnuk / CC BY 2.0 / Wikimedia Commons

Wat is het I2C-protocol?

I2C is een serieel communicatieprotocol waarvoor slechts twee signaallijnen nodig zijn. Het is ontworpen voor communicatie tussen chips op een printplaat (PCB). I2C is oorspronkelijk ontworpen voor 100 Kbps communicatie. In de loop der jaren zijn er echter snellere datatransmissiemodi ontwikkeld om snelheden tot 3,4 Mbit te bereiken.

Het belangrijkste kenmerk van I2C is de mogelijkheid om veel componenten op één communicatie bus met slechts twee draden, wat I2C perfect maakt voor eenvoudige toepassingen. Het I2C-protocol is vastgesteld als een officiële standaard, waardoor achterwaartse compatibiliteit tussen I2C-implementaties mogelijk is.

I2C-signalen

Het I2C-protocol gebruikt twee bidirectionele signaallijnen om te communiceren met de apparaten op de communicatiebus. De twee gebruikte signalen zijn:

  • Seriële datalijn (SDL)
  • Seriële dataklok (SDC)

De reden dat I2C slechts twee signalen kan gebruiken om met verschillende randapparatuur te communiceren, is de manier waarop communicatie langs de bus wordt afgehandeld. Elke I2C-communicatie begint met een 7-beetje (of 10-bits) adres dat het adres van het randapparaat oproept.

Hierdoor kunnen meerdere apparaten op de I2C-bus de rol van het primaire apparaat spelen, afhankelijk van de behoeften van het systeem. Om communicatiebotsingen te voorkomen, omvat het I2C-protocol arbitrage- en botsingsdetectiemogelijkheden, die een vlotte communicatie langs de bus mogelijk maken.

Voordelen van I2C

Als communicatieprotocol heeft I2C de volgende voordelen:

  • Flexibele datatransmissiesnelheden.
  • Langere communicatie op afstand dan SPI.
  • Elk apparaat op de bus is onafhankelijk adresseerbaar.
  • Apparaten hebben een eenvoudige primaire/secundaire relatie.
  • Het vereist slechts twee signaallijnen.
  • Het is in staat om meerdere primaire communicaties af te handelen door arbitrage en detectie van communicatiebotsingen te bieden.

Beperkingen van I2C

Met al deze voordelen heeft I2C ook een paar beperkingen die mogelijk moeten worden ontworpen. De belangrijkste I2C-beperkingen zijn:

  • Aangezien alleen 7-bits (of 10-bits) beschikbaar zijn voor apparaatadressering, kunnen apparaten op dezelfde bus hetzelfde adres delen. Sommige apparaten kunnen de laatste paar bits van het adres configureren, maar dit legt een beperking op aan apparaten op dezelfde bus.
  • Er zijn slechts enkele beperkte communicatiesnelheden beschikbaar en veel apparaten ondersteunen de overdracht bij hogere snelheden niet. Gedeeltelijke ondersteuning voor elke snelheid op de bus is vereist om te voorkomen dat langzamere apparaten gedeeltelijke transmissies opvangen die kunnen leiden tot operationele storingen.
  • Het gedeelde karakter van de I2C-bus kan ertoe leiden dat de hele bus blijft hangen wanneer een enkel apparaat op de bus stopt met werken. Door de stroom naar de bus te schakelen, kan de juiste werking worden hersteld.
  • Omdat apparaten hun eigen communicatiesnelheid instellen, kunnen langzamer werkende apparaten de werking van snellere apparaten vertragen.
  • I2C trekt meer stroom dan andere seriële communicatiebussen vanwege de open-drain-topologie van de communicatielijnen.
  • De beperkingen van de I2C-bus beperken doorgaans het aantal apparaten op een bus tot ongeveer een dozijn.

I2C-toepassingen

I2C is een geweldige optie voor toepassingen die lage kosten en eenvoudige implementatie vereisen in plaats van hoge snelheid. Veelvoorkomende toepassingen van het I2C-communicatieprotocol zijn bijvoorbeeld:

  • Het lezen van bepaalde geheugen-IC's.
  • Toegang tot DAC's en ADC's.
  • Door de gebruiker gerichte acties verzenden en controleren.
  • Hardware-sensoren uitlezen.
  • Communiceren met meerdere microcontrollers.