Barne zirkuitu integratu

**Barne zirkuitu integratua** datu-serieko bus bat da (ingelesez '''*Two Wire Interface* (I²C)'*) Phillips Semiconductors enpresak (gaur egun NXP Semiconductors) 1982. urtean garatutakoa. Zirkuitu baten zati ezberdinen arteko komunikaziorako erabiltzen da nagusiki, adibidez, mikrokontrolagailu eta periferikoen arteko komunikazioa sortzeko. I²C-k bus berdinera hainbat gailu konektatzeko abantaila dauka. Horrez gain, serieko beste protokolo batekin konparatzen bada (adibidez, transistore-transistore teknologiarekin (TTL)), aukera dago komunikazio trama bakoitzean bit gehiago barneratzeko. Hori dela eta, mezu egonkorragoak eta zehatzagoak bidaltzen dira.

I²C portu batetik bidalitako mezuek, informazio-bytea ez ezik, sentsorearen eta erregistroaren helbideratze-sistemak ere badituzte. Beraz, komunikazio batean hartzaileak jasotako informazioaren baieztapen-mezua (ingelesez, ACK) bidaltzen du. Ondorioz, I²C-k komunikazio batean parte hartzen duten elementuak desberdintzen ditu. 

## Historia 
Philipsek 1981. urtean I²C bus-aren patentea argitaratu zuen eta hau 1982. urtean ofizialdu zen bere lehen inplementazioarekin. Lehen bertsio honek 100 kbit/s-ko abiadurak jasateaz gain, bus partekatu baten erabilerarekin hainbat gailu konektatzeko aukera ematen zuen. 1992. urtean protokoloaren lehen estandarizazioa ezarri zen eta bere lehen eguneraketak *Fast-mode*-a (FM) ezarri zuen eta, horri esker, 400 kbit/s-ko abiadurak lortzeko gai izan zen. Bideraketa bit kopurua 8 izatetik, 10era igaro zen; ondorioz, konektatzeko gailuen kopuru maximoa 1008 nodoetara handitu zen. 

1998an sistema elektrikoen konplexutasuna handitzen ari zenez, *High-speed mode*a (Hs) ezarri zuten; ondorioz, 3.4 Mbit/s-ko abiadurak lortu ziren eta aurrerapen handiak egin ziren abiadura handiko eta kontsumo baxuko aplikazioetan.

2007. urtean 3.0 bertsioa argitaratu zuten eta honek *Fast-mode plus*-a (Fm+) zuen barne 1 Mbit/s-eko abiadurak lortuz. Bestalde, funtzio berriak ere barne zituen, hala nola, gailuetarako identifikatzaile bakarra. Horri esker, busaren nodo bakoitza zehaztasunez aukeratzeko gai ziren. 2012an 4.0 bertsioan,  *Ultra Fast-mode*arekin (UFm) 5 Mbit/s-ko abiadurak lortu ziren. Horrekin, pull-up erresistentzien erabilera deuseztatu zen,  push-pull logikaz baliatuz. Halere, UFm-a noranzko bakarrekoa zenez, bere erabilera murriztu egin zen.

2021ean I3C estandarrarekin bateragarritasuna eta praktika inklusibo modernoak bermatzeko terminologia aldaketak egin ziren maisu-morroi kontrolatzaile-helburuagatik. Bestalde, fabrikatzaileen ID berriak gehitzeaz gain,  I3Caren laburpen bat jarri zuten, sistema aurreratuetara igarotzeko erraztasunak eman zituena.

## Bus sistema 
I²C maisu-morroi bus bezala diseinatuta dago. Datu-transferentzia maisuak hasten du beti, eta morroiak erantzuten du. Nodo multimaisu baten bitartez maisu anitz egon daitezke. Hori dela eta, maisuen arteko komunikazioa gauza daiteke, non maisu batek morroi bezala jokatzen duen. Busaren sarbide kontrola zehaztapenek arautzen dute, eta horrela maisuak txandakatzen dira.
[thumb|Adibide eskematiko bat, *pull-up* erresistentziak (Rp) dituen maisu batekin (mikrokontrolagailu bat) eta hiru nodo morroirekin ([Seinale analogikotik digitalerako bihurgailua|ADC bat, DAC bat eta beste mikrokontrolagailu bat).]]

### Definizio elektrikoa 
Diagraman hiru gailu agertzen dira eta maisu batera konektatuta daude. I²C-k  komunikaziorako bi seinale dauzka: erlojua (SCL, *Serial Clock*) eta datu konexioa (SDA, *Serial Data*). Konexio bakoitza VDD tentsiora konektatuta dago *pull-up* erresistentzia baten bitartez. Horrez gain, lotura hauetara konektatutako edozein gailu drainatzaile edo kolektore irekikoa da (*Open Collector*), eta horrek *pull-up* erresistentziekin batera *Wired''-AND zirkuitua osatzen du. Maila altuak  0.7 x VDD izan behar du gutxienez, eta maila baxuak gehienez 0.3 x VDD. Serieko erresistentziak (diagraman ez dira agertzen), gailuen sarreran konektatzen direnak, hautazkoak dira eta babesa sortzeko erabiltzen dira. I²C busak logika positiboa erabiltzen du, hau da, SDA loturan maila altuari '1' logiko deritzo, eta maila baxuari, aldiz, '0' logiko.

### Pultsu eta busaren egoera 
Erloju-seinalea beti maisuak sortzen du. Zehaztutako modu bakoitzeko, baimendutako gehienezko erloju-pultsu bat dago, hurrenez hurren. Oro har, erloju seinale motelagoak ere erabil daitezke, betiere maisuaren interfazearekin bateragarriak badira. Hala ere, zirkuitu integratu batzuek (adibidez, ADC eta DAC bihurgailuek) gutxieneko maiztasun bat behar dute era egokian funtzionatzeko. Hurrengo taulan erlojuaren gehienezko erloju onargarriak agertzen dira. 

Morroiak maisuaren erlojuak agindutakoa baino denbora gehiago behar badu, banako byteen transferentziaren artean behe-mailako erloju-seinalea edo maila beheko seinalea (*clock-stretching*) manten dezake, maisua modu horretan moteltzeko.

Datuak (banakako bitak) bakarrik erabilgarriak dira baldin eta erloju altuko fase batean bere balio logikoa aldatzen ez bada. Hiru salbuespen daude: hasiera, geldialdia eta hasierako seinalea edo *reset*. Hasierako seinalea beheranzko saihets bat da SDAn, SCL maila altuan dagoen bitartean. Gelditzeko seinalea goranzko saihets bat da SDAn, SCL maila altuan dagoen bitartean. *Reset* seinaleak *hasieratu* seinale bezala jokatzen du. 

Datu unitate bat 8 bit (balio edo helbide bezala interpretatu daitezke, protokoloaren arabera) eta bi ACKz osatuta dago. Azkenengo bit honek maila altuko NACK (*not acknowledge*) bezala adierazten da morroi baten bitartez, SDAren maila baxu eta SCLren bederatzigarren maila altuaren artean (maisuak sortzen jarraitzen du). Morroiak SDAn maila baxu bat jarri behar du SCLk maila altua ipini baino lehen; bestela, beste parte hartzaile batzuek egoera hau abiaratze seinale bat bezala interpretatu dezakete.

### Bideraketa 
I²C-ren helbideratze estandarra maisuak bidalitako lehenengo bytea da. Lehenengo 7 bitak helbidea adierazten dute, eta zortzigarrenak (R/W bit), aldiz, morroiari jakinarazten dio maisuaren datuak jaso behar dituen (maila baxua) edo maisuari datuak bidali behar dizkion (maila altua). Beraz, I²C-k 7 biteko helbideratze busa erabiltzen du, eta horri esker, 112 nodo ere egon daitezke bus batean (16 helbide 128 posibleetatik xede berezietarako erreserbatuta daude).

I²C teknologia jasateko gaitasuna duten zirkuitu integratu bakoitzak fabrikatzaileek lehenetsitako norabide bat du, eta azken hiru bitak (azpizuzendaritza) hiru kontrol pinen bitartez finkatuta gerta daitezke. Kasu honetan, I²C batean gehienez 8 zirkuitu integratuk funtziona dezakete. Hala ez bada, zirkuitu integralak (antzekoak izan behar dira) hainbat I²C busen bitartez kontrolatu behar dira.  

Helbideak oso eskasak zirenez, geroago 10 biteko helbideraketa sartu zen. Bateragarria da 7 biteko estandarrarekin, erreserbatutako 16 helbideetatik 4 erabiliz. Bi helbideratze moduak aldi berean erabil daitezke, bus bakar batean gehienez 1136 nodo kopurua barneratuz. 

### Transferentzia protokoloa 
Transmisio baten hasiera maisuaren hasieratze seinalearen bidez adierazten da, norabidearen bitartez jarraitua. Dagokion morroiaren ACK bitak baieztatzen du. R/W-Bitaren funtzioaren arabera datuak idazten (datuak morroiari) edo irakurtzen (datuak maisuari) dira. ACK morroitik bidaltzen da idaztean, eta maisutik irakurtzean. Maisuak "irakurritako" azken bytea NACK bezala ezagutzen du transmisio baten amaiera adierazteko. Transmisio bat gelditzeko seinaleak eteten du. Baliabide gisa, transmisio berri baten hasieran *reset* seinale bat bidal daiteke, aurreko transmisioa gelditzeko seinale batekin amaitu barik. 

Byte guztiak  *Most Significant Bit First* (bit esanguratsuena lehena) metodologia jarraituz transmititzen dira. 

Abiadura handiko modurako (*High-Speed-Mode*) maisuaren kode bat bidaltzen da modu estandar edo azkarraren bidez, maiztasun gehiketa aldatu aurretik.

## Erabilera 
thumb|EEPROM bus I²C seriea, STMicroelectronics-eko 8 kbit 24C08.
I²C protokoloa oso estimatua da bere sinpletasun eta eraginkortasunagatik, mikrokontrolagailu bakarra izanik hau gai baita gailu ezberdinez beteriko sare bat kudeatzeko soilik SDA eta SCL pinak erabiliz. Azken ezaugarri honek nabarmenki txikitzen ditu diseinu eta produkzio kostuak zirkuitu integratuan behar diren pin kopuruak murriztuz. Fisikoki tamaina txikitzean eta konektibitaterako behar dituen konexio kopurua murriztean, konexioen arteko hutsegite arriskua ere murriztu egiten da.

I²C-a gaur egungo beste bus batzuk baino motelagoa den arren, oso erabilgarria da abiadura handien beharra ez duten aplikazioetarako. Bere erabilera oso zabaldurik dago, besteak beste, honako hauetan: sentsore, denbora errealeko erloju, bihurgailu analogiko-digitaletan, EEPROM memorietan eta multiplexadoreetan. Beste abantailetako bat bere *hot-plugging*aren onarpen ahalmenean datza, ondorioz, erabiltzen den bitartean, bus ezberdinak gehitu zein kentzeko ahalmena izango baita.

Gainera I²C-a beste estandar batzuen oinarria da, hala nola: ACCESS.bus, VESA (DDC) edo SMBus-arentzat. DDCan ekipoaren eta monitorearen arteko komunikazioa bermatzeko eta SMB-busean plaka nagusiaren osagai ezberdinak komunikatzeko.

Bestalde, I²C-a maisu ugariko moduan ere konfigura daiteke; ondorioz, sare berean hainbat maisu izanik, sarearen konplexutasun maila handiagotu daiteke.

## Egonkortasuna 
I²C-a protokoloa eraginkorra den arren, interferentzien aurrean ahuldura nabarmenak ditu. Horregatik, bere erabilera ingurune kontrolatuetara mugatzen da. Honen arrazoi nagusienak zarata elektromagnetikoak, diafoniak eta konexio fisikoetan egon daitezkeen arazoak dira. Ondorio hauengatik, ez da protokolo erabilgarria distantzia handiko komunikazioetarako edo maiztasun handiko inguruneetan erabiltzeko.

Hala ere, ahuldura horien eragina gutxitzeko moduak ere badaude; nabarmenenak kable espezialen erabileran eta intentsitate edo tentsio igoeran oinarritzen dira. Horrela, distantzia handiagoetara modu seguruago batean informazioa transmiti daiteke. Bestalde, CAN busean protokoloa zuzenean geruza fisikoan inplementatzeak komunikazio sendoago baten emaitza izango du. 

Protokolo honen beste arazoetako bat itxarote denbora mekanismorik ez izatea da eta, ondorioz, sistemak blokeatzeko arriskua dago. Morroi batek SDA maila logiko baxuan uzten badu ("0") berrabiarazpen baten ondoren, bus osoaren erabilera baliogabetuko du. Kasu honetan, sistema berriro erabilgarria izan dadin, sistema osoa guztiz berrabiaratu beharko da. Arazo hau ekiditeko, gaur egungo sistema eguneratuenek *watchdog-*aren erabilera edo morroien berrabiarazte automatikoak dituzte. 

Aipaturiko segurtasun neurriek I²C-aren erabilera zabalagoa izatea egiten dute. Hala ere, protokolo honen erabilera  ingurune kontrolatuetara mugatzea hobesten da. Aipaturiko arrazoi guztiengatik bere erabilera oso zabaldua dago aplikazio sinple eta ekonomikoetarako, baina ez, ordea, aplikazio konplexuetarako.

## Erreferentziak 
## Ikus, gainera 
* I3C
* SPI
* UART
* CAN

## Kanpo estekak 
*www.i2c-bus.org, I²C busari buruzko informazio zehatza alemanez eta ingelesez.
*I²C Bus and Access Bus, antzekotasunen eta desberdintasunen aurkezpena (ingelesez)