Miten Inter-Integrated Circuit (I2C) -väylä helpottaa mikropiirien yhdistämistä – ja kuinka sitä käytetään
Julkaisija DigiKeyn kirjoittajat Pohjois-Amerikassa
2020-04-07
Rinnakkaisväylän käyttö integroitujen piirien väliseen tiedonsiirto- ja ohjausliikenteeseen piirilevyllä ei ole käytännöllistä. Jopa 8-bittinenkin suoritin vaatisi 16 linjaa pelkälle datalle ja useita lisää osoiteväylää varten. Tämä on vieläkin ongelmallisempaa, jos useat mikropiirit käyttävät samaa tiedonsiirtoväylää. Tila ei riitä kaikille piirilevyjohtimille. Ratkaisu on yhdistää mikropiirit käyttämällä sarjatiedonsiirtoväylää. Tällainen on esimerkiksi kahta johdinta käyttävä Inter-Integrated Circuit (I2C) -väylä, jolla ongelman voi ratkaista.
Tässä artikkelissa kerrotaan I2C-väylän historiasta ja siitä, miten se toimii muodostaen tehokkaan sarjayhteyden mikropiirien välille. Tämän jälkeen artikkelissa kuvataan I2C-väylän fyysinen toteutus, protokollan rakenne sekä tämän yleisen tiedonsiirtoväylän käyttökohteita. Esittelyyn käytetään Microchip Technologyn I2C-rajapintoja ja ratkaisuja. Artikkelissa kerrotaan myös I2C-väylän yhtäläisyyksistä ja eroista System Management Bus (SMBus) -väylään verrattuna.
Mikä I2C-väylä on?
Phillips Semiconductors, nykyiseltä nimeltään NXP Semiconductors, kehitti I2C-väylän 1980-luvun alkupuolella yksinkertaiseksi kaksisuuntaiseksi, kahta johdinta käyttäväksi väyläksi, joka mahdollistaa samalla piirilevyllä sijaitsevien integroitujen piirien tehokkaan viestinnän ja ohjauksen. Ensimmäinen spesifikaatio valmistui vuonna 1992 ja väylästä on sen jälkeen tullut de facto -standardi, joka on käytössä yli 50 mikropiirivalmistajan komponenteissa. Tämä laaja käyttö mahdollistaa järjestelmälähtöisen suunnittelutavan, jossa mikropiirejä voidaan sisällyttää I2C-väylän rakenteeseen ilman erikoissuunnittelua. Samaa perusarkkitehtuuria käyttävät myös useat erikoistuneemmat väylät, kuten SMBus ja Power Management Bus (PMBus) sekä monet muut.
I2C-väylä voi yhdistää useita mikropiirejä ja antureita, koska se käyttää osoitteita: seitsemän tai kymmenen bitin osoitekenttä mahdollistaa viestien lähettämisen päälaitteelta valitulle laitteelle. Alkuperäisen I2C-väylän suurin kellotaajuus oli 100 kilohertsiä (kHz), mutta vuosien mittaan nopeammat toimintatilat ovat nostaneet rajan 3,4 megahertsiin (MHz).
I2C-väylä käyttää kahta johdinta, jotka on nimetty sarjadatalinjaksi (SDA) ja sarjakellolinjaksi (SCL). SDA ja SCL ovat avoimen kollektorin kaksisuuntaisia linjoja, jotka on yhdistetty väylän positiiviseen jännitteeseen virtalähteen tai ylösvetovastuksen kautta. Väylään voidaan yhdistää useita laitteita, joiden enimmäismäärää rajoittaa väylän kapasitanssi. Ohjainlaite hallinnoi väylää ja jokaisella väylän laitteella on yksilöllinen osoite. Ohjainlaite voi sekä lähettää että vastaanottaa dataa väylän kautta (kuva 1). I2C tukee useaa ohjainlaitetta ja sisältää törmäystunnistuksen ja neuvottelun, jonka avulla estetään kahta tai useampaa ohjainlaitetta käynnistämästä datansiirtoa samanaikaisesti. Tämä artikkeli keskittyy kuitenkin yhtä ohjainlaitetta käyttäviin konfiguraatioihin.
Kuva 1: Microchip Technologyn esittelyalustan piirikaavio. Piiri sisältää viisi eri laitetta yhdistävän I2C-väylän. Ohjainlaite on kortin ulkopuolella ja se yhdistetään liittimen P1 kautta. SCL- ja SDA-linjat on esitetty vihreällä ja kaksi ylösvetovastusta on ympyröity sinisellä. (Kuvan lähde: Microchip Technology)
Kuvassa 1 näytetään Microchip Technologyn PKSERIAL-I2C1-I2C-esittelyalustan piirikaavio. Tällä kortilla toteutetaan I2C-väylä käyttäen viittä eri laitetta: EEPROM-piiri, lämpötila-anturi, 12-bittinen analogia-digitaalimuunnin (ADC), 10 bittinen digitaali-analogiamuunnin (DAC) sekä 8-bittinen sarjaväylä–rinnakkaisväylä-muunnin. Ohjainlaite ei ole kortilla, vaan se yhdistetään liittimen P1 kautta. SDA- ja SCL-väylälinjat on esitetty vihreällä ja ylösvetovastukset on ympyröity sinisellä.
SDA- ja SCL-tasot ovat yleensä kiinteä prosenttiosuus positiivisesta syöttöjännitteestä, joka ilmaistaan tavallisesti merkinnällä VDD. Viitearvoiksi on asetettu 70 % jännitteestä VDD loogiselle arvolle ”1” (ylhäällä) ja 30 % arvolle ”0” (alhaalla).
Kellosignaalit lähetetään purskeina, yksi kellosignaali jokaista lähetettyä databittiä kohti. SDA-linjan datan tulee olla validi, kun kellosignaali on ylhäällä. Dataa voidaan muuttaa vain, kun kellosignaali on alhaalla.
Suunnittelijan näkökulmasta uudet projektit helpottuvat, koska I2C-rajapinnat on jo integroitu mikropiireihin eikä rajapintaa tarvitse suunnitella. Kukin laite kytketään suoraan väylään. Mikropiirejä voidaan lisätä tai poistaa väylästä ilman että sillä olisi vaikutusta muihin piireihin (mikäli mikropiirien kokonaismäärä ei lähesty kapasitanssirajaa). Yksinkertainen, kaksijohtiminen väylä minimoi kunkin mikropiirin nastojen ja piirilevylle tarvittavien johtimien määrän.
I2C-protokolla
Väylä on rakenteeltaan 8-bittinen ja tiedonsiirto tapahtuu tavuina. Kuten mainittu, alkuperäinen enimmäiskellotaajuus oli 100 kHz, mitä kutsutaan nykyisin Standard-tilaksi. Väylä tukee nykyisin Fast-tilassa 400 kilobitin (kbit/s) tiedonsiirtonopeutta, Fast Mode Plus -tilassa 1 megabittiä sekunnissa (Mbit/s) ja jopa nopeutta 3,4 Mbit/s High Speed -tilassa (HS-tila).
I2C-protokollaa on helpoin kuvata tarkastelemalla tyypillistä siirtoa väylän yli (kuva 2). Näyttökuvan lähde on Teledyne LeCroy -oskilloskooppi, jossa on matalan nopeuden sarjadatan liipaisu- ja dekoodauslisävaruste WS4KHD-EMB TD. Tämä oskilloskoopin lisävaruste voi tunnistaa jopa 19 matalan nopeuden sarjadatarajapintaa, kuten I2C, ja dekoodata niitä.
Kuva 2: Tyypillinen I2C-datapaketti, joka koostuu aloitusbitistä, osoitekentästä, kuittausbitistä, 17 datatavusta, joilla on jokaisella oma ACK-bittinsä, ja lopuksi stop-bitistä. Jokainen kenttä on erotettu värikoodatulla peittokuvalla. Ylempi (keltainen) näkymä on koko SDA-paketti ja sen alla esitetään SCL-kello (punainen). Kolmas ja neljäs näkymä ovat vaakasuunnassa laajennetut esitykset molemmista signaaleista. (Kuvan lähde: DigiKey)
Oskilloskooppi voi käynnistyä tietyistä sarjatiedonsiirtotapahtumista, kuten käynnistys, lopetus, puuttuva kuittaus (ACK), osoite, data, osoite ja data, kehyksen pituus ja EEPROM-datasiirto. Sarjadatastandardin protokollaelementit on yksilöity värikoodatulla peittokuvalla. Jokainen protokollan kenttä on dekoodattu joko binääri-, heksa- tai ASCII-muotoon, ja valittu koodi näkyy peittokuvassa.
SDA-signaali näytetään keltaisella viivalla ja SCL-signaali näytetään punaisella viivalla. Harmaa peittokuva ilmaisee käynnistys- ja pysäytystoiminnot. Tiilenpunainen peittokuva ilmaisee osoitedataa, sininen kenttä on pakettidataa ja oliivinvihreät laatikot ilmaisevat ACK-funktioita.
Ylimpänä kuviona näkyy koko I2C-väylän SDA-paketti alusta loppuun asti. Suoraan sen alla näkyy vastaava SCL-signaali. Kolmas kuvio on ajan suhteen laajennettu esitys SDA-signaalista, jonka alla näkyy synkroninen SCL-signaali.
Sekä SDA- että SCL-linja ovat lepotilassa ylhäällä kun väylä ei ole varattuna. SCL-signaali koostuu yhdeksän pulssin purskeista käytettävällä kellotaajuudella: yksi jokaista siirrettyä databittiä johti ja yksi lisäpulssi ACK-bitille.
Kaikki väylätapahtumat alkavat ohjainlaitteen synnyttämästä aloitusbitistä, joka on merkitty suurennetussa SDA-kuviossa harmaalla peittokuvalla. Käynnistys ilmaistaan siten, että ohjain vetää SDA-linjan alas samalla kun SCL on ylhäällä. Väylän katsotaan olevan varattu, kun ohjain on lähettänyt aloitusbitin. Ohjainlaite voi lähettää useita aloitussignaaleja, jolloin ensimmäisen jälkeen lähetettyjä kutsutaan usein uudelleenaloituksiksi.
Kaikki datasiirrot ovat 8 bitin (yhden tavun) mittaisia, ja niitä seuraa ACK-bitti. Bitit lähetetään merkitsevin bitti (MSB) ensin. Jokainen siirretty tavu tulee kuitata. Jos ohjattava laite on varattu eikä voi vastaanottaa tai lähettää dataa, se voi vetää SCL-linjan alas. Tämä pakottaa ohjaavan laitteen odotustilaan, kunnes ohjattava laite vapauttaa SCL-linjan.
ACK-bitti muodostetaan, kun lähettävä laite vapauttaa SDA-linjan ennen yhdeksättä kellopulssia (kuittaus). Jos vastaanottava laite on vastaanottanut datatavun, se vetää SDA-linjan alas. Kuvassa 2 olevassa suurennetussa SDA-näkymässä näkyy kapea piikki juuri ennen yhdeksättä kellopulssia: se on SDA-linja, joka vapautetaan takaisin ylös. Vastaanottaja vetää SDA-linjan alas, mikä synnyttää ACK-signaalin, jota merkitään oliivinvihreällä peittokuvalla. Jos vastaanottaja ei vedä SDA-linjaa alas ennen yhdeksättä kellopulssia, vastaus on ei-kuittaus (NACK). NACK-tilanteessa ohjain voi joko synnyttää stop-signaalin ja keskeyttää siirron tai yrittää uudelleen muodostamalla uuden aloitussignaalin.
Aloituksen jälkeen annetaan välittömästi ohjattavan laitteen osoite. Tämä on merkitty tiilenpunaisella peittokuvalla. Mahdollisia osoitemuotoja on kaksi, 7- ja 10-bittinen, joista 7-bittinen on yleisempi. Ensimmäiset 7 bittiä aloituksen jälkeen muodostavat osoitedatan. Kahdeksas bitti ilmaisee datan suunnan, joka voi olla luku tai kirjoitus. Kirjoitus ilmaistaan alhaisella SDA-linjalla, kun taas korkea SDA-linja tarkoittaa lukuoperaatiota. 10-bittisissä osoitteissa käytetään kahta ensimmäistä tavua aloituksen jälkeen. I2C varaa useita osoitteita sisäisille toiminnoilleen. Dekoodattu osoitedata näkyy osoitteen peittokuvassa binääri-, heksa- tai ASCII-muodossa.
Siniset peittokuvat ilmaisevat datasiirtoja. Kukin niistä on kahdeksan bittiä pitkä ja niitä seuraa ACK/NACK-vastaus. I2C-paketin datatavujen määrää ei ole rajoitettu, mutta kuvassa 2 niitä on 17. Dekoodattu data, kuten dekoodattu osoite, näytetään datan peittokuvassa. Datavirtaa seuraa ohjainlaitteen generoima stop-bitti datasiirron lopussa. Sitä ilmaisee harmaa peittokuva ylimmässä datakuviossa. Stop-tavu muodostuu SDA-linjan nostosta alhaalta ylös samalla kun SCL-linjan on ylhäällä. Stop-signaalin jälkeen väylä on jälleen vapaa.
Näytön alaosassa oleva taulukko koostaa yhteen kaikki datapakettia koskevat tiedot, kuten käynnistyksestä kuluneen ajan, osoitteen pituuden, osoitteen, luku- tai kirjoitusoperaation, paketin pituuden ja yhteenvedon datasisällöstä. Taulukon kirjauksien määrä vastaa oskilloskoopin tallentamien I2C-pakettien määrää, ja tässä tapauksessa se on vain yksi viiva.
Protokollavirhe ilmaistaan kirkkaanpunaisella laatikolla muiden protokollaa koskevien peittokuvien takana.
I2C-laitteet
Eräs I2C-väylän suurimmista eduista on se, että se löytyy erittäin suuresta määrästä laitteita. Microchip Technologyn esittelykortilla on muutamia esimerkkejä mikropiireistä, joihin sisältyy I2C-väylä tai jokin sen muunnoksista, kuten SMBus.
Microchip Technologyn PIC16F677 on 8-bittinen mikrokontrolleri, jota käytetään monissa sulautetuissa toteutuksissa. Siinä on synkroninen sarjaportti, joka voidaan ohjata viestimään joko sarjalaiteliitännän (SPI) tai I2C-protokollan kautta muiden ohjaimien tai lisälaitteiden kanssa (kuva 3).
Kuva 3: Microchip Technologyn PIC16F677 on 8-bittinen mikrokontrolleri, jonka synkroninen sarjaportti (korostettu oranssilla) voidaan ohjelmoida joko SPI- tai I2C-väyläksi. (Kuvan lähde: Microchip Technology)
Tämä mikrokontrolleri tukee I2C-protokollaa sekä ohjaavana että ohjattava laitteena joko 7- tai 10-bittisellä osoitteella. Se käyttää SCK/SCL-nastaa I2C-protokollan SCL-kellosignaalille ja SDI/SDA-nastaa datasignaalille.
Nämä kaksi nastaa on yhdistetty I2C-väylän SCL- ja SDA-linjoihin, jolloin tiedonsiirto muiden laitteiden kanssa on mahdollista. Yhteys muodostetaan usein I2C-pohjaiseen anturiin, kuten Microchip Technologyn kahta johdinta käyttävään sarjaliitäntäiseen lämpötila-anturiin TCN75AVOA713 (kuva 4).
Kuva 4: Microchip Technologyn lämpötila-anturi TCN75A yhdistetään suoraan PIC16F677-mikrokontrolleriin lämpötilatiedon lähettämistä varten. (Kuvan lähde: Microchip Technology)
Sarjatiedonsiirtomahdollisuus on tuonut lisää toimintoja tähän lämpötila-anturiin. Sen sisäisten, käyttäjän ohjelmoitavien rekisterien avulla voidaan asettaa lämpötilan mittaustarkkuus ja virtaa säästävä sammutustila sekä jopa hälytyslähtö, joka ilmaisee, kun lämpötila-alue ylittää ennalta asetetut rajat.
Saatavana on myös useita laitteita, jotka dekoodaavat I2C-sarjadatavirran ja muuntavat sen rinnakkaisdataksi. Esimerkkinä toimii Microchip Technologyn 2-johtiminen I/O-laajennin ja tuuletinohjain MIC74YQS-TR (kuva 5).
Kuva 5: Microchip Technologyn I/O-laajennin MIC74YQS-TR muuntaa sarjadatavirran kahdeksaksi erilliseksi rinnakkaiseksi I/O-linjaksi. (Kuvan lähde: Microchip Technology)
Tämä mikropiiri on täysin ohjelmoitava I/O-laajennin, joka tarjoaa kahdeksan erillistä I/O-linjaa. Kukin I/O-linja voidaan ohjelmoida erikseen tuloksi tai lähdöksi. Kuvassa 5 näkyy MIC74YQS-TR ohjaamassa kahdeksaa lediä sarjaväylältä saatavan ohjauksen mukaan. Tämä vastaa MCO23008-piirin käyttöä kuvan 1 I2C-esittelykortilla. MIC74YQS-TR voi yhdessä tehoregulaattorin kanssa toteuttaa myös tuulettimen moottorin nopeusohjauksen neljää merkitsevintä bittiä käyttäen.
SMBus ja I2C
I/O-laajentimen sarjatulo on suunniteltu SMBusia varten, mutta se on yhteensopiva myös I2C-väylän kanssa. SMBus-määritys perustuu I2C-väylään ja sen tekivät Intel ja Duracell vuonna 1994. Tärkein ero on, että standarditilan I2C-logiikkatasot ovat suhteessa jännitteeseen VDD, kun taas SMBusissa ne ovat kiinteitä. Useimmissa tapauksissa, kun VDD on 3 voltin ja 5 voltin välillä, tämä ei ole osoittautunut ongelmaksi.
Toinen ero on se, että SMBus on rajoitettu enintään 100 kHz:n kellotaajuuteen, kun taas I2C-protokollassa on useita tiloja, jotka tukevat korkeampia kellotaajuuksia. Väyliä yhteen sovitettaessa tämä rajaa suurimmaksi kellotaajuudeksi 100 kHz eli I2C-protokollan standardikellotilan.
SMBus ja I2C ovat siis tiettyjä erikoistilanteita lukuun ottamatta yhteensopivia.
Yhteenveto
I2C-väylää ja sen johdannaisia käytetään sadoissa kaikentyyppisissä mikropiireissä, joten ne on helppo yhdistää suunniteltaessa erilaisia tuotteita ja sovelluksia. Sekasignaalianturien ja analogisten antureiden käyttö laajentaa mikrokontrolleripohjaisten sulautettujen järjestelmien käyttöalueita. Kaiken tämän voi saavuttaa yksinkertaisen, kahta johdinta käyttävän digitaalisen sarjarajapinnan kautta.

Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.