De I2C-bus (spreek
uit als: I kwadraat C bus), eertijds aangeduid met IIC-bus
(Inter-IC-bus), is een synchrone, seriële bus, ontwikkeld
voor datacommunicatie tussen microprocessoren en andere IC's, meestal op één
enkele printplaat.
Geschiedenis
Ze werd in 1979 door Philips
ontwikkeld en in 1980 gepatenteerd als betrouwbaar en goedkoop alternatief ter
vervanging van een reeks van verschillende andere databussen die destijds
werden toegepast in consumentenapparaten.
Het systeem had aanvankelijk enkele nadelen, zoals een lage snelheid (100 kbit/sec) en een geringe storingszekerheid bij lange leidingen (in de praktijk mag de totale lengte van de bus zeker niet langer dan 1m zijn), maar later is de snelheid opgevoerd en zijn er speciale buffer-IC's ontwikkeld om de leidinglengte van de bus te vergroten.
Het systeem had aanvankelijk enkele nadelen, zoals een lage snelheid (100 kbit/sec) en een geringe storingszekerheid bij lange leidingen (in de praktijk mag de totale lengte van de bus zeker niet langer dan 1m zijn), maar later is de snelheid opgevoerd en zijn er speciale buffer-IC's ontwikkeld om de leidinglengte van de bus te vergroten.
Werking
I2C bestaat uit twee data lijnen
namelijk SDA (serial data) en SCL (serial clock).
Over de SDA lijn wordt de data verzonden en over de SCL lijn wordt het kloksignaal verzonden.
Beide lijnen worden hoog gehouden door een Pull-up weerstand te gebruiken van ongeveer 1800 Ohm.
Om te kunnen communiceren heeft I2C één master nodig en minimaal één slave.
De master heeft de controle over de I2C bus en genereert het kloksignaal, startbit en stopbit.
De slaves communiceren alleen nadat de master daartoe een verzoek stuurt.
Om te communiceren stuurt de master eerst een Start bit.
Dit bestaat uit een hoog naar laag signaal op de SDA lijn (flankgestuurd) terwijl de SCL lijn hoog is. Vervolgens stuurt de master een adres + een read/write bit over de I2C lijn.
Het read/write bit houdt in of de master data wil versturen naar de of ontvangen van de slave.
De slave die het aangeroepen adres heeft zal dan reageren met een Acknowledge zodat de master weet dat de aangeroepen IC actief is.
Nu kan de data worden verzonden.
Er wordt één byte per keer verzonden + een Acknowledge van de ontvanger om te bevestigen dat de data is ontvangen.
Nadat de data is verstuurd zal de master het stopbit verzenden:
Een laag naar hoog signaal op de SDA lijn (flankgestuurd) terwijl de SCL lijn hoog is.
Over de SDA lijn wordt de data verzonden en over de SCL lijn wordt het kloksignaal verzonden.
Beide lijnen worden hoog gehouden door een Pull-up weerstand te gebruiken van ongeveer 1800 Ohm.
Om te kunnen communiceren heeft I2C één master nodig en minimaal één slave.
De master heeft de controle over de I2C bus en genereert het kloksignaal, startbit en stopbit.
De slaves communiceren alleen nadat de master daartoe een verzoek stuurt.
Om te communiceren stuurt de master eerst een Start bit.
Dit bestaat uit een hoog naar laag signaal op de SDA lijn (flankgestuurd) terwijl de SCL lijn hoog is. Vervolgens stuurt de master een adres + een read/write bit over de I2C lijn.
Het read/write bit houdt in of de master data wil versturen naar de of ontvangen van de slave.
De slave die het aangeroepen adres heeft zal dan reageren met een Acknowledge zodat de master weet dat de aangeroepen IC actief is.
Nu kan de data worden verzonden.
Er wordt één byte per keer verzonden + een Acknowledge van de ontvanger om te bevestigen dat de data is ontvangen.
Nadat de data is verstuurd zal de master het stopbit verzenden:
Een laag naar hoog signaal op de SDA lijn (flankgestuurd) terwijl de SCL lijn hoog is.
De I2C-bus is een
tweedraads dataverbinding tussen een of meer processoren (masters) en speciale
periferiecomponenten (slaves).
Al deze componenten zijn op dezelfde
bus aangesloten en hebben elk hun eigen unieke adres.
Adressen en data worden via dezelfde
lijnen verzonden.
De I2C-bus maakt een
uiterst eenvoudige verbinding mogelijk tussen vele IC's, waarbij uitbreidingen
achteraf probleemloos kunnen worden gerealiseerd.
Op de I2C-bus kunnen alle
IC's worden aangesloten die het speciale busprotocol beheersen.
Naast RAM-, EEPROM- en poort-IC's,
MQ-en D/A-omzetters en timers zijn dit vele speciale IC's zoals displaydrivers
of IC's voor de televisietechniek.
Al deze IC's kunnen zonder meer via
twee aansluitingen van de parallelle poort van de PC worden aangestuurd.
Wanneer we bereid zijn een paar
extra onderdelen te gebruiken kunnen we de IC's ook via de seriële poort
aansturen.
Voordelen
De voordelen zijn echter al even
belangrijk, wanneer aangewend in geschikte toepassingen.
De belangrijkste voordelen zijn:
De belangrijkste voordelen zijn:
- Lage kostprijs.
- Eenvoudige bedrading (slechts twee signaalleidingen).
- Weinig soldeerpunten, kleine IC's.
- Uitgebreid gamma IC's met de I2C interface.
- Compatibele IC's van andere fabrikanten.
- Robuuste bouw.
- Langzame perifere chips kunnen wachtcycli afdwingen.
- Geïntegreerde multimastermogelijkheid, dat wil zeggen meerdere microcontrollers (masters) kunnen dezelfde bus gebruiken en zelfs onderling communiceren.
Nadelen
Naast de vele voordelen zijn er ook
enkele nadelen:
- Als er één IC niet goed functioneert in de I2C bus dan kan dit de hele lijn van I2C blokkeren zodat er helemaal geen communicatie meer op de I2C lijnen kan plaatsvinden.
- I2C is traag bij grotere hoeveelheden data.
Latere versies
In latere versies van de I2C-bus
zijn er verschillende verbeteringen aangebracht.
Zo is onder andere de maximale snelheid verhoogd naar 400 kbit/sec (Fast-mode) en weer later naar 3,4 Mbit/sec (High-speed mode), is de adresseringsruimte van aangesloten IC's vergroot van 7 naar 10 bit en zijn er voorzieningen gekomen om I2C-bussen met verschillende voedingsspanningen te verbinden.
Zo is onder andere de maximale snelheid verhoogd naar 400 kbit/sec (Fast-mode) en weer later naar 3,4 Mbit/sec (High-speed mode), is de adresseringsruimte van aangesloten IC's vergroot van 7 naar 10 bit en zijn er voorzieningen gekomen om I2C-bussen met verschillende voedingsspanningen te verbinden.
Adressering van I2C-componenten
Algemeen
Iedere
bouwsteen die vanuit de bus moet kunnen worden aangesproken (geadresseerd),
heeft ter onderscheiding van andere bouwstenen een uniek adres: het slave
adres.
Bouwstenen die uitsluitend als master optreden hebben geen adres nodig.
Oorspronkelijk voorzag het I2C-concept in 7-bits adressen.
Hiermee zijn maximaal 128 bouwstenen aan te sturen.
Er zijn echter bepaalde adressen gereserveerd.
Philips heeft echter ook een mogelijkheid gemaakt dat ook 10-bits adressen mogelijk zijn.
Omdat het gebruik van 7-bits en 10-bits adressen gelijktijdig mogelijk is, is de 10 bit modus ietwat geforceerd.
De adressering is voor de 10-bit modus dus wat omslachtig.
Bouwstenen die uitsluitend als master optreden hebben geen adres nodig.
Oorspronkelijk voorzag het I2C-concept in 7-bits adressen.
Hiermee zijn maximaal 128 bouwstenen aan te sturen.
Er zijn echter bepaalde adressen gereserveerd.
Philips heeft echter ook een mogelijkheid gemaakt dat ook 10-bits adressen mogelijk zijn.
Omdat het gebruik van 7-bits en 10-bits adressen gelijktijdig mogelijk is, is de 10 bit modus ietwat geforceerd.
De adressering is voor de 10-bit modus dus wat omslachtig.
7-bit adressering
Als een master met een slave wil communiceren, moet
hij eerst de bus opvragen via een start conditie.
Dan zendt hij als eerste een byte waarvan de eerste 7 bits het adres vormen.
Het laatste bit legt de transportrichting vast ('0' = schrijven, '1' = lezen).
Dan zendt hij als eerste een byte waarvan de eerste 7 bits het adres vormen.
Het laatste bit legt de transportrichting vast ('0' = schrijven, '1' = lezen).
Na een startconditie moeten alle aangesloten slaves de
bus bewaken om dit byte te lezen.
Hierbij kunnen langzame slaves de master tot wachten dwingen.
Nadat alle 8 bits zijn ontvangen vergelijkt iedere slave het ontvangen adres met zijn eigen adres.
Dit adres ligt vast of het kan handmatig zijn ingesteld.
Bouwstenen met een afwijkend adres nemen afscheid en wachten op een volgende startconditie.
De bouwsteen met het juiste adres stuurt een acknowledge-bit.
Hierbij kunnen langzame slaves de master tot wachten dwingen.
Nadat alle 8 bits zijn ontvangen vergelijkt iedere slave het ontvangen adres met zijn eigen adres.
Dit adres ligt vast of het kan handmatig zijn ingesteld.
Bouwstenen met een afwijkend adres nemen afscheid en wachten op een volgende startconditie.
De bouwsteen met het juiste adres stuurt een acknowledge-bit.
Nu weet de master dat de geadresseerde slave tot data
transport in staat is.
Komt er geen acknowledge-bit dan is de bouwsteen beschadigd of er is geen bouwsteen aanwezig op dat adres.
Komt er geen acknowledge-bit dan is de bouwsteen beschadigd of er is geen bouwsteen aanwezig op dat adres.
10-bit adressering
Aangezien de meeste adressen binnen de 7 bits
adresruimte al bezet zijn, heeft Philips voor toekomstige bouwstenen een
10-bits adresmodus gemaakt.
Deze modus is compatibel met de 7-bit adresmodus.
Dus kunnen 7-bit en 10-bit bouwstenen op dezelfde bus worden aangesloten.
Het basisidee achter 10-bit adressering is dat er twee adresbytes worden gebruikt.
Daartoe bevat het eerste adresbyte een combinatie die is gereserveerd voor deze wijze van adresuitbreiding.
Deze modus is compatibel met de 7-bit adresmodus.
Dus kunnen 7-bit en 10-bit bouwstenen op dezelfde bus worden aangesloten.
Het basisidee achter 10-bit adressering is dat er twee adresbytes worden gebruikt.
Daartoe bevat het eerste adresbyte een combinatie die is gereserveerd voor deze wijze van adresuitbreiding.
Daarna volgt een tweede byte dat de verdere adresbits
bevat.
Het richtingsbit krijgt hierbij een ietwat andere betekenis.
De 7-bits in het eerste adresbyte hebben de gedaante 11110XX.XX betekend hierbij de beide hoogst waardige adresbits van het 10-bits adres.
De andere acht bits volgen in het tweede adresbyte.
De geadresseerde slave moet beide bytes bevestigen met een acknowledge.
Bij de behandeling van genaral call adress en de startbyte procedure moet de slave reageren als een 7-bit bouwsteen.
Dat betekent echter geen beperking en is gewoon logisch.
Het richtingsbit krijgt hierbij een ietwat andere betekenis.
De 7-bits in het eerste adresbyte hebben de gedaante 11110XX.XX betekend hierbij de beide hoogst waardige adresbits van het 10-bits adres.
De andere acht bits volgen in het tweede adresbyte.
De geadresseerde slave moet beide bytes bevestigen met een acknowledge.
Bij de behandeling van genaral call adress en de startbyte procedure moet de slave reageren als een 7-bit bouwsteen.
Dat betekent echter geen beperking en is gewoon logisch.
Condities
De I2C bus bestaat uit twee actieve lijnen
en een massa verbinding.
De actieve lijnen zijn SDA en SCL. Beide lijnen zijn bidirectioneel.
SDA is de Serial DAta lijn en SCL is de Serial CLock lijn.
De actieve lijnen zijn SDA en SCL. Beide lijnen zijn bidirectioneel.
SDA is de Serial DAta lijn en SCL is de Serial CLock lijn.
Elke component die aan de lijn hangt heeft een uniek
adres.
Elke component kan afhankelijk van zijn functie zowel als zender als ontvanger werken.
De Master is het IC dat de commando`s op de bus plaatst. In de I2C protocol specificatie staat dat het IC, dat de datatransfer begint, de Master is. Elk ander IC is dan een Slave. De I2C bus is een multi-master bus. Dit houdt in dat er meer dan één IC de mogelijkheid bezit om de datatransfer te beginnen. De Master IC`s zijn meestal microcontrollers die het geheel besturen.
Elke component kan afhankelijk van zijn functie zowel als zender als ontvanger werken.
De Master is het IC dat de commando`s op de bus plaatst. In de I2C protocol specificatie staat dat het IC, dat de datatransfer begint, de Master is. Elk ander IC is dan een Slave. De I2C bus is een multi-master bus. Dit houdt in dat er meer dan één IC de mogelijkheid bezit om de datatransfer te beginnen. De Master IC`s zijn meestal microcontrollers die het geheel besturen.
Veronderstel dat de controller met een slave wil
communiceren.
(De cursief gedrukte woorden worden in het onderdeel
‘bustoestanden’ uitgelegd.)
De controller begint met een Start conditie op
de bus te plaatsen.
De werkt als een attentie signaal voor alle IC`s op de bus.
Alle IC`s luisteren nu op de bus naar binnenkomende data.
De werkt als een attentie signaal voor alle IC`s op de bus.
Alle IC`s luisteren nu op de bus naar binnenkomende data.
Dan zendt de controller het Adres van het
gewenste IC door.
Alle IC`s zullen het binnenkomende adres vergelijken met hun eigen adres.
De IC’s die een ander adres hebben reageren niet en wachten tot de bus terug vrijkomt.
Het IC dat wel het juiste adres heeft geneert een Acknowledge op de bus.
Alle IC`s zullen het binnenkomende adres vergelijken met hun eigen adres.
De IC’s die een ander adres hebben reageren niet en wachten tot de bus terug vrijkomt.
Het IC dat wel het juiste adres heeft geneert een Acknowledge op de bus.
Als de controller deze Acknowledge terugkrijgt,
dan begint hij met data te verzenden.
Bij de overdracht van 8 bits (een byte) heb je acht klokpulsen nodig op de SCL-lijn.
Deze klokpulsen worden door de master gegenereerd.
De geadresseerde slave mag echter de laagtoestand naar eigen behoefte verlengen.
Deze procedure wordt ook wel clock stretching genoemd.
Zo kunnen langzame slaven wachttijden inlassen.
De master moet hiermee rekening houden.
Bij de overdracht van 8 bits (een byte) heb je acht klokpulsen nodig op de SCL-lijn.
Deze klokpulsen worden door de master gegenereerd.
De geadresseerde slave mag echter de laagtoestand naar eigen behoefte verlengen.
Deze procedure wordt ook wel clock stretching genoemd.
Zo kunnen langzame slaven wachttijden inlassen.
De master moet hiermee rekening houden.
Bij het transport wordt het hoogwaardigste bit (MSB)
van een byte als eerste verzonden, en het laagstwaardige bit (LSB) als laatste.
Na het verzenden van de data geeft de controller een Stop conditie.
Hiermee wordt de bus terug vrijgegeven.
De IC`s die op de bus hangen beginnen nu terug te luisteren naar een nieuwe Start conditie.
Na het verzenden van de data geeft de controller een Stop conditie.
Hiermee wordt de bus terug vrijgegeven.
De IC`s die op de bus hangen beginnen nu terug te luisteren naar een nieuwe Start conditie.
Toepassingen van I2C.
Omdat het een eenvoudig toe te passen protocol is,
zijn er zeer veel toepassingen van I2C.
Je kunt ze in bijna alle elektronica producten vinden.
Meestal beseffen we ons niet eens dat er in een product zoveel elektronica aanwezig is en zeker geen protocol om de elektronica met elkaar te laten communiceren.
Je kunt ze in bijna alle elektronica producten vinden.
Meestal beseffen we ons niet eens dat er in een product zoveel elektronica aanwezig is en zeker geen protocol om de elektronica met elkaar te laten communiceren.
Hier volgt een lijst van producten waar I2C in aanwezig kan zijn :
- TV's
- Videorecorders
- Radio's
- Versterkers
- Mengpanelen
- Decoders
- Wasmachines
- LCD displays
I2C interface op de Raspberry Pi
Op de Raspberry Pi kun je de I2C interface gebruiken met de pins
aangegeven op het schema hieronder.
De keuze welke voltage je wilt gaan gebruiken is uiteraard aan jezelf.
De keuze welke voltage je wilt gaan gebruiken is uiteraard aan jezelf.
Geen opmerkingen:
Een reactie posten