I2C kommunikáció működése

Forrás: Topor Zoltán cikke a hobbielektronika weboldalon https://www.hobbielektronika.hu/cikkek/kommunikacio_alapjai_-_soros_adatatvitel.html?pg=5

Az II2C vagy IIC kétvezetékes szinkron adatátviteli rendszer, melyet a Philips cég dolgozott ki, integrált áramkörök összekapcsolására. Két jelvezetékkel működik: SCL (órajel) és SDA (adat).

Alapvetően egy Master és egy vagy több Slave kommunikál egymással, de a rendszerben több Master is lehet, ezzel a működéssel most nem foglalkozunk. Mindig a Master küldi az órajelet az SCL vonalra. Az órajel szabványos sebessége 400 KHz, de lehet magasabb órajelet is alkalmazni. Az Arduino Uno 1 MHz körüli frekvencia alkalmazására képes. Az SDA és az SCL vonalakon is található egy-egy felhúzó ellenállás. Az az eszköz, amelyik éppen adatokat ad, lehúzza a jelvezetéket 0V-ra. Ezt a 0V feszültséget minden vonalra kötött eszköz érzékeli, de csak az foglalkozik vele, akinek az adattovábbítás szól (akit a Master megcímzett, de ez maga a Master is lehet ha adtot kér). Az alábbi ábrán egy konkrét áramköri megoldás látható a jelszintek kezelésére. Nem fontos megérteni az áramkör működését, de gondoltam így tudományosabb lehetek.

Az adatátvitelt a Master kezdeményezi, Start jelzéssel, ami az SDA vonal megadott ideig tartó 0V-ra történő lehúzása. Ekkor minden Slave figyelni kezd. A mester ekkor megad egy 7 bites eszköz címet, majd egy bittel azt is jelzi, hogy írni akar a Slave felé vagy olvasni akar adatot a Slave-től. A Slave ACK (Acknowledge) jellel visszaigazolja a vételt és ezután következik az írási vagy olvasási ciklus. Az adattranszfer végét a Master Stop-al jelzi. Egy teljes adattranszfer követhető az alábbi ábrán. A rendszer eredetileg 7 bites címekkel működik, az újabb igényeknek megfelelően később bővítették ki 10 bites címekre.

Látható az ábrából, hogy egyszerre több byte adat is átvihető egymás után. Ez jelentősen gyorsítja az átvitelt, hiszen nem kell minden egyes byte átvitele előtt a Master-nak megcímezni a Slave-t, akinek küldeni akar, vagy akitől fogadni szeretne. Természetesen a Master-nek tudnia kell, hogy hány byte-ot akar fogadni a Slave-tól. Ha a Master ad adatot a Slave-nak, akkor a Slave addig veszi az adatokat, amíg Stop jelzést nem kap.

Egy kitüntetett címérték az általános hívási cím; ha ezt küldi ki a Master, üzenete minden Slave-nek szól. Ha a Slave küld adatot (Master olvasás), akkor az adat után a Master adja ki a nyugtázó impulzust (ACK), amit a Slave érzékel.

Azon szerencsések közé tartozol, akik már tudják, hogyan működik az I2C busz. Ha szeretnél egy ennél sokkal gyorsabb adatátviteli módszert is megismerni, akkor kattints ide!

Ha szeretnél példát látni arra, hogyan használhatod az I2C kommunikációt Arduino programban, akkor kattints ide! Itt a busz sebességének beállítására is találsz információt.

Ha arra is kíváncsi vagy, hogyan tud egymással kommunikálni kér Arduino UNO vagy Arduino nano, akkor azt itt ismerheted meg!

Mennyire volt hasznos amit olvastál?

Kattints egy csillagra az értékeléshez!

Sajnálom, hogy amit olvastál nem volt hasznos számodra!

Szeretném ha elégedett lennél!

Írd le kérlek, hogy mi nem tetszett!?