I2C bus dataoverføring

Startkommando Addresering Dataoverføring Repetert startkommando Stoppkommando Andre alternativer Printerport til I²C 8bit IOkort med PCF8574

Generelt:

I²C, IIC eller Inter-IC-bus som bokstavene står for er en en form for serieoverføring som ble utviklet for å overføre små datamengder i TVapparater og annen elektronikk. Overføring skjer ved hjelp av bare 2 tråder fra en mikroprossesor til de forskjellige komponeneter i apparatet i stedet for kanskje 20-30 tråder ved parallell overføring. Vanligvis er det en prossesor som er master og styrer alt, men en kan også bruke en spesiell kontrollekrets tilkoblet prossesoren.

I²C bussen er aktiv når signalinjene er på lavt nivå. Det er motstander til + strøm som holder signalet høyt i hvilestilling. Alle kretsene kan trekke ned signalinjene til lav hvis de skal sende lav mens de er åpen hvis de skal sende høy. Dette gjør at det trengs bare en felles datalinje uansett hvilken vei data skal sendes.

Den ene tråden, SCL (serieklokke), brukes til klokkesignal som sendes ut fra masteren og som har til oppgave å fortelle når gyldige data kan leses. Mens klokkelinjen er høy er det gyldige og stabile data på seriedatalinjen SDA. Mens klokken er lav kan den enheten som skal sende skifte nivå til neste data.

I²C krever ingen fast klokkefrekvens og kan være fra 0 til maks 100 kiloHertz. Overføringen er sammensatt av blokker på 8 bit med kvittering mellom hver blokk. Alle kretser har sin egen adresse på 7 bit og 1 bit som forteller om kretsen skal motta eller sende data. Adressen sendes først og den riktige kretsen kvitterer før den mottar eller sender data. Etter hver blokk på 8 bit kvitterer den som mottar data.

Selv om I²C er beregnet for å kommunisere over korte avstander går det i praksis greit over ganske mange meter hvis det er lav klokkefrekvens, selv har jeg kjørt 50 meter uten problem. Det er også enkelt å skrive et program selv som driver bussen uten at en trenger å bruke egen master-kontroller. Ved hjelp av noen motstander og dioder kan en bruke parallellporten på en PC som master. Med tanke på at en kan være uheldig er det en fordel å bruke en parallellport som er på en egen slot i maskinen, f.eks et gammelt multi-IO kort.


Startkommando:

Start er en unik kombinasjon av data og klokke som kun forekommer for å starte en kommunikasjon. I hvilestilling ligger både data og klokke høy, ved start går først datalinjen lav og deretter klokkelinjen. Denne kombinasjonen forekommer aldri ved annen kommunikasjon, da endres datalinjen mens klokkelinjen er lav og dataene leses men klokkepulsen er høy.
Toppen


Adressering:

Alle I²C kretser har sin egen adresse, de aller fleste har en 7 bit adresse , A6 til A0, som det bildet viser og det finnes noen kretser med lengre adresser. Masteren legger ut adressebittene med det høyeste bit (MSB) først.

Når datalinjen er satt enten høy (1) eller lav (0) går klokkelinjen høy og kretsene leser inn adressebittet og venter på neste. Klokkelinjen går lav igjen og mens den er lav legges neste adressebit ut og ny høy klokkepuls overfører adressebittet. På bildet sendes adressen 0100 001.

Når alle adressebit er overført settes datalinjen enten høy for å gi beskjed om at slaven skal sende data eller lav for å gi beskjed om at det skal skrives data til slaven, Read/Write. Klokkelinjen gir igjen en høy puls. Siden bildet viser skriving er dette bittet 0.

Så setter masteren datalinjen høy mens den kretsen som er adressert svarer med å sette datalinjen lav. Når så klokkelinjen går høy leser masteren datalinjen og hvis den er lav har datamaskinen fått beskjed om at slaven finnes og er klar til å overføre data.

Adressen som er sendt her er 0100 001, Siden alle dataoverføringer går i ord på 8 bit (= 1 byte) er det mest praktisk å regne R/W som det 8. bit. Da får denne kretsen 0100 0010 som adresse for skriving og 0100 0011 for lesing. Som hexakode blir adressene 42 og 43.
Toppen


Dataoverføring:

Etter at adressering og svar er ferdig begynner selve datoverføringen. Den sende enten som et 8 bit dataord eller i flere grupper med dataord. Det høyeste bittet legges ut på datalinjen mens klokkelinjen er lav og klokkelinjen går høy for å overføre dataene på samme måte som ved adressering.

Mellom hver 8 bit ord, D7 til D0, svarer den som leser ved å legge datalinjen lav som en bekreftelse på at data er mottatt. Bildet viser 0111 0101, hexa 75, som sendes og slaven som svarer for mottatt. Hvis det er en slave som skal sende data til masteren er det masteren som må svare ved å legge datalinjen lav, det skal alltid være svar mellom hvert ord.
Toppen


Repetert startkommando:

Hvis masteren skal sende til andre adresser er det ikke nødvendig å sende stoppkommando for hver gang. Da sender den ny startkommando, neste adresse og dataoverføring.
Toppen


Stoppkommando:

Når alle data som skal overføres er ferdig sender masteren ut en stoppkommando som også er unik og aldri forekommer ved normal dataoverføring. Da settes først klokkelinjen høy og deretter settes datalinjen høy. Dette gir beskjed til eventuelle andre mastere om at linjene er ledig.
Toppen


Andre alternativer:

I²C er en multibus hvor det kan være flere mastere, det er også fullt mulig å kommunisere mellom de forskjellige masterene.

Siden datamaskinen ofte har andre ting å gjøre enn å skjekke I²C bussen hele tiden kan en sende et startbyte etter startkommandoen, det består av 7 lave databit og R/W høy og en tomt svar (høy). Da kan datamaskinen skjekke I²C bussen med lengre mellomrom uten å risikere å miste deler av en overføring.

Hvis en bruker masterkontrolleren PCD-8584 direkte mot en prossesor vil denne generere en interupt og startbyte er unødvendig, men ved PC og printerport kan det være nødvendig.
Toppen


Printerport til I²C:

Å bruke printerporten på en PC til å styre I²C kretser krever ikke så mange deler. Numrene til venstre på skjemaet er pinnenumrene i den 25pins Dsub kontakten som kobles til printerporten på maskinen. Med litt fingerferdighet er det plass til alle delene i Dsubkontakten.

De 8 nederste diodene er bare nødvendig hvis det er maskinen som skal levere strømmen til data og klokkelinjene. Printerporten kan ikke levere nok strøm til at den brukes som strømforsyning, men det kan allikevel være en fordel ha med diodene hvis en skal teste kort som ikke har motstander til +5Volt. Setter en på en stropping eller bryter, S1, er det enkelt å velge.

 


8 Bit IOkort med PCF-8574:

 

 

Philips Semiconductors - I2C-bus
Philips Semiconductors - I2C-bus; Products and systems

 

Fargekode_motstander Fargekode_kondensatorer Fargekode_spoler Fargekode_parkabler Fargekode_svakstrømskabler Koblinger_8p.Modulær
Elektrosiden Hovedsiden