I²C
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ésAz 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ésMinden 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ésAz 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ésNormá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ésNé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- ↑ Ob121.com: Vámos Sándor: I²C (magyar nyelven). ob121.com. [2019. február 20-i dátummal az eredetiből archiválva]. (Hozzáférés: 2018. október 23.)
- Official I2C specification (free) (angol nyelven) (PDF). NXP. [2013. május 11-i dátummal az eredetiből archiválva]. (Hozzáférés: 2019. február 19.)
- Detailed Introduction, Primer (angol nyelven)
- I²C Bus Technical Overview and Frequently Asked Questions (angol nyelven)
- Introduction to SPI and I2C protocols (angol nyelven). [2012. augusztus 28-i dátummal az eredetiből archiválva]. (Hozzáférés: 2019. február 19.)
- Using the I²C Bus with Linux (angol nyelven)
- OpenBSD iic(4) manual page (angol nyelven)