I²C: erinevus redaktsioonide vahel
Eemaldatud sisu Lisatud sisu
PResümee puudub |
P pisitoimetamine |
||
1. rida:
{{Toimeta|lisaja=Kuriuss|aasta=2018|kuu=detsember}} {{keeletoimeta}}
'''I²C''' ("i-ruut-c" või "i-kaks-c" millele üldiselt viidatakse kui "kahejuhtmeliidesele") on mitme võimaliku ülemaga jadasiin, mis leiutati [[Philips
Alates 2006. aastast ei ole vaja I²C protokolli kasutamiseks litsentsi osta, kuid omandamaks alluva aadressi, peab maksma tasu [[NXP]]-le (varem tuntud kui Philipsi pooljuhtelektroonika divisjon).<ref>[http://www.nxp.com/products/interface_control/i2c/licensing/ I²C Litsentsimisteave]</ref>
7. rida:
[[Pilt:I2C.svg|pisi|350px|Näidisskeem ühe ülem- (''master'') ja kolme alamsõlmega (''slave''). R<sub>p</sub>]]
I²C kasutab vaid kahte kahesuunalist [[avatud kollektor
I²C näidisdisainil on 7- või 10-bitine (olenevalt kasutatavast seadmest) aadressiruum. Kõige tavalisem kiirus, millega seda siini kasutatakse, on 100
Tuleb silmas pidada, et andmevahetuskiirused, mida eespool mainiti, on infovahetus ülem- ja alamseadmete vahel ning ilma taktivenituseta või muude riistvara kulutusteta. Protokolli kulutuste alla kuuluvad alama aadress ja mõni kord ka [[register|registri]] aadress alam-seadmes, samamoodi ka baidi [[ACK/NACK]] bitid. Sellest tulenevalt on kasutaja kasuliku andmemahu kiirus väiksem kui seadmete vahel toimuv suhtluskiirus. Näiteks kui iga suhtlus alamseadmega lubaks saata vaid ühte baiti infot saaksime kasuliku infovahetuskiiruse vaid poole seadmete vahelisest suhtluskiirusest.
31. rida:
Ülemseade on algselt ülem saatmisrežiimis saates stardi biti ning sellele järgnevalt seitsme biti pikkuse aadressi alamseadmest millega ta soovib suhelda. Seejärel järgneb üksik bitt, mis annab teada, kas ülemseade soovib alamseadmele kirjutada(0) või sellelt lugeda(1).
Kui vastava aadressiga alamseadeldis on siinil olemas, siis ta vastab ACK bitiga (active low for acknowledged ehk aktiivne madal tunnistamisest) selle aadressi kohta. Seejärel jätkab ülemseade kas saatmis- või vastuvõtmisrežiimis (olenevalt varem saadetud lugemis/kirjutamis bitist) ning seejärel jätkab alam ülemale vastavas režiimis.
Aadressi ja info baidid saadetakse kõige kõrgem bit esimesena. Algusbitti näitab SDA kõrgest olekust madalale üleminek samal ajal kui SCL on kõrge ning stop bitti näitab SDA madalast olekust kõrgele üleminek samal ajal kui SCL on kõrge.
Kui ülemseade soovib kirjutada siis saadetakse alamale korduvalt bait ning samal ajal saadab alam vastu ACK biti.
Kui ülem soovib baiti lugeda, siis saadab alam seda korduvalt ning ülem vastab ACK bitiga peale igat baiti välja arvatud viimase korral.
Seejärel lõpetab ülemseadeldis ülekande stop bitiga või võib ka saata uue START biti, kui ta soovib siini endale hoida ning uut ülekannet alustada.
46. rida:
*Ühekordne infovahetus kus ülem kirjutab infot alamale.
*Ühekordne infovahetus kus ülem loeb infot alamalt.
*Kombineeritud infovahetus kus ülem korraldab vähemalt kaks lugemist ja/või kirjutamist ühele või rohkemale alamale.
Kui tegemist on kombineeritud infovahetusega, siis iga kirjutamine hakkab stardi ning alama aadressi saatmisega. Peale esmast starti ei tule stop bitt vaid järgneb uus start bit. Selle käitumise tõttu teavad alam-seadmed et järgmine info saatmine/vastuvõtmine on eelnevaga samasse paketti kuuluv.
56. rida:
Riistvara tasemel on nii SCL (Serial Clock line) kui SDA (Serial Data line) avatud kollektori disainiga, seega on tarvis pull-up takisteid. Liini madalaks tõmbamine tähendab loogilist nulli ning seda seadmete poolt hõljuma jättes on tulemus loogiline üks. See võte on kasutusel kui kanali ligipääsumeetod. Suure andmevahetus kiirusega süsteemid lisavad ka vooluallika mis toetab kiiremat pinge tõusu ning suuremat siini mahtuvust.
Üks tähtis tagajärg tulenevalt avatud kollektorist on see, et ühte liini võivad korraga juhtida mitu sõlme. Kui mingi sõlm on liini madalaks tõmmanud, siis see on madal, ja kõik sõlmed, mis üritavad liini kasutada, saavad sellest teada. Seega nad teavad, et mõni muu sõlm on parasjagu aktiivne.
Kui seda kasutatakse SCL-i peal ,siis on tegemist "takti venitamisega", ning sedasi saavad alamseadmed kiirust kontrollida. Kui sama meetodit kasutatakse SDA peal, siis on tegemist läbirääkimisega tagamaks olukorda, kus on ainult üks aktiivne infovahetus korraga.
64. rida:
Välja arvatud start ja stopp signaalide korral, muutub SDA ainult siis, kui takt on madal. Info biti saatmine koosneb takti saatmisest hoides samal ajal info liini soovitud tasemel.
Kuni SCL on madal, saatja (esialgselt ülem) esitab SDA soovitud väärtuse ja (pärast väikest viivitust, et muutus kindlustuks) võimaldab SCL kõrgeks muutuda. Seejärel ootab ülemseade et SCL muutuks kõrgeks.
Kui SCL on kõrgeks tõusnud, ootab ülemseade miinimumaja (4μs standard kiirusega I²C korral) selleks, et kindlustada alamseadme biti nägemine millejärel tõmmatakse liin uuesti madalaks. See lõpetab ühe biti ülekande.
70. rida:
Pärast kaheksat samas suunas liikunud info bitti saadetakse vastaspoolele "teavitus bitt". Saatja ja vastuvõtja vahetavad rollid ühe biti ajaks ning eelnevalt vastuvõtjana olnud seade saadab tagasi üksiku 0 biti (ACK). Kui saatja näeb 0 biti asemel bitti 1 (NACK) saab ta teada midagi järgnevatest:
* (Kui ülem seade saatis infot alamale) Alamseade ei ole võimeline infot vastu võtma, ei ole sellist alamat, käsk tundmatu või ei saa rohkem infot vastu võtta.
* (kui alam saatis infot ülemale) Ülemseade soovib selle baidi järel info saatmist lõpetada.
Pärast teavitusbitti võib ülemseade teha ühte järgmistest asjadest:
# Ettevalmistus uue baidi saatmiseks: saatja seab SDA ja ülem pulseerib SCL-i kõrgeks.
82. rida:
Üks I²C protokolli tähtsamatest omadustest on taktivenitamine. See tähendab, et adresseeritud alamseadeldis võib pärast biti saatmist või saamist SCL liini all hoida. Sedasi annab ta märku, et ei ole veel valmis rohkem infot töötlema. Ülemseade mis alamaga suhtleb ei või käesoleva biti vahetamist lõpetada ning peab alati ootama kuni taktiliin läheb üles. Kui alamseadeldis teeb taktivenitamist siis jääb avatud kollektori tõttu liin madalaks. Sama on tõsi ka siis kui teine, aeglasem ülemseade üritab takti samal ajal anda. (Kui tegemist on rohkem kui ühe ülemseadmega siis tavaliselt kaotavad kõik ülemseadmed peale ühe "läbirääkimised".)
Ülemseade peab alati ootama kuni taktisiin läheb kõrgeks ning ootama lisaks miinimumaja enne kui ta takti uuesti madalaks tõmbab.
Kuigi ka ülemseadeldis võib SCL-i nii kaua madalal hoida kui ta soovib läheb "Taktivenitusena" kirja tavaliselt vaid olukord kus seda teeb alamseadeldis. Teoorias võib iga taktipulssi venitada, kuid üldiselt tehakse seda enne või pärast ACK/NACK bitti. Näiteks kui alamseadeldis on mikrokontroller, siis selle I²C liides venitab takti pärast iga baiti, kuni tarkvara otsustab, kas saata ACK- või NACK-bitt.
90. rida:
=== Läbirääkimised SDA kasutamisega ===
Iga ülemseadeldis jälgib siini start ja stop bitte ega alusta kunagi oma andmevahetust seni, kuni teine ülemseadeldis siini töös hoiab. On aga võimalus, et kaks ülemseadeldist alustavad ülekannet samal ajal. Sel juhul toimuvad läbirääkimised. Alamseadmete infovahetust saab ka läbi rääkida juhul, kui ülemseadeldis adresseerib mitut alamat korraga, kuid see pole kuigi tavaline. Erinevalt näiteks [[
Kui üks saatjatest seab SDA liini ühe peale
Kui kaks ülemseadeldist saadavad sõnumit kahele erinevale alamale, siis see, kelle alama aadress on madalam saab alati aadressi tasemel õiguse. Kuna kaks ülemseadeldist võivad sõnumi saata ka samadele alam-aadressidele ning üks aadress vihjab vahepeal mitmele alamale peab läbirääkimisvõimalus alles jääma ka info ülekandmise ajal.
Iseenesest toimub läbirääkimine üpris harva, kuid on tarvis korralikuks mitme ülemaga suhtluseks. Samamoodi nagu taktivenitamisega, ei toeta seda kõik seadmeid. Seadmeid, mis toetavad mitme ülemseadme suhtlust, nimetatakse mitme ülemseadme toega ("multi-master") seadmeteks.
102. rida:
=== Puhvedamine ja multipleksimine ===
Kui ühe siini küljes on palju I²C seadmeid, võib tekkida vajadus lisada puhvreid või multipleksereid, et suuri siini osasid väiksemateks segmentideks jagada. See võib olla vajalik nii mahtuvuse vähendamiseks kui ka mitme sama aadressiga seadme lisamiseks siinile. On palju [[mux|multipleksereid]] ja [[Puhvermälu|puhvreid]], kuid need kõik peavad arvestama fakti, et I²C siin on kahesuunaline. Multipleksereid võib lisada ka [[analoogseade|analooglülititega]], mille abil saab ühe osa teisega siduda. Analooglülitid säilitavad siini kahesuunalisuse, kuid ei isoleeri osade mahtuvust teineteisest ega paku ka puhvri võimalusi.
Kahe suunalise suhtluse liinid nagu I²C vajavad erilisi puhvreid, et takistada "[[lach-up|latch-up'i]]". Selleks on mitmeid võimalusi: I²C on avatud kollektoriga seega puhver peab madala poole madalaks tõmbama ka siis, kui see on teisel pool madal. Üks meetod "latch-up'i" ära hoidmiseks on valida puhver, mille sisend- ja väljundtasemed on üles ehitatud nii, et väljundi tase oleks draiveril kõrgem kui sisendi lävi. See takistab puhvril ise enda väljundi muutuse peale väljundi muutuse. Näiteks võib puhvri sisendi lävi olla 0,4 V, et madalat tuvastada, kuid väljundi tase on 0,5 V. Sellise meetodi kasutamine nõuab seda, et kõik teised seadmed teisel pool puhvrit oleks sobivad väljundtasemega. Lisaks tähendab eespool nimetatu, et mitut puhvrit ei saa järjestikku üksteise otsa panna.
Teise võimalusena on olemas puhvrid, mis töötavad kui vooluvõimendid või peavad meeles oma eelmise asendi, et "latch-up-i" ära hoida.
113. rida:
*Konfiguratsiooni informatsiooni lugemine [[SPD EEPROM]]ist, [[DDR SDRAM]]-ist, [[DDR2 SDRAM]] mälupulkadelt ([[DIMM]]) ja muudest korraga siini *ühendatavatest seadmetest.
*[[NVRAM]] kiipide, mis hoiavad kasutaja seadeid, ligipääs.
*Madala kiirusega [[
*Kuvari kontrastsuse, värvigamma ja värvitasakaalu seadete muutmine.
*Helitugevuse muutmine intelligentsetel kõlaritel.
|