I²C

A Wikipédiából, a szabad enciklopédiából

Az I²C (Inter-Integrated Circuit) egy multi-master, multi-slave, csomagkapcsolt soros busz, melyet a Philips Semiconductor (ma NXP Semiconductors) fejlesztett 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.

Az I²C verziói[szerkesztés]

  • 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.

I²C technikai jellemzők[szerkesztés]

I²C busz jellemző felépítése (a felhúzóellenállásokkal)

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:

Alacsony sebességű üzemmód 10 kbit / sec
szabványos üzemmód 100 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

I²C a hardveres szinten[szerkesztés]

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".

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[szerkesztés]

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önbségek túl nagynak bizonyulnának, a kritikus részek közé jelszintváltót kell beiktatni.

I²C forgalmazás[szerkesztés]

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

Lépések
jel lépés leírás
1 Start Indulá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.
2 Címkeret (A6..A0) A 7 bites címzés esetén ez a tartalom megy ki először. Az MSB az első bit.
3 R/W A nyolcadik bit azt jelzi, hogy olvasási vagy írási művelet következik. (1: olvasás, 0: írás)
4 NACK / ACK A 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.
5 Adatkeret fogadása Az 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.
6 STOP Elő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[szerkesztés]

Lépések
jel lépés leírás
1 Start Megegyezik a 7 bites címzéssel; induláskor a master először az SDA-t, majd az SCL-t is alacsonyra húzza.
2 1. 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).
3 2. Címkeret Ebben a keretben a master kiadja a további címbiteket is.
4 ACK A 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.

Speciális funkciókra fenntartott címek[szerkesztés]


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

Ismétlődő indulási feltételek[szerkesztés]

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.

Fordítás[szerkesztés]

  • Ez a szócikk részben vagy egészben az I²C című angol Wikipédia-szócikk fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.

Források[szerkesztés]