I²C logo

I²C

Az I²C (Inter-Integrated Circuit) egy multi-master, multi-slave, csomagkapcsolt szerial busz, melyet a Philips Semiconductor (ma NXP Semiconductors) feljesztett ki.

Az I²C jellemzően kis távolságú, viszonylag alacsony sebességű IC és fedélzeti rendszerek közötti kommunikációra szokás alkalmazni.

2006. október 10 óta az I²C protokoll alkalmazásához már nem szükséges engedélyezési díjat fizetni, ez a felmentés azonban nem vonatkozik az NXP által kiosztott I²C slave címekre, azokért továbbra is fizetni kell.

Több versenytárs, mint például a Siemens AG (később Infineon Technologies AG, jelenleg Intel mobilkommunikáció), az NEC, a Texas Instruments, az STMicroelectronics (korábban SGS-Thomson), a Motorola (később Freescale, most az NXP), a Nordic Semiconductor és az Intersil, az 1990-es évek közepe óta I²C kompatibilis termékeket dobott a piacra.

Az 1995-ben az Intel által definiált SMBus az I²C részhalmaza, amely azonban kötöttebb szabályokat alkalmaz. Az SMBus egyik célja a robusztusság és az interoperabilitás előmozdítása volt, ennek megfelelően a modern I²C rendszerek jó pár eljárást átemeltek az SMBus-ból, néha támogatva mind az I²C, mind az SMBus-t.

A busz maximális távolsága elvileg 7,6 m, de jellemzően 2-3 m-en szokás alkalmazni.

  • 1982-ben az eredeti 100 kHz-es I²C rendszert egyszerű belső buszrendszerként hozták létre az épületvezérlő elektronika számára, különböző Philips chipekkel.
  • 1992-ben az 1. verzió 400 kHz gyors módot (FM) és 10 bites címzési módot adott hozzá az 1008 csomópontos kapacitás növeléséhez. Ez volt az első szabványosított változat.
  • 1998-ban a 2. verzió hozzáadta a 3,4 MHz -es nagysebességű módot (HS) és kibővítette az energiatakarékossági követelményekkel.
  • 2000-ben a 2.1-es változat tisztázta a 2. verziót, jelentős funkcionális változások nélkül.
  • 2007-ben a 3-as verzió 1 MHz-es Fast-mode plus (FM+) (20 mA-es meghajtók használatával) és egy eszközazonosító mechanizmust adott a szabványhoz.
  • 2012-ben a 4-es verzió az új USDA (adat) és az USCL (óra) vonalakhoz 5 MHz - es ultragyors módot (UFM) adott a szabványhoz, és egy pull-up ellenállás nélküli push-pull logikával hozzárendelt egy gyártói azonosító táblát. Ez csak egy egyirányú busz.
  • 2012-ben az 5. változat kijavította a hibákat.
  • 2014-ben a 6. verzió két grafikont korrigált. Ez az aktuális szabvány.

Az I²C az adatátvitelhez egy nyitott végű vezetékpárt használ, a soros adatvonalat (SDA) és a soros órajelet (SCL). A két vezetéket ellenállásokkal kell üzemi feszültségre húzni, a vezetékek jellemzően 5V, vagy 3,3V feszültséggel üzemelnek, de ettől eltérő feszültség-specifikáció sem kizárt.

A busz jellemzően 7 vagy 10 bites címzést alkalmaz, de esetenként a 16 bites megoldás is előfordul. Az átvitel jellemző sebességei:

Mód Sebesség
Alacsony sebességű üzemmód10 kbit / sec
szabványos üzemmód100 kbit / sec
gyors mód (FM) 400 kbit / sec
gyors mód plusz (FM+) 1 Mbit / sec
nagysebességű mód (HS) 3,4 Mbit / sec

Minden I²C busz két jelből áll: SCL és SDA. Az SCL az órajel, az SDA az adatjel. Az órajelet mindig az aktuális busz-master generálja; egyes slave eszközök időnként alacsonyabb sebességre kényszeríthetik az órát. Ez az úgynevezett clock stretching, és a protokoll is tartalmazza ezt a funkciót.

Ellentétben az UART vagy SPI kapcsolatokkal, az I²C buszvezérlők "nyitott lefolyásúak", vagyis a jelvezetéket alacsonyra húzhatják, de magasra nem. Minden jelvezetéknek kell, hogy legyen egy felhúzó ellenállása arra az esetre, ha egyetlen eszköz sem használja azt, akkor a jelszint magas állapotba kerüljön "magától".

I²C a hardveres szinten

Az ökölszabály szerint a felhúzóellenállások mindig 4.7k-ok, de ez nem minden esetben válik be. Az I²C egy meglehetősen robusztus protokoll, de jellemzően csak rövid vezetékekkel (2-3m) használható. Hosszabb vezetékek esetén az alkalmazott ellenállások értékét érdemes csökkenteni.

Jelszintek

Az I²C jelszintjei jellemzően 5V, vagy 3,3V, amik, ha a TTL logikai szintjeik még összeegyeztethetőek, lehetővé teszik, hogy különböző jelszintű eszközöket is közvetlenül egy I²C hálózatba illesszünk. Ha a jelszintkülömbségek túl nagynak bizonyulnának, a kritikus részek közé jelszintváltót kell beiktatni.

Normál, 7 bites címzésű telegramváltás

I²C normál, 7 bites címzésű telegramváltás

jellépésleírás
1StartInduláskor a master először az SDA-t, majd az SCL-t is alacsonyra húzza. Ez jelzés az összes hálózati résztvevő felé a forgalmazás indítására. Több jelenlevő master esetén az kommunikálhat, amelyik először húzza le az SDA-t. Összeakadás esetén a műveletet ismételni kell.
2Címkeret (A6..A0)A 7 bites címzés esetén ez a tartalom megy ki először. Az MSB az első bit.
3R/WA nyolcadik bit azt jelzi, hogy olvasási vagy írási művelet következik. (1: olvasás, 0: írás)
4NACK / ACKA 9. bit Ennél a bitnél a master a címzett egység "reakcióját" várja. Ha az megkapta a telegram eddigi tartalmát, a 9. óraimpulzus előtt le kell húznia az SDA vonalat. Ha ezt nem teszi meg, a master arra fog következtetni, hogy az egység nem érhető el, folytatja a forgalmazást más egységekkel.
5Adatkeret fogadásaAz adatkeret hossza a protokoll által nincs szabályozva. Sok esetben a slave-ek, ha nagyobb adatmennyiséget kell forgalmazniuk, az egymást követő telegramokban más-más regiszterek tartalmát küldik el.
6STOPElőször az SCL, majd az SDA is magas állapotba lesz "eresztve" a master oldaláról.

10 bites címzésű telegramváltás

I²C 10 bites címzésű telegramváltás

jellépésleírás
1StartMegegyezik a 7 bites címzéssel; induláskor a master először az SDA-t, majd az SCL-t is alacsonyra húzza.
21. Címkeret (b11110xyz)Az első címkeret első 4 bitje "1". Az x lesz a cím 0. (MSB) bitje, az y az 1. címbit, a z pedig az R/W bit (1: olvasás, 0: írás).
32. Címkeret Ebben a keretben a master kiadja a további címbiteket is.
4ACKA 2. címkeret utolsó (ACK) bitpozíciójában kell reagálnia a slave-nek, csakúgy, mint a 7 bites változatban.
5 A további forgalmazás - a kompatibilitás okán - megegyezik a 7 bites változattal.

A 10 és 7 bites címzés egy hálózaton, egyidejűleg is bonyolódhat, mivel a 7 bites címzésben nem létezhet a vezető "11110" címsorozat.

Speciális funkciókra fenntartott címek

0000000 0Általános hívás
0000000 1Start bájt
0000001 XCBUS címek
0000010 XKülönféle buszok számára fenntartott címek
0000011 XJövőbeli fejlesztésekre fenntartva
00001XX Xnagysebességű "master" kód
11110XX X10 bites "slave" cím
11111XX XJövőbeli fejlesztésekre fenntartva

Ismétlődő indulási feltételek

Néha fontos, hogy egy master sorozatban egyszerre több üzenetet is cserélhessen, anélkül, hogy a buszon lévő többi master belezavarna ebbe a forgalmazásba. Ilyenkor a kell a master-nek az "ismétlődő indulási feltételek"-et alkalmaznia.

A megismételt indítás érdekében az SDA-nak magasnak kell lennie, míg az SCL alacsony. Ezután az SCL-nek magasba vált, majd az SDA újra alacsonyra kerül, miközben az SCL magas.