I²C - I²C

I 2 C autobus
I²C bus logo.svg
Typ Sériová komunikační sběrnice
Návrhář Philips Semiconductor , dnes známý jako NXP Semiconductors
Navrženo 1982 ; Před 39 lety ( 1982 )
Datový signál Otevřený kolektor nebo otevřený odtok
Šířka 1bitový (SDA) se samostatnými hodinami (SCL)
Bitrate 0,1, 0,4, 1,0, 3,4 nebo 5,0  Mbit/s v závislosti na režimu
Protokol Sériový , poloduplexní

I 2 C ( Inter-Integrated Circuit , oční squared- C ), alternativně známé jako I2C nebo IIC , je synchronní , multi-master, multi-Slave , s přepojováním paketů , jeden-skončil , sériové komunikační sběrnice vynalezený v roce 1982 Philips Polovodiče . Je široce používán pro připojení periferních integrovaných obvodů s nižší rychlostí k procesorům a mikrokontrolérům v komunikaci na krátké vzdálenosti v rámci desky.

Několik konkurentů, jako jsou Siemens , NEC , Texas Instruments , STMicroelectronics , Motorola , Nordic Semiconductor a Intersil , uvedlo na trh kompatibilní produkty I 2 C od poloviny 90. let minulého století.

System Management Bus (SMBus), definovaný společností Intel v roce 1995, je podmnožinou I 2 C, definující přísnější použití. Jedním z cílů SMBus je podpora robustnosti a interoperability. V souladu s tím moderní systémy I 2 C obsahují některé zásady a pravidla z SMBus, někdy podporující I 2 C i SMBus, vyžadující pouze minimální rekonfiguraci buď pomocí příkazů, nebo použitím výstupního pinu.

Aplikace

Microchip MCP23008 8bitový I 2 C I/O expandér v balení DIP-18

I 2 C je vhodný pro periferie, kde je jednoduchost a nízké výrobní náklady důležitější než rychlost. Běžné aplikace sběrnice I 2 C jsou:

Zvláště silnou stránkou I 2 C je schopnost mikrokontroléru ovládat síť čipů zařízení pomocí pouhých dvou univerzálních I/O pinů a softwaru. Mnoho dalších sběrnicových technologií používaných v podobných aplikacích, například Serial Peripheral Interface Bus (SPI), vyžaduje pro připojení více zařízení více pinů a signálů.

Revize

Historie vydání specifikace I 2 C
Rok Verze Poznámky Ref
1981 Patent US patent 4 689 740 podaný 2. listopadu 1981 společností US Philips Corporation.
1982 Originál Systém 100 kbit/s I 2 C byl vytvořen jako jednoduchý interní sběrnicový systém pro stavbu řídicí elektroniky s různými čipy Philips. N/A
1992 1 Přidán 400 kbit/s rychlý režim (Fm) a 10bitový režim adresování pro zvýšení kapacity na 1008 uzlů. Jednalo se o první standardizovanou verzi. N/A
1998 2 Přidán 3,4 Mbit/s vysokorychlostní režim (Hs) s požadavky na úsporu energie pro elektrické napětí a proud. N/A
2000 2.1 Vyjasněná verze 2, bez výrazných funkčních změn.
2007 3 Přidán 1 Mbit/s Fast-mode plus (Fm+) (pomocí ovladačů 20 mA) a mechanismus ID zařízení.
2012 4 Přidáno 5 Mbit / s Ultra Fast-mode (Středomoří) pro nové USDA (data) a USCL (hodiny) řádků pomocí push-pull logiku bez pull-up rezistory ,
a přidal přiřazený výrobce ID tabulky. Jedná se pouze o jednosměrný autobus.
2012 5 Opravené chyby.
2014 6 Opraveny dva grafy. Toto je současný standard.

Design

Příklad schématu s jedním masterem ( mikrokontrolérem ), třemi podřízenými uzly ( ADC , DAC a mikrokontrolérem) a výsuvnými odpory R p

I 2 C používá pouze dva obousměrné s otevřeným kolektorem , nebo otevřené odtokové řádky: sériové datové vedení (SDA) a sériové hodiny řádku (SCL), zastavil se odpory . Typická používaná napětí jsou +5 V nebo +3,3 V, i když jsou povoleny systémy s jiným napětím.

Referenční návrh I 2 C má 7bitový adresní prostor se zřídka používaným 10bitovým rozšířením. Běžné rychlosti sběrnice I 2 C jsou standardní režim 100  kbit/s a rychlý režim 400 kbit/s . K dispozici je také 10 kbit/s režim nízké rychlosti , ale povoleny jsou i libovolně nízké frekvence hodin. Pozdější revize I 2 C mohou hostovat více uzlů a pracovat s vyššími rychlostmi (400 kbit/s rychlý režim , 1 Mbit/s rychlý režim plus , 3,4  Mbit/s vysokorychlostní režim a 5  Mbit/s ultra rychlý režim ) . Tyto rychlosti jsou více používány na vestavěných systémech než na počítačích.

Všimněte si, že bitové rychlosti jsou uváděny pro přenosy mezi masterem a slave bez natahování hodin nebo jiné režie hardwaru. Režijní náklady na protokol zahrnují adresu slave a možná adresu registru v zařízení slave, stejně jako bajty ACK/NACK na bajt. Skutečná přenosová rychlost uživatelských dat je tedy nižší, než by naznačovaly samotné špičkové bitové rychlosti. Pokud například každá interakce s podřízeným neefektivně umožňuje přenos pouze 1 bajtu dat, bude datová rychlost menší než polovina špičkové přenosové rychlosti.

Počet uzlů, které mohou existovat na dané sběrnici I 2 C, je omezen adresním prostorem a také celkovou kapacitou sběrnice 400  pF , což omezuje praktické komunikační vzdálenosti na několik metrů. Relativně vysoká impedance a nízká odolnost proti šumu vyžaduje společný zemní potenciál, který opět omezuje praktické použití na komunikaci v rámci stejné desky PC nebo malého systému desek.

I 2 C režimy
Režim Maximální
rychlost
Maximální
kapacita
Řídit Směr
Standardní režim (Sm) 100 kbit/s 400 pF Otevřený odtok * Obousměrné
Rychlý režim (Fm) 400 kbit/s 400 pF Otevřený odtok* Obousměrné
Rychlý režim plus (Fm+) 1 Mbit/s 550 pF Otevřený odtok* Obousměrné
Vysokorychlostní režim (Hs) 1,7 Mbit/s 400 pF Otevřený odtok* Obousměrné
Vysokorychlostní režim (Hs) 3,4 Mbit/s 100 pF Otevřený odtok* Obousměrné
Ultra rychlý režim (UFm) 5 Mbit/s ? Tlačit táhnout Jednosměrný
  • Poznámka: otevřený odtok také znamená otevřený kolektor.

Referenční design

Výše uvedený referenční návrh je sběrnice s hodinovými (SCL) a datovými (SDA) řádky se 7bitovým adresováním. Sběrnice má pro uzly dvě role: hlavní a podřízená:

  • Hlavní uzel - uzel, který generuje hodiny a zahajuje komunikaci s podřízenými.
  • Podřízený uzel - uzel, který přijímá hodiny a reaguje na adresu hlavního serveru.

Sběrnice je sběrnice s více mastery , což znamená, že může být přítomen libovolný počet hlavních uzlů. Role nadřízeného a podřízeného lze navíc mezi zprávami měnit (po odeslání STOP).

Pro dané sběrnicové zařízení mohou existovat čtyři potenciální režimy provozu, ačkoli většina zařízení používá pouze jednu roli a její dva režimy:

  • hlavní přenos - hlavní uzel odesílá data slave,
  • master receive - hlavní uzel přijímá data od slave,
  • slave vysílání - podřízený uzel odesílá data do masteru,
  • slave receive - podřízený uzel přijímá data z masteru.

Sběrnice I 2 C kromě 0 a 1 datových bitů umožňuje speciální signály START a STOP, které fungují jako oddělovače zpráv a jsou odlišné od datových bitů. (To je na rozdíl od počátečních a koncových bitů používaných v asynchronní sériové komunikaci , které se liší od datových bitů pouze načasováním.)

Master je zpočátku v režimu master vysílání odesláním START následovaného 7bitovou adresou slave, se kterým chce komunikovat, za kterým následuje jeden bit představující, zda chce zapisovat (0) nebo číst (1 ) od otroka.

Pokud slave existuje na sběrnici, pak odpoví bitem ACK (aktivní low pro potvrzené) pro danou adresu. Master pak pokračuje buď v režimu vysílání nebo přijímání (podle bitu pro čtení/zápis, který odeslal), a slave pokračuje v komplementárním režimu (přijímání, respektive vysílání).

Nejdříve se odešle adresa a datové bajty nejvýznamnějším bitem . Počáteční podmínka je indikována přechodem SDA z vysokého na nízký s vysokým SCL; stav zastavení je indikován přechodem SDA z nízkého na vysoký s vysokým SCL. Všechny ostatní přechody SDA probíhají s SCL low.

Pokud si master přeje zapisovat do slave, pak opakovaně posílá bajt s tím, že slave posílá bit ACK. (V této situaci je master v režimu hlavního vysílání a slave je v režimu příjmu otroka.)

Pokud si master přeje číst z podřízené jednotky, pak opakovaně přijímá bajt od podřízené jednotky, přičemž master odesílá bit ACK po každém bajtu kromě posledního. (V této situaci je master v režimu přijímání master a slave je v režimu slave vysílání.)

Transakce I 2 C může sestávat z více zpráv. Master ukončí zprávu s podmínkou STOP, pokud je to konec transakce, nebo může odeslat jinou podmínku START, aby si zachovala kontrolu nad sběrnicí pro jinou zprávu (transakce "kombinovaného formátu").

Protokoly zpráv

I 2 C definuje základní typy transakcí, z nichž každá začíná START a končí STOP:

  • Jedna zpráva, kde master zapisuje data do slave.
  • Jedna zpráva, kde hlavní čte data od podřízeného.
  • Kombinovaný formát, kde hlavní vydává alespoň dvě čtení nebo zápisy jednomu nebo více podřízeným zařízením.

V kombinované transakci každé čtení nebo zápis začíná START a adresou slave. Podmínky START po prvním se také nazývají opakované START bity. Opakovaným STARTům nepředcházejí podmínky STOP, což je důvod, proč slave vědí, že další zpráva je součástí stejné transakce.

Jakýkoli daný otrok bude reagovat pouze na určité zprávy, jak je uvedeno v jeho produktové dokumentaci.

Systémy Pure I 2 C podporují libovolné struktury zpráv. SMBus je omezen na devět z těchto struktur, jako je čtení slova N a psaní slova N , zahrnující jednoho podřízeného. PMBus rozšiřuje SMBus o skupinový protokol, což umožňuje odeslání více takových transakcí SMBus v jedné kombinované zprávě. Ukončující STOP označuje, kdy by se tyto seskupené akce měly projevit. Například jedna operace PMBus může překonfigurovat tři napájecí zdroje (pomocí tří různých I 2 C slave adres) a jejich nové konfigurace se projeví současně: když obdrží STOP.

Až na několik výjimek ani I 2 C ani SMBus nedefinují sémantiku zpráv, například význam datových bajtů ve zprávách. Sémantika zpráv je jinak specifická pro produkt. Mezi tyto výjimky patří zprávy adresované na obecnou adresu volání I 2 C (0x00) nebo na adresu reakce na výstrahu SMBus ; a zprávy zahrnuté v protokolu ARP ( SMBus Address Resolution Protocol ) pro dynamické přidělování a správu adres.

V praxi většina podřízených používá řídicí modely odezvy na žádost, kde jeden nebo více bajtů následujících po příkazu pro zápis je považováno za příkaz nebo adresu. Tyto bajty určují, jak budou zpracovány následné zapsané bajty nebo jak bude podřízený reagovat na další čtení. Většina operací SMBus zahrnuje jednobajtové příkazy.

Příklad zpráv: 24C32 EEPROM

STMicroelectronics 24C08: sériová EEPROM se sběrnicí I 2 C.

Jedním konkrétním příkladem je EEPROM typu 24C32 , která používá dva bajty požadavků, které se nazývají Vysoká adresa a Nízká adresa. (Proto tyto EEPROM nejsou použitelné čistými hostiteli SMBus, které podporují pouze jednobajtové příkazy nebo adresy.) Tyto bajty se používají k adresování bytů v adresním prostoru EEPROM o velikosti 32  kbit (nebo 4  kB ). Stejné dvoubajtové adresování používají také větší EEPROM, jako například 24C512, který ukládá 512 kbitů (nebo 64 kB). Zápis a čtení dat do těchto EEPROM používá jednoduchý protokol: adresa je zapsána a data jsou přenesena až do konce zprávy. Část protokolu pro přenos dat může způsobit potíže na sběrnici SMBus, protože datovým bytům nepředchází počet a lze přenést více než 32 bytů najednou. I 2 C EEPROM menší než 32 kbit, jako 2 kbit 24C02, se na SMBus často používají s neefektivním jednobajtovým přenosem dat k překonání tohoto problému.

Do EEPROM se zapíše jedna zpráva. Po STARTu master odešle adresu sběrnice čipu se směrovým bitem clear ( zápis ), poté odešle dvoubajtovou adresu dat v rámci EEPROM a poté odešle datové bajty, které mají být zapsány, počínaje touto adresou, následované STOP. Při zápisu více bajtů musí být všechny bajty na stejné 32bajtové stránce. I když je zaneprázdněno ukládáním těchto bytů do paměti, EEPROM nebude reagovat na další I 2 C požadavky. (To je další nekompatibilita s SMBus: zařízení SMBus musí vždy reagovat na jejich sběrnicové adresy.)

Ke čtení začínající na konkrétní adrese v EEPROM se používá kombinovaná zpráva. Po STARTu master nejprve zapíše adresu sběrnice čipu směrovým bitem clear ( write ) a poté dva bajty datové adresy EEPROM. Poté odešle (opakovaný) START a adresu sběrnice EEPROM s nastaveným bitem směru ( čtení ). EEPROM poté odpoví datovými bajty začínajícími na zadané datové adrese EEPROM - kombinovaná zpráva: nejprve zápis, poté čtení. Master vydá ACK po každém načteném bajtu kromě posledního bajtu a poté vydá STOP. EEPROM zvyšuje adresu po každém přeneseném datovém bajtu; vícebajtová čtení mohou načíst celý obsah EEPROM pomocí jedné kombinované zprávy.

Fyzická vrstva

Sběrnice I 2 C: R p jsou pull-up rezistory, R s jsou volitelné sériové rezistory.

Na fyzické vrstvě jsou linky SCL i SDA sběrnice s otevřeným odtokem ( MOSFET ) nebo s otevřeným kolektorem ( BJT ), a proto je pro každou linku zapotřebí vytahovací odpor . Logická „0“ je vyvedena vytažením linky na zem a logická „1“ je vyvedena tak, že necháte linku plavat (výstup s vysokou impedancí ) tak, aby ji stahovací odpor přitáhl vysoko. Linka není nikdy aktivně vedena vysoko. Toto zapojení umožňuje připojení více uzlů ke sběrnici bez zkratů způsobených konfliktem signálu. Vysokorychlostní systémy (a některé další) mohou používat zdroj proudu místo rezistoru k vytažení pouze SCL nebo SCL i SDA, aby vyhovovaly vyšší kapacitě sběrnice a umožnily rychlejší doby náběhu.

Důležitým důsledkem toho je, že linky může řídit více uzlů současně. Pokud kterýkoli uzel řídí linii nízko, bude nízká. Uzly, které se pokoušejí přenášet logický (tj. Nechat linii vznášet se vysoko), to mohou detekovat a dojít k závěru, že je současně aktivní jiný uzel.

Při použití na SCL se tomu říká roztahování hodin a je to mechanismus řízení toku pro podřízené jednotky. Při použití na SDA se tomu říká arbitráž a zajišťuje, že je současně pouze jeden vysílač.

V nečinnosti jsou oba řádky vysoké. Pro zahájení transakce je SDA vytažena nízko, zatímco SCL zůstává vysoká. Je nezákonné vysílat značku zastavení uvolněním SDA, aby se znovu vznášela vysoko (i když taková „prázdná zpráva“ je obvykle neškodná), takže dalším krokem je vytáhnout SCL dolů.

Kromě signálů pro spuštění a zastavení se linka SDA mění pouze tehdy, když jsou hodiny nízké; Vysílání datového bitu spočívá v pulsování hodinové linky vysoko, přičemž se datová linka drží stabilně na požadované úrovni.

Zatímco SCL je nízké, vysílač (původně master) nastaví SDA na požadovanou hodnotu a (po malém zpoždění, aby se hodnota šířila) nechá SCL vznášet se vysoko. Master poté čeká, až se SCL skutečně zvýší; toto bude zpožděn o konečné doby náběhu signálu SCL (v RC časové konstanty na pull-up a parazitních kapacit autobusu), a navíc může být zpožděn o hodiny otroka protahování.

Jakmile je SCL vysoká, master čeká minimální čas (4 μs pro standardní rychlost I 2 C), aby se ujistil, že přijímač bit viděl, a poté jej znovu stáhne dolů. Tím je přenos jednoho bitu dokončen.

Po každých 8 datových bitech v jednom směru je vyslán bit „potvrzení“ ve druhém směru. Vysílač a přijímač přepínají role pro jeden bit a původní přijímač vysílá zpět jeden „0“ bit (ACK). Pokud vysílač místo toho uvidí bit „1“ (NACK), dozví se, že:

  • (Pokud master vysílá na slave) Slave nemůže přijímat data. Žádný takový otrok, příkaz nerozumí nebo není schopen přijmout žádná další data.
  • (Pokud slave vysílá na master) Master si přeje, aby se přenos po tomto datovém bajtu zastavil.

Během potvrzovacích bitů mění směr pouze SDA; SCL je vždy řízen masterem.

Po potvrzovacím bitu je hodinový řádek nízký a master může provést jednu ze tří věcí:

  • Začněte s přenosem dalšího bajtu dat: vysílač nastaví SDA a master pulzuje SCL vysoko.
  • Odeslat „Zastavit“: Nastavte SDA na nízkou hodnotu, nechte SCL stoupnout na vysokou úroveň a pak nechte SDA dosáhnout vysokou hodnotu. Tím se uvolní sběrnice I 2 C.
  • Odeslat „Opakovaný start“: Nastavte SDA vysoko, nechte SCL vysoko, pak znovu zatáhněte SDA nízko. Tím se spustí nová zpráva sběrnice I 2 C bez uvolnění sběrnice.

Natahování hodin pomocí SCL

Jednou z významnějších vlastností protokolu I 2 C je roztažení hodin. Adresované podřízené zařízení může po přijetí (nebo odeslání) bajtu držet hodinovou linku (SCL) nízko, což znamená, že ještě není připraveno zpracovat více dat. Master, který komunikuje s podřízeným, nemusí dokončit přenos aktuálního bitu, ale musí počkat, až se hodinový řádek skutečně dostane vysoko. Pokud slave natahuje hodiny, bude hodinová linka stále nízká (protože spojení jsou otevřená ). Totéž platí, pokud se druhý, pomalejší mistr pokusí řídit hodiny současně. (Pokud existuje více než jeden pán, všichni kromě jednoho normálně prohrají arbitráž.)

Master musí počkat, až pozoruje, jak se hodinová čára pohybuje vysoko, a další minimální čas (4 μs pro standardní 100 kbit/s I 2 C), než znovu vytáhne hodiny dolů.

Ačkoli master může také držet linku SCL nízko tak dlouho, jak si to přeje (to není povoleno v nejnovější verzi 6 protokolu - pododdíl 3.1.1), termín „roztahování hodin“ se obvykle používá pouze tehdy, když to dělají slave . Ačkoli teoreticky může být natažen jakýkoli hodinový impuls, obecně se používají intervaly před nebo za potvrzovacím bitem. Pokud je například slave mikrokontrolér , jeho rozhraní I 2 C by mohlo protáhnout hodiny po každém bajtu, dokud se software nerozhodne, zda poslat kladné potvrzení nebo NACK.

Natahování hodin je jediný čas v I 2 C, kde slave pohání SCL. Mnoho otroků nepotřebuje natahovat hodiny, a proto považují SCL za přísně vstup bez obvodů, které by jej poháněly. Někteří mistři, například ti, kteří se nacházejí uvnitř vlastních ASIC, nemusí podporovat roztahování hodin; často tato zařízení budou označena jako „dvouvodičové rozhraní“ a ne I 2 C.

Aby byla zajištěna minimální propustnost sběrnice , SMBus klade omezení, jak daleko lze natáhnout hodiny. Hostitelé a otroci dodržující tyto limity nemohou blokovat přístup na sběrnici na více než krátkou dobu, což není zárukou čistých I 2 C systémů.

Arbitráž pomocí SDA

Každý master monitoruje sběrnici pro start a stop bity a nespustí zprávu, zatímco jiný master zaměstnává sběrnici. Dva mistři však mohou zahájit přenos přibližně ve stejnou dobu; v tomto případě dochází k arbitráži. Režim podřízeného vysílání může být také libovolný, když master adresuje více podřízených, ale to je méně časté. Na rozdíl od protokolů (jako je ethernet ), které využívají náhodné zpoždění vypnutí před vydáním opakování, má I 2 C deterministickou arbitrážní politiku. Každý vysílač kontroluje úroveň datové linky (SDA) a porovnává ji s úrovněmi, které očekává; pokud se neshodují, tento vysílač ztratil arbitráž a vypadne z této interakce protokolu.

Pokud jeden vysílač nastaví SDA na 1 (neřídí signál) a druhý vysílač jej nastaví na 0 (tah na zem), výsledkem je, že je vedení nízké. První vysílač poté pozoruje, že úroveň linky je odlišná od očekávané a dospěl k závěru, že vysílá jiný uzel. První uzel, který si všimne takového rozdílu, je ten, který ztrácí arbitráž: přestane řídit SDA. Pokud je to mistr, také přestane řídit SCL a čeká na STOP; pak se může pokusit znovu odeslat celou zprávu. Mezitím druhý uzel nezaznamenal žádný rozdíl mezi očekávanou a skutečnou úrovní na SDA, a proto pokračuje v přenosu. Může to udělat bez problémů, protože doposud byl signál přesně tak, jak očekával; žádný jiný vysílač nerušil jeho zprávu.

Pokud dva mistři posílají zprávu dvěma různým podřízeným, ten, kdo posílá adresu nižšího otroka, vždy „vyhraje“ arbitráž ve fázi adresy. Protože dva hlavní mohou odesílat zprávy na stejnou adresu slave a adresy někdy odkazují na více slave, arbitrace musí někdy pokračovat do fází dat.

K arbitráži dochází velmi zřídka, ale je nezbytná pro správnou podporu více mistrů. Stejně jako u roztažení hodin ne všechna zařízení podporují arbitráž. Ti, kteří to dělají, se obecně označují jako podporující komunikaci „více mistrů“.

Jeden případ, který musí být pečlivě řešen v implementacích multi-master I 2 C, je případ, kdy si mistři navzájem povídají. Jeden velitel může přijít o arbitráž příchozí zprávy a musí včas změnit svou roli z mistra na otroka, aby potvrdil svoji vlastní adresu.

V extrémně vzácném případě, kdy dva páni současně odesílají identické zprávy, budou oba považovat komunikaci za úspěšnou, ale otrok uvidí pouze jednu zprávu. Z tohoto důvodu, když má otrok přístup k více mistrům, musí být každý příkaz rozpoznaný otrokem idempotentní nebo musí být zaručeno, že nikdy nebude vydán dvěma veliteli současně. (Například příkaz, který je vydán pouze jedním masterem, nemusí být idempotentní, ani není nutné, aby konkrétní příkaz byl idempotentní, když nějaký mechanismus vzájemného vyloučení zajišťuje, že může být způsoben vydáním tohoto příkazu v daném okamžiku pouze jeden master .)

Arbitráž v SMBus

Zatímco I 2 C rozhoduje pouze mezi nadřízenými, SMBus používá rozhodčí řízení ve třech dalších kontextech, kdy na podřízené zařízení reaguje více podřízených a jeden dostane jeho zprávu.

  • Ačkoli je koncepčně sběrnice s jedním hlavním zařízením, podřízené zařízení, které podporuje „protokol oznámení hostitele“, funguje jako hlavní pro provádění oznámení. Zabere sběrnici a zapíše 3bajtovou zprávu na vyhrazenou adresu „SMBus Host“ (0x08), přičemž předá její adresu a dva bajty dat. Když se dva otroci pokusí upozornit hostitele současně, jeden z nich ztratí arbitráž a bude to muset zkusit znovu.
  • Alternativní podřízený systém upozornění používá k žádosti o pozornost samostatný signál SMBALERT#. V tomto případě hostitel provede 1bajtové čtení z vyhrazené „adresy odpovědi na výstrahu SMBus“ (0x0C), což je druh vysílací adresy. Všichni varující podřízení reagují datovými bajty obsahujícími vlastní adresu. Když otrok úspěšně vysílá svou vlastní adresu (vyhrává arbitráž proti ostatním), přeruší toto přerušení. V tomto i v předchozím případě arbitráž zajišťuje, že bude přijata zpráva jednoho otroka a ostatní budou vědět, že to musí zkusit znovu.
  • SMBus také podporuje „protokol pro řešení adres“, kde zařízení vracejí 16bajtové „univerzální ID zařízení“ ( UDID ). Může reagovat více zařízení; ten s nejnižším UDID vyhraje arbitráž a bude uznán.

Arbitráž v PMBus

PMBus verze 1.3 rozšiřuje protokol reakce na výstrahy SMBus v protokolu „čtení zóny“. Otroci mohou být seskupeni do „zón“ a všechny otroky v zóně mohou být adresovány tak, aby odpovídaly, přičemž jejich odpovědi budou maskovány (vynechány nechtěné informace), převráceny (hledané informace jsou tedy odesílány jako 0 bitů, které vyhrávají arbitráž) nebo mohou být přeuspořádány ( tak se nejdřív odešlou nejdůležitější informace). Arbitrace zajišťuje, že odpověď s nejvyšší prioritou je ta, která byla poprvé vrácena do masteru.

PMBus rezervuje I 2 C adresy 0x28 a 0x37 pro čtení zón a zápis.

Rozdíly mezi režimy

Pro komunikaci I 2 C existuje několik možných provozních režimů . Všechny jsou kompatibilní v tom, že vždy lze použít standardní režim 100 kbit/s , ale kombinace zařízení různých schopností na stejné sběrnici může způsobit problémy následovně:

  • Rychlý režim je vysoce kompatibilní a jednoduše zpřísňuje několik časovacích parametrů, aby dosáhl rychlosti 400 kbit/s. Rychlý režim je široce podporován zařízeními I 2 C slave, takže jej může mistr používat, pokud ví, že to kapacita sběrnice a síla přítahu umožňují.
  • Rychlý režim plus dosahuje až 1 Mbit/s pomocí výkonnějších (20 mA) ovladačů a přítahů, aby bylo dosaženo rychlejší doby náběhu a pádu. Kompatibilitu se zařízeními standardního a rychlého režimu (s možností stahování 3 mA) lze dosáhnout, pokud existuje způsob, jak snížit sílu přítahů při hovoru s nimi.
  • Vysokorychlostní režim (3,4 Mbit/s) je kompatibilní s normálními I 2 C zařízeními na stejné sběrnici, ale vyžaduje, aby hlavní měl aktivní vytažení na hodinovou linku, která je povolena během vysokorychlostních přenosů. První datový bit je přenesen s normální otevřenou hranou stoupající hrany hodin, která může být natažena. U zbývajících sedmi datových bitů a ACK řídí master ve správný čas hodiny vysoko a slave je nemusí natáhnout. Všem vysokorychlostním přenosům předchází jednobajtový „hlavní kód“ vysokou nebo standardní rychlostí. Tento kód slouží třem účelům:
    1. říká vysokorychlostním podřízeným zařízením, aby se změnila na pravidla vysokorychlostního časování,
    2. zajišťuje, že se zařízení s vysokou nebo normální rychlostí nepokusí zúčastnit přenosu (protože neodpovídá jejich adrese), a
    3. protože identifikuje master (existuje osm hlavních kódů a každý master musí použít jiný), zajišťuje, že arbitráž je dokončena před vysokorychlostní částí přenosu, a proto vysokorychlostní část nemusí počítat s ta schopnost.
  • Ultra rychlý režim je v podstatě podmnožina I 2 C pouze pro zápis , která je nekompatibilní s jinými režimy, kromě toho, že je snadné přidat podporu pro stávající hardwarové rozhraní rozhraní I 2 C. Je povolen pouze jeden hlavní počítač, který neustále aktivně řídí datové linky, aby dosáhl přenosové rychlosti 5 Mbit/s. Protahování hodin, arbitráž, přenosy čtení a potvrzení jsou vynechány. Je určen hlavně pro animované LED displeje, kde by chyba přenosu způsobila pouze nepodstatnou krátkou vizuální závadu . Podobnost s jinými režimy sběrnice I 2 C je omezena na:
    • podmínky zahájení a zastavení se používají k vymezení přenosů,
    • Adresování I 2 C umožňuje více zařízením slave sdílet sběrnici bez signálů výběru typu slave ve stylu sběrnice SPI a
    • devátý hodinový impuls je odeslán na přenesený bajt označující polohu nepoužitých potvrzovacích bitů.

Někteří prodejci poskytují takzvaný nestandardní Turbo režim s rychlostí až 1,4 Mbit/s.

Ve všech režimech, taktovací kmitočet je řízen master (S), a delší než normální sběrnice může být provozován při rychlosti nižší než nominální podle underclocking .

Propojení obvodů

16bitová deska ADC s rozhraním I 2 C.

I 2 C je populární pro propojení periferních obvodů s prototypováním systémů, jako jsou Arduino a Raspberry Pi . I 2 C nepoužívá standardizovaný konektor, nicméně návrháři desek vytvořili různá schémata zapojení pro propojení I 2 C. Aby se minimalizovalo možné poškození v důsledku zasunutí 0,1palcových záhlaví dozadu, někteří vývojáři navrhli použít střídavé připojení signálu a napájení následujících schémat zapojení: (GND, SCL, VCC, SDA) nebo (VCC, SDA, GND, SCL) .

Drtivá většina aplikací používá I 2 C tak, jak byl původně navržen - periferní integrované obvody přímo zapojené do procesoru na stejné desce s plošnými spoji, a proto na relativně krátké vzdálenosti méně než 30 cm, bez konektoru . Nicméně pomocí diferenciálního ovladače může alternativní verze I 2 C komunikovat až 20 metrů (možná více než 100 metrů) přes CAT5 nebo jiný kabel.

Několik standardních konektorů nese signály I 2 C. Například konektor UEXT nese I 2 C; 10pinový konektor iPack nese I 2 C; konektor 6P6C Lego Mindstorms NXT nese I 2 C; několik lidí používá konektory 8P8C a kabel CAT5, běžně používaný pro fyzickou vrstvu Ethernet, aby místo toho nesly diferenciálně kódované signály I 2 C nebo zesílené jednostranné signály I 2 C; a každý konektor HDMI a většina konektorů DVI a VGA přenáší data DDC2 přes I 2 C.

Vyrovnávací paměť a multiplexování

Když je v systému mnoho zařízení I 2 C, může být potřeba zahrnout vyrovnávací paměti sběrnice nebo multiplexory k rozdělení velkých segmentů sběrnice na menší. To může být nezbytné pro udržení kapacity segmentu sběrnice pod povolenou hodnotou nebo pro umožnění oddělení více zařízení se stejnou adresou multiplexorem. Existuje mnoho typů multiplexorů a vyrovnávacích pamětí a všechny musí vzít v úvahu skutečnost, že I 2 C linky jsou specifikovány jako obousměrné. Multiplexery lze implementovat pomocí analogových přepínačů, které mohou spojovat jeden segment s druhým. Analogové přepínače udržují obousměrnou povahu linek, ale neizolují kapacitu jednoho segmentu od druhého ani neposkytují schopnost ukládání do vyrovnávací paměti.

Pufry lze použít k izolaci kapacity na jednom segmentu od jiného a/nebo umožnit odesílání I 2 C přes delší kabely nebo stopy. Nárazníky pro obousměrné vedení, jako je I 2 C, musí používat jedno z několika schémat, aby se zabránilo zablokování. I 2 C je otevřený-odtok, takže nárazníky musí na jedné straně řídit nízko, když na druhé straně vidí nízko. Jednou z metod, jak zabránit zablokování, je, aby vyrovnávací paměť měla pečlivě vybrané vstupní a výstupní úrovně tak, aby výstupní úroveň jeho ovladače byla vyšší než jeho vstupní prahová hodnota, což brání jejímu spuštění. Vyrovnávací paměť může mít například vstupní práh 0,4 V pro detekci nízké, ale výstupní nízkou úroveň 0,5 V. Tato metoda vyžaduje, aby všechna ostatní zařízení na sběrnici měla prahové hodnoty, které jsou kompatibilní, a často to znamená, že více vyrovnávacích pamětí implementuje tuto schéma nelze vzájemně řadit.

Alternativně existují jiné typy vyrovnávacích pamětí, které implementují proudové zesilovače nebo sledují stav (tj. Která strana řídila sběrnici nízko), aby se zabránilo zablokování. Způsob stav obvykle znamená, že je vytvořen nezamýšlený impuls během hry-off, když je na jedné straně hnací sběrnice nízká, pak se další jednotky se nízká, pak první strana zprávy (to je běžné v průběhu I 2 potvrzení C).

Sdílení SCL mezi více autobusy

Pokud máte jednoho masteru, je možné, aby více sběrnic I 2 C sdílelo stejnou linku SCL. Pakety na každé sběrnici jsou odesílány buď jeden po druhém, nebo současně. To je možné, protože komunikaci na každé sběrnici lze rozdělit na střídající se krátká období s vysokým SCL a následně krátká období s nízkým SCL. A hodiny lze natáhnout, pokud jeden autobus potřebuje více času v jednom stavu.

Výhodou je používání podřízených zařízení se stejnou adresou současně a ukládání připojení nebo rychlejší propustnost pomocí několika datových linek současně.

Tabulka stavu řádku

Tyto tabulky ukazují různé atomové stavy a bitové operace, ke kterým může dojít během zprávy I 2 C.

Stav čáry
Typ Neaktivní autobus

(N)

Start

(S)

Líný

(i)

Stop

(P)

Hodiny se natahují

(CS)

Poznámka Volný nárok na arbitráž Vyhlašování autobusů (hlavní) Autobus nárokován (hlavní) Uvolnění autobusu (hlavní) Pozastaveno otrokem
SDA Pasivní vytahování Padající hrana (hlavní) Držel nízko (mistr) Stoupající hrana (hlavní) Je mi to jedno
SCL Pasivní vytahování Pasivní vytahování Pasivní vytahování Pasivní vytahování Držel nízko (otrok)
Stav čáry
Typ Odeslání jednoho datového bitu (1) (0)

(SDA je nastavena/vzorkována po SCL, aby se zabránilo detekci falešného stavu)

Odpověď přijímače bitem ACK

(Byte přijato od odesílatele)

Odpověď přijímače bitem NACK

(Bajt nebyl přijat od odesílatele)

Nastavení bitů (Bs) Připraveno k odběru (Bx) Nastavení bitů (Bs) ACK (A) Nastavení bitů (Bs) NACK (A ')
Poznámka Bit nastavený odesílatelem (master/slave) Ukázkový bit přijímače (master/slave) Vysílač vysílač hi-Z Odesílatel vidí, že SDA je nízká Vysílač vysílač hi-Z Odesílatel vidí, že SDA je vysoká
SDA Nastavit bit (po pádu SCL) Zachytit bit (po vzestupu SCL) Drženo nízko přijímačem (po pádu SCL) Vysoká (nebo pasivní vysoká) přijímačem (po pádu SCL)
SCL Padající hrana (hlavní) Stoupající hrana (hlavní) Padající hrana (hlavní) Stoupající hrana (hlavní) Padající hrana (hlavní) Stoupající hrana (hlavní)
Stav řádku (opakovaný start)
Typ Nastavení signálu (Sr) po ACK/NACK Opakovaný start (Sr)
Poznámka Začněte zde od ACK Vyhnout se stavu zastavení (P) Začněte zde od NACK Stejné jako signál start (S)
SDA Byl držen nízko za ACK Stoupající hrana Pasivní maximum Pasivní maximum Padající hrana (hlavní)
SCL Padající hrana (hlavní) Držel nízko Stoupající hrana (hlavní) Pasivní maximum Pasivní vytahování

Adresní struktura

7bitové adresování

Pole: S Pole adresy I 2 C R/W ' A I 2 C sekvence zpráv ... P
Typ Start Byte 1 ACK Byte X atd ...

Zbytek čtení nebo zápisu

zpráva jde sem

Stop
Bitová pozice v bajtu X 7 6 5 4 3 2 1 0
7bitová adresa poz 7 6 5 4 3 2 1
Poznámka MSB LSB 1 = Přečíst
0 = psát

10bitové adresování

Pole: S Indikátor 10bitového režimu Horní addr R/W ' A Dolní pole adresy I 2 C posloupnosti zpráv P
Typ Start Byte 1 ACK Byte 2 Byte X atd.

Zbytek čtení nebo zápisu

zpráva jde sem

Stop
Bitová pozice v bajtu X 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
Bitová hodnota 1 1 1 1 0 X X X X X X X X X X X
Pozice 10bitové adresy 10 9 8 7 6 5 4 3 2 1
Poznámka Označuje 10bitový režim MSB 1 = Přečíst LSB
0 = psát

Vyhrazené adresy v 7bitovém adresním prostoru

Pro speciální funkce jsou vyhrazeny dvě skupiny adres:

  • 0000 XXX
  • 1111 XXX
Index vyhrazené
adresy
8bitový bajt Popis
7bitová adresa Hodnota R/W
MSB
(4bitové)
LSB
(3bitové)
1bitový
1 0000 000 0 Obecný hovor
2 0000 000 1 Začněte bajtem
3 0000 001 X Adresa CBUS
4 0000 010 X Vyhrazeno pro jiný formát sběrnice
5 0000 011 X Vyhrazeno pro budoucí účely
6 0000 1XX X Hlavní kód režimu HS
7 1111 1XX 1 ID zařízení
8 1111 0XX X 10bitové slave adresování

SMBus si vyhrazuje několik dalších adres. Zejména 0001 000je vyhrazena pro hostitele SMBus, který mohou používat zařízení podporující master, 0001 100je „adresa odpovědi na výstrahu SMBus“, kterou hostitel vyzvedne po přerušení mimo pásmo a 1100 001je výchozí adresou, která je původně používané zařízeními schopnými dynamického přiřazování adres.

Nevyhrazené adresy v 7bitovém adresním prostoru

MSB (4bitové) Typické použití
0001 Digitální přijímače, SMBus
0010 Dekodéry TV video linek, IPMB
0011 AV kodeky
0100 Kodéry videa, expandéry GPIO
0101 ACCESS bus , PMBus
0110 VESA DDC , PMBus
0111 Ovladač displeje
1000 Zpracování TV signálu, zpracování zvuku, SMBus
1001 AV přepínání, ADC a DAC , IPMB , SMBus
1010 Paměť úložiště, hodiny v reálném čase
1011 AV procesory
1100 PLL a tunery, modulátory a demodulátory, SMBus
1101 AV procesory a dekodéry, zesilovače zvuku, SMBus
1110 AV převaděče barevného prostoru

Přestože je MSB 1111 vyhrazen pro ID zařízení a 10bitové adresování slave, používají ho také zařízení závislá na zobrazení VESA DDC, jako jsou polohovací zařízení .

Formát transakce

Transakce I 2 C se skládá z jedné nebo více zpráv . Každá zpráva začíná symbolem začátku a transakce končí symbolem zastavení. Symboly startu za prvním, které začínají zprávou, ale nikoli transakcí, se označují jako symboly opakovaného startu .

Každá zpráva je čtení nebo zápis. Transakce sestávající z jedné zprávy se nazývá transakce čtení nebo zápisu. Transakce sestávající z více zpráv se nazývá kombinovaná transakce. Nejběžnější formou posledně uvedeného je zpráva pro zápis poskytující informace o adrese uvnitř zařízení, za kterou následuje přečtená zpráva.

Mnoho zařízení I 2 C nerozlišuje mezi kombinovanou transakcí a stejnými zprávami odeslanými jako samostatné transakce, ale ne všemi. Protokol ID zařízení vyžaduje jedinou transakci; otroci mají zakázáno reagovat, pokud pozorují symbol zastavení. Režimy konfigurace, kalibrace nebo autotestu, které způsobují neobvyklou reakci podřízeného, ​​jsou také často automaticky ukončeny na konci transakce.

Časový diagram

Sekvence přenosu dat
  1. Přenos dat je zahájen s počáteční podmínkou (S) signalizovanou SDA vytažením nízko, zatímco SCL zůstává vysoko.
  2. SCL je vytaženo nízko a SDA nastavuje první úroveň datových bitů, zatímco SCL udržuje nízké (během doby modrého pruhu).
  3. Data jsou vzorkována (přijata), když SCL stoupá pro první bit (B1). Aby byl bit platný, nesmí se SDA přepínat mezi stoupající hranou SCL a následnou sestupnou hranou (celý čas zeleného pruhu).
  4. Tento proces se opakuje, SDA přechází, zatímco SCL je nízké, a data jsou čtena, zatímco SCL je vysoká (B2 až Bn).
  5. Po posledním bitu následuje hodinový impuls, během kterého je SDA vytažena nízko v rámci přípravy na stop bit.
  6. Stav zastavení (P) je signalizován, když stoupá SCL, a poté stoupá SDA.

Aby se zabránilo detekci falešných markerů, existuje minimální zpoždění mezi sestupnou hranou SCL a změnou SDA a mezi změnou SDA a stoupající hranou SCL. Všimněte si, že zpráva I 2 C obsahující n datových bitů (včetně potvrzení) obsahuje n + 1 hodinových impulzů.

Příklad bitového bitu hlavního protokolu I 2 C

Níže je uveden příklad bit-bouchání na I 2 C protokol, jako I 2 master C. Příklad je uveden v pseudo C . Ilustruje všechny dříve popsané funkce I 2 C (roztahování hodin, arbitrace, bit start/stop, ack/nack).

// Hardware-specific support functions that MUST be customized:
#define I2CSPEED 100
void I2C_delay(void);
bool read_SCL(void);  // Return current level of SCL line, 0 or 1
bool read_SDA(void);  // Return current level of SDA line, 0 or 1
void set_SCL(void);   // Do not drive SCL (set pin high-impedance)
void clear_SCL(void); // Actively drive SCL signal low
void set_SDA(void);   // Do not drive SDA (set pin high-impedance)
void clear_SDA(void); // Actively drive SDA signal low
void arbitration_lost(void);

bool started = false; // global data

void i2c_start_cond(void) {
  if (started) { 
    // if started, do a restart condition
    // set SDA to 1
    set_SDA();
    I2C_delay();
    set_SCL();
    while (read_SCL() == 0) { // Clock stretching
      // You should add timeout to this loop
    }

    // Repeated start setup time, minimum 4.7us
    I2C_delay();
  }

  if (read_SDA() == 0) {
    arbitration_lost();
  }

  // SCL is high, set SDA from 1 to 0.
  clear_SDA();
  I2C_delay();
  clear_SCL();
  started = true;
}

void i2c_stop_cond(void) {
  // set SDA to 0
  clear_SDA();
  I2C_delay();

  set_SCL();
  // Clock stretching
  while (read_SCL() == 0) {
    // add timeout to this loop.
  }

  // Stop bit setup time, minimum 4us
  I2C_delay();

  // SCL is high, set SDA from 0 to 1
  set_SDA();
  I2C_delay();

  if (read_SDA() == 0) {
    arbitration_lost();
  }

  started = false;
}

// Write a bit to I2C bus
void i2c_write_bit(bool bit) {
  if (bit) {
    set_SDA();
  } else {
    clear_SDA();
  }

  // SDA change propagation delay
  I2C_delay();

  // Set SCL high to indicate a new valid SDA value is available
  set_SCL();

  // Wait for SDA value to be read by slave, minimum of 4us for standard mode
  I2C_delay();

  while (read_SCL() == 0) { // Clock stretching
    // You should add timeout to this loop
  }

  // SCL is high, now data is valid
  // If SDA is high, check that nobody else is driving SDA
  if (bit && (read_SDA() == 0)) {
    arbitration_lost();
  }

  // Clear the SCL to low in preparation for next change
  clear_SCL();
}

// Read a bit from I2C bus
bool i2c_read_bit(void) {
  bool bit;

  // Let the slave drive data
  set_SDA();

  // Wait for SDA value to be written by slave, minimum of 4us for standard mode
  I2C_delay();

  // Set SCL high to indicate a new valid SDA value is available
  set_SCL();

  while (read_SCL() == 0) { // Clock stretching
    // You should add timeout to this loop
  }

  // Wait for SDA value to be written by slave, minimum of 4us for standard mode
  I2C_delay();

  // SCL is high, read out bit
  bit = read_SDA();

  // Set SCL low in preparation for next operation
  clear_SCL();

  return bit;
}

// Write a byte to I2C bus. Return 0 if ack by the slave.
bool i2c_write_byte(bool send_start,
                    bool send_stop,
                    unsigned char byte) {
  unsigned bit;
  bool     nack;

  if (send_start) {
    i2c_start_cond();
  }

  for (bit = 0; bit < 8; ++bit) {
    i2c_write_bit((byte & 0x80) != 0);
    byte <<= 1;
  }

  nack = i2c_read_bit();

  if (send_stop) {
    i2c_stop_cond();
  }

  return nack;
}

// Read a byte from I2C bus
unsigned char i2c_read_byte(bool nack, bool send_stop) {
  unsigned char byte = 0;
  unsigned char bit;

  for (bit = 0; bit < 8; ++bit) {
    byte = (byte << 1) | i2c_read_bit();
  }

  i2c_write_bit(nack);

  if (send_stop) {
    i2c_stop_cond();
  }

  return byte;
}

void I2C_delay(void) { 
  volatile int v;
  int i;

  for (i = 0; i < I2CSPEED / 2; ++i) {
    v;
  }
}

Podpora operačního systému

  • V AmigaOS lze použít komponentu i2c.resource pro AmigaOS 4.x a MorphOS 3.x nebo sdílenou knihovnu i2c.library od Wilhelma Noekera pro starší systémy.
  • Vývojáři Arduina mohou použít knihovnu „Wire“.
  • Maximite podporuje komunikaci I 2 C nativně jako součást svého MMBasic.
  • PICAXE používá příkazy i2c a hi2c.
  • eCos podporuje I 2 C pro několik hardwarových architektur.
  • ChibiOS/RT podporuje I 2 C pro několik hardwarových architektur.
  • FreeBSD , NetBSD a OpenBSD také poskytují rámec I 2 C s podporou řady běžných hlavních ovladačů a senzorů.
    • Od OpenBSD 3.9 (vydán 1. května 2006 ; před 15 lety ) centrální subsystém i2c_scan během bootování sonduje všechny možné senzorové čipy najednou, pomocí schématu vážení ad hoc a funkce místního ukládání do mezipaměti pro čtení hodnot registru z I 2 C slave; to umožňuje, aby sonda čidla na všeobecné účely off-the-police i386 / amd64 hardware při startu bez jakékoliv konfigurace uživatelem ani znatelným snímání zpoždění; procedury párování jednotlivých ovladačů se pak musí spoléhat pouze na shodu založenou na "friendly-name"; v důsledku toho je většina ovladačů snímačů I 2 C automaticky aktivována ve výchozím nastavení v příslušných architekturách bez negativního vlivu na stabilitu; jednotlivá čidla, jak I 2 C, tak i jiná, jsou exportována do uživatelské země prostřednictvím rámce sysctl hw.sensors . V březnu 2019 má OpenBSD na I 2 C přes dvě desítky ovladačů zařízení, které exportují nějaký druh senzoru přes rámec hw.sensors , a většina těchto ovladačů je ve výchozím nastavení v jádrech i386/amd64 OpenBSD standardně povolena . ( 2006-05-01 ) GENERIC
    • V NetBSD existuje více než dvě desítky zařízení I 2 C slave s hardwarovými monitorovacími senzory, které jsou přístupné prostřednictvím rámce sysmon envsys jako seznamy vlastností . U hardwaru pro obecné účely musí každý ovladač provádět vlastní sondování, a proto jsou všechny ovladače pro slave I 2 C ve službě NetBSD ve GENERICverzích i386/amd64 ve výchozím nastavení zakázány .
  • V systému Linux je I 2 C zpracován pomocí ovladače zařízení pro konkrétní zařízení a jiného pro adaptér I 2 C (nebo SMBus ), ke kterému je připojen. Stovky takových ovladačů jsou součástí aktuálních verzí jádra Linuxu.
  • V systému Mac OS X existuje asi dvě desítky rozšíření jádra I 2 C, která komunikují se senzory pro čtení napětí, proudu, teploty, pohybu a dalšího fyzického stavu.
  • V systému Microsoft Windows je I 2 C implementován příslušnými ovladači zařízení většiny dostupného hardwaru v oboru. U zařízení s integrovaným HID / SoC má Windows 8 a novější integrovaný ovladač sběrnice I²C.
  • Ve Windows CE je I 2 C implementován příslušnými ovladači zařízení většiny dostupného hardwaru v oboru.
  • Unison OS , POSIX RTOS pro IoT, podporuje I 2 C pro několik hardwarových architektur MCU a MPU.
  • V RISC OS je I 2 C vybaveno obecným rozhraním I 2 C z řadiče IO a podporováno ze systému modulů OS
  • V operačních systémech Sinclair QDOS a Minerva QL je I 2 C podporován sadou rozšíření poskytovaných TF Services .

Vývojové nástroje

Při vývoji systémů nebo řešení problémů pomocí I 2 C může být důležitá viditelnost na úrovni hardwarových signálů.

Hostitelské adaptéry

Existuje řada hardwarových řešení hostitelského adaptéru I 2 C pro vytvoření hlavního nebo podřízeného připojení I 2 C k hostitelským počítačům se systémem Linux , Mac nebo Windows . Většina možností jsou USB -to -I 2 C adaptéry. Ne všechny vyžadují proprietární ovladače nebo API .

Analyzátory protokolů

Analyzátory protokolu I 2 C jsou nástroje, které vzorkují sběrnici I 2 C a dekódují elektrické signály, aby poskytly pohled na vyšší úroveň dat přenášených po sběrnici.

Logické analyzátory

Při vývoji a/nebo odstraňování problémů se sběrnicí I 2 C může být zkoumání hardwarových signálů velmi důležité. Logické analyzátory jsou nástroje, které shromažďují, analyzují, dekódují a ukládají signály, takže lidé mohou sledovat vysokorychlostní průběhy ve svém volném čase. Logické analyzátory zobrazují časová razítka každé změny úrovně signálu, což může pomoci najít problémy s protokolem. Většina logických analyzátorů má schopnost dekódovat signály sběrnice do dat protokolu na vysoké úrovni a zobrazit data ASCII.

Omezení

Přiřazení slave adres je jednou slabinou I 2 C. Sedm bitů je příliš málo na to, aby se zabránilo kolizím adres mezi mnoha tisíci dostupných zařízení. To, co zmírňuje problém kolizí adres mezi různými dodavateli a také umožňuje připojení k několika identickým zařízením, je to, že výrobci věnují kolíky, které lze použít k nastavení adresy slave na jednu z několika možností adres na zařízení. Typické jsou dva nebo tři piny a u mnoha zařízení existují tři nebo více možností zapojení na jeden pin adresy.

10bitové adresy I 2 C ještě nejsou široce používány a mnoho hostitelských operačních systémů je nepodporuje. Ani komplexní schéma SMBus „ARP“ pro dynamické přiřazování adres (jiné než pro karty PCI s přítomností SMBus, pro které je vyžadováno).

Automatická konfigurace sběrnice je související problém. Danou adresu může v různých systémech používat řada různých zařízení nekompatibilních s protokolem a za běhu lze detekovat jen stěží jakýkoli typ zařízení. 0x51Může být například použit EEPROM 24LC02 nebo 24C32 s nekompatibilním adresováním; nebo pomocí PCF8563 RTC , které nelze spolehlivě odlišit od obou (bez změny stavu zařízení, což nemusí být povoleno). Jediné spolehlivé konfigurační mechanismy dostupné hostitelům zahrnují mimopásmové mechanismy, jako jsou tabulky poskytnuté firmwarem systému, které obsahují seznam dostupných zařízení. Opět lze tento problém částečně vyřešit pomocí ARP v systémech SMBus, zejména pokud jsou použity identifikátory dodavatele a produktu; ale to se opravdu nechytlo. Rev. Verze 03 specifikace I 2 C přidává mechanismus ID zařízení.

I 2 C podporuje omezený rozsah rychlostí. Hostitelé podporující rychlosti více megabitů jsou vzácní. Podpora rychlosti Fm+ 1 Mbit/s je rozšířenější, protože její elektronika je jednoduchou variantou toho, co se používá při nižších rychlostech. Mnoho zařízení rychlost 400 kbit/s nepodporuje (částečně proto, že ji SMBus zatím nepodporuje). I 2 C uzly implementované v softwaru (namísto vyhrazeného hardwaru) nemusí podporovat ani rychlost 100 kbit/s; takže celý rozsah definovaný ve specifikaci je zřídka použitelný. Všechna zařízení musí alespoň částečně podporovat nejvyšší použitou rychlost, jinak mohou falešně detekovat adresu svého zařízení.

Zařízením je dovoleno natahovat hodinové cykly tak, aby vyhovovaly jejich konkrétním potřebám, což může způsobovat hladovění šířky pásma potřebné rychlejšími zařízeními a zvýšení latencí při hovoru s adresami jiných zařízení. Kapacitní kapacita sběrnice také omezuje přenosovou rychlost, zvláště když se ke zkrácení doby náběhu signálu nepoužívají zdroje proudu.

Protože I 2 C je sdílená sběrnice, existuje možnost, že jakékoli zařízení bude mít poruchu a zablokuje celou sběrnici. Pokud například nějaké zařízení drží nízko položenou linku SDA nebo SCL, brání masteru v odesílání příkazů START nebo STOP k resetování sběrnice. Je tedy běžné, že návrhy obsahují resetovací signál, který poskytuje externí způsob resetování sběrnicových zařízení. Mnoho zařízení však nemá vyhrazený resetovací kolík, což nutí konstruktéra zapojit obvody, aby bylo možné zařízení v případě potřeby resetovat.

Kvůli těmto limitům (správa adres, konfigurace sběrnice, potenciální chyby, rychlost) má několik segmentů sběrnice I 2 C dokonce tucet zařízení. Je běžné, že systémy mají několik takových segmentů. Jeden by mohl být určen pro použití s ​​vysokorychlostními zařízeními pro správu napájení s nízkou latencí. Další lze použít k ovládání několika zařízení, kde latence a propustnost nejsou důležité problémy; ještě další segment by mohl být použit pouze ke čtení čipů EEPROM popisujících přídavné karty (například standard SPD používaný s DRAM sticks).

Derivační technologie

I 2 C je základem pro ACCESS.bus , rozhraní VESA Display Data Channel (DDC), System Management Bus (SMBus), Power Management Bus (PMBus) a Intelligent Platform Management Bus (IPMB, jeden z protokolů IPMI ). Tyto varianty mají rozdíly v napěťových a hodinových frekvenčních rozsazích a mohou mít přerušovací vedení .

Systémy s vysokou dostupností (AdvancedTCA, MicroTCA) používají pro správu polic 2cestný redundantní I 2 C. V těchto systémech je vyžadována schopnost Multi-master I 2 C.

TWI (dvouvodičové rozhraní) nebo TWSI (dvouvodičové sériové rozhraní) je v podstatě stejná sběrnice implementovaná na různých procesorech typu systém na čipu od společnosti Atmel a dalších dodavatelů. Prodejci používají název TWI, přestože I 2 C není od 2014-11-07 registrovanou ochrannou známkou. Ochrana ochranných známek existuje pouze pro příslušné logo (viz pravý horní roh) a patenty na I 2 C nyní zanikly. Podle technologie Microchip mají TWI a I2C několik rozdílů. Jedním z nich je, že TWI nepodporuje START byte.

V některých případech použití termínu „dvouvodičové rozhraní“ naznačuje neúplnou implementaci specifikace I 2 C. Nepodporování arbitráže nebo natahování hodin je jedním z běžných omezení, které je stále užitečné pro jediného mistra, který komunikuje s jednoduchými podřízenými, kteří nikdy nenatahují hodiny.

MIPI I3C senzor interface standard (I3C) is an development of I 2 C, in development in 2017.

Viz také

Reference

Další čtení

externí odkazy