I3C

MIPI **I3C** (ingl *Improved Inter-Integrated Circuit*), samuti tuntud kui **SenseWire**, on spetsifikatsioon, mis defineerib integraallülituste vahelise kommunikatsiooni elektriühendused ning signaalimustrid.
Spetsifikatsioon määrab integraallülitustevahelisteks elektriliseks ühenduseks kaks juhet, mida jagavad kõik siinil olevad seadmed, millest üks käitub ülemsõlmena. Ühte juhet (`SCL`) kasutatakse taktsignaali jaoks, mis määrab signaali diskreetimishetked, ning teist juhet (`SDA`) signaali kandmiseks.

I3C spetsifikatsioon projekteeriti mitme elektroonika- ja arvutiriistvaratootjate poolt koostöös MIPI Alliance'iga (ingl *Mobile Industry Processor Interface Alliance*). I3C Spetsifikatsioon avaldati MIPI Alliance'i liikmetele esmakordselt 2017. aasta alguses ning avalikkusele sama aasta lõpus.

I3C spetsifikatsioonil on sarnasusi vanema I²C protokolliga, mis oli *[[de facto]]* standard väikese kiirusega kommunikatsiooniks integraallülituste vahel. I3C spetsifikatsioon kasutab samu elektroonilisi ühendusi, on saanud selle järgi nime ning on ka osaliselt tagasiühilduv. See lubab I²C seadmetel olla ühendatud I3C siinil, aeglustamata kiiremate seadmete kommunikatsiooni.

## Ajalugu
MIPI Sensor Working Groupi (2019. aasta oktoobrist I3C Working Group) eesmärgid avalikustati 2014. aasta novembris MEMS Executive Congress-il.

Detsembris 2016 avalikustas Lattice Semiconductor uue I3C võimekusega FPGA iCE40 UltraPlus. 

Detsembris 2017 avalikustati I3C 1.0 spetsifikatsioon.

Juunis 2020 tõi Renesas Electronics turule I3C multiplekserid ja sisendi/väljundi laiendid.

Juulis 2020 avaldati, et JEDEC poolt välja töötatud DDR5 SDRAM kasutab modifitseeritud I3C Basic versiooni.

## Eesmärgid ja eelised
I3C spetsifikatsiooni peaeesmärgiks oli luua modernne keskmise kiirusega jadaühendussiin mobiilsete tehnoloogiate, autotööstuse ja nutistu seadmete jaoks.
See saavutas mitmeid eeliseid varasemale I²C protokollile:
* Sama elektriline ühendus, mis lubab ühendada vanemaid I²C alamsõlmi I3C ülemsõlmega

* Väiksem energiatarve

* Alamsõlm võib lõpetada kommunikatsiooni, mistõttu ei ole sõnumi pikkust algusest vaja teada

* Katkestused on integreeritud suhtluse sisse ning ei vaja lisakaableid

* Dünaamiline aadresside jaotus I3C alamsõlmedele ning I²C alamsõlmede staatiliste aadresside toetus

* Standardiseeritud ühised käsusignaalid (CCC)

* Käsu järjekorra tugi

* Veatuvastus ja taastus (paarsuskontroll SDR režiimis ning 5-bitine CRC HDR-režiimis)

* Mitme ülemsõlmega süsteemidele kindlalt defineeritud protokoll kontrolli üleandmiseks

## Versioonid
### I3C v1.0
Avaldatud 2017. aasta detsembris, see spetsifikatsioon on esimene ametlik I3C versioon.
### I3C Basic
Avaldatud 2018. aasta detsembris, see spetsifikatsioon on saadaval kõigile läbi RAND-Z litsentsi ning on mõeldud MIPI organisatsiooni mitte kuulutavtele arendajatele ja organisatsioonidele. Selle versiooni eest ei pea tasuma litsentsi- või autoritasusid, kuid on piiratud HDR režiimi ja lisafunktsioonide kasutus.
### I3C v1.1
Avaldatud 2019 aasta detsembris, see spetsifikatsioon on saadaval ainult MIPI liikmetele.
### I3C v1.1.1
Avaldatud 2021 aasta juunis, aegunud "master/salve" (juht/ori) terminoloogiat asendas "controller/target" (kontroller/sihtmärk) nomenklatuur.

## Seadmeklassid

I3C siinil, mis on standardkiirusega režiimis, toetatakse nelja tüüpi seadmeid:
* I3C peamine ülemsõlm
* I3C teisejärguline ülemsõlm
* I3C alamsõlm
* I²C alamsõlm (tagasiühilduvus)

## Disain
### Elektrilised ühendused
I3C kasutab samu elektrilisi ühendusi kui I²C, millele viidatakse kui SCL (ingl *serial clock*) ja SDA (ingl *serial data*). Nende olulisim vahe on see, et I²C kasutab mõlemal siinil alati avatud kollektoriga väljundit ning selle kiirus on limiteeritud aeglase tõusuaja tõttu. I3C kasutab avatud kollektoriga väljundit ainult tagurpidiühilduvuseks ning kasutab igal teisel võimalusel lükka-tõmba väljundit.
* SCL on standardne taktsignaal, mida genereerib peamine ülemsõlm andmete ülekandel. Kommunikatsioonis I²C alamsõlmedega on antud taktsignaali täitetegur ligikaudu 50% kuid suheldes I3C alamsõlmedega võib ülemsõlm vahetada kiiremale sagedusele ja/või muuta täitetegurit, et SCL kõrge oleku periood on maksimaalselt 40 ns.
* SDA kannab jadamisi andmevoogu, mis võib olla genereeritud ülem- või alamsõlme poolt, kuid selle kiirus on reguleeritud ülemsõlme SCL signaaliga. Tagurpidiühilduvuseks I²C protokolliga algavad kõik SDA siini vahendused avatud kollektoriga väljundi režiimis, mis limiteerib kiirust. Saates andmeid I3C sõlmedele, vahetab signaali genereerija oma väljundi lükka-tõmba režiimi peale esimesi bitte, et ülemsõlm saaks taktsignaali tõsta 12,5 MHz peale.
### Andmepakett
Sarnaselt I²C-ga kasutab I3C andmepakette sünkroonimiseks. Ühe andmepaketi sees peaksid kõik muutused SDA siinil toimuma, siis kui SCL on madalas olekus. Selle reegli rikkumist kasutatakse standardkiiruse ning tagasiühilduvusrežiimil, et tähistada andmepaketi algust ja lõppu.
Andmepakettide vahel hoiab ülemsõlm SCL siini kõrges olekus, sellega peatades kella, samal ajal seatakse SDA signaali generaatorite väljundite impedants kõrgeks, et siini oleks võimalik hoida kõrges olekus läbi toitevooluga ühendatud takisti. SDA liikumist kõrgest olekust madalasse kui SCL on kõrges olekus loetakse START sümboliks, mida tõlgendatakse uue andmepaketi algusena. SDA liikumist madalast kõrgesse olekusse kui SCL on kõrges olekus loetakse STOP sümboliks, mida tõlgendatakse andmepaketi lõpuna.

Mitu järjestikust START signaali ilma vastavate STOP signaalideta kutsutakse korratud stardiks ning võimaldab saata mitu sõnumit ühes andmepaketis.

I²C kommunikatsioonis genereerib START signaali enamasti ülemsõlm, aga I3C kommunikatsioonis on selleks võimelised ka alamsõlmed. Seda kasutatakse eri lisafunktsioonides nagu mitme ülemsõlme tugi, käigultühendus ja siinisisesed katkestused.
### Üheksas bitt
I²C ja I3C mõlemad kasutavad 9 kellatsüklit, et saata üks 8-bitiline bait, aga nende 9. kellatsükkel täidab erinevaid funktsioone. I²C kasutab viimast tsükli biti, et saata andmete kätte saamise kinnitus saaja poolt. I3C kasutab sama tehnikat I²C alamsõlmedega suheldes ning I3C seadmetega suheldes andmepaketi esimese (aadress) baidi jaoks. Peale esimest baiti kasutatakse kirjutamisel seda paarsusbitina ning lugemisel andmete lõpu märgistusena.

Kirjutamist saab lõpetada ainult ülemsõlm, aga lugemist võib lõpetada nii alam- kui ülemsõlm. Kui alamsõlm seab SDA madalasse olekusse, et märgistada andmete lõppu, siis ülemsõlm vastab STOP või korduva START signaali genereerimisega.
### Siini arbitreerimine
Ühe andmepaketi alguses võivad mitu sõlme avaldada soovi kasutada siini. Sel juhul kasutatakse siini arbitreerimist, et määrata millisele sõlmele antakse kontroll siini üle. Nii I²C kui ka I3C puhul kasutavad sõlmed avatud kollektoriga väljundit SDA siinil, et sõlmed, mis seavad oma väljundi madalaks kirjutaksid üle sõlmed, mille väljundid on seatud kõrgeks. Konkureerivad sõlmed jälgivad siini ning edastavad aadressi alustades suurima kaaluga bitist, kui sõlm tuvastab SDA siinil madalat olekut samal ajal edastades kõrget olekut, siis langeb see sõlm konkurentsist välja. I3C puhul kestab see aadressi baidi lõpuni ning siinile jääb kõige madalama aadressiga seade.
### Common command codes (CCC)
Kirjutamist reserveeritud aadressile `0x74` kasutatakse I3C spetsifikatsioonis erikäskude täitmiseks. Kõik I3C seadmed peavad olema võimelised vastu võtma ja mõistma sõnumeid saadetud sellele aadressile lisaks nende individuaalsele aadressile.

Kirjutamine antud aadressile ilma edasiste andmeteta ei oma efekti I3C seadmetel, aga võidakse kasutada arbitreerimise kiirendamiseks. 

Kirjutamine antud aadressile koos andmebaidiga aktiveerib vastava erikäsu. Käsukoodid `0-0x7F` on adresseeritud kõigile I3C sõlmedele ning sellele võivad järgneda ka käsu spetsiifilised parameetrid. Käsukoodid `0x80-0xFE` on adresseeritud kindlatele I3C sõlmedele. Nendele järgnevad korduvad START signaalid ning kirjutamised või lugemised.

## High Data Rate (HDR) režiim
Kõik I3C siinil toimuvad suhtlused standardkiiruse (SDR, ingl *Standard Data Rate*) režiimis, kuid I3C ülemsõlm võib välja saata "Sisene HDR režiimi" käskluse, mis teavitab kõiki siinil olevaid I3C alamsõlmi, et kommunikatsioon jätkub täpsustatud kõrgkiiruselises (HDR, ingl *High Data Rate*) režiimis. I3C alamsõlmed, mis ei toeta kõrgkiiruselist režiimi ignoreerivad siinil liikuvat informatsiooni seni, kuni väljastatakse "Välju HDR režiimist" käsklus, mis informeerib alamsõlmesid, et on aeg hakata uuesti jälgima siinil toimuvat. Ülemsõlm teab millised alamsõlmed on võimelised kõrgkiiruselist režiimi kasutama ning ei ürita alustada kõrgkiiruselist režiimi alamsõlmedega, mis seda ei toeta.

Mõned kõrgkiiruselise režiimi variandid on ühilduvad ka I²C seadmetega juhul kui neil on SCL siinil 50 ns pingeimpulsi filter, mis lubab seadmel ignoreerida positiivseid impulsse lühemad kui 50ns. See on I²C spetsifikatsioonist, aga pole alati implementeeritud ning osa implementatsioone ei ignoreeri korduvaid pingeimpulsse, mistõttu tuleb kontrollida ühilduvust enne kasutamist.

## Vaata ka
* I²C
* MIPI Alliance
## Viited

## Välislingid
MIPI I3C Basic versioon