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:

|