You are on page 1of 9

Serijski interfejs sa 2 ice

1. Osobine -

Jednostavan i fleksibilan komunikacijski interfejs gdje su potrebne samo dvije ice Master i Slave modovi rada Moe raditi kao Predajnik ili Prijemnik 7-bitna adresni prostor omoguava do 128 razliitih Slave adresa Podrana multi-master arbitracija Brzina prenosa podataka do 400 kHz Potpuno programibilan Slave sa podrkom za Generalni poziv Prepoznavanje adrese uzrokuje buenje kada je AVR u modu spavanja Kompatibilan sa Philips I2C protokolom

2. Definicija serijskog interfejsa sa 2 ice Serijski interfejs sa 2 ice (TWI) je prikladan za tipine aplikacije na mikrokontroleru. TWI protokol omoguava dizajneru sistema da povee do 128 razliitih ureaja koristei samo dvije linije sabirnice, jednu za sat (SCL) i jednu za podatke (SDA). Svi ureaji spojeni na sabirnicu imaju individualne adrese.

Slika 1. TWI sabirnica

2.1 TWI terminologija

Najee se koriste sljedee definicije: Master Ureaj inicijalizira i prekida prenos. Master takoe generie SCL clock. Slave - Ureaj adresiran od strane Master-a. Predajnik Ureaj koji smjeta podatke na sabirnicu. Prijemnik Ureaj koji ita podatke sa sabirnice.

2.2 Meusobno povezivanje Kao sto je prikazana na slici 1, obje linije sabirnice su spojene na pozitivan napon napajanja preko pull-up otpornika. Nizak nivo na TWI sabirnici se generie kada jedan ili ie TWI ureaja generiu nulu na izlazu. Visok nivo ne izlazu je u sluaju kada svi TWI ureaji generiu jedinicu na izlazu. Broj ureaja koji mogu biti spojeni na sabirnicu je ogranien sa kapacitetom sabirnice od 400pF i 7-bitnim adresnim prostorom.

3. Podatkovni prenos i format okvira 3.1 Prenos bita Svaki preneseni bit na TWI sabirnicu je u pratnji sa taktom na clock liniji. Nivo na podatkovnoj liniji mora biti stalan kada je clock u jedinici. Izuzetak je prilikom generisanja start i stop stanja.

Slika 2. Ispravni podaci

3.2 START i STOP stanja

Master inicijalizira i prekida prenos podataka. Prenos je inicijaliziran slanjem stanja START na sabirnicu, i prekida slanjem stanja STOP. Imeu START i STOP stanja,

sabirnica se razmatra kao zauzeta, i niti jedan drugi master nee pokuati da je zauzme. Spacijalan sluaj se javlja kada se poalje novo stanje START izmeu START i STOP stanja. To je oznaeno kao PONOVLJENI START, i alje se kada Master eli da inicira novi prenos bez naputanja upravljanja sabirnicom. Nakon PONOVLJENOG START-a, sabirnica se razmatra kao zauzeta do sljedeeg stanja STOP. To je identino ponaanju stanja START, i prema tome se stanje START koristi da opie oba stanja START i PONOVLJENI START. Kao to je prikazano na slici 3, stanja START i STOP se signaliziraju promjenom nivoa SDA linije kada je SCL linija u nivou logike jedinice.

Slika 3. Stanja START, PONOVLJNENI START i STOP

3.3 Format adresnog paketa Svi adresni paketi preneseni na TWI sabirnicu su duine 9 bita, pri emu se sastoje od 7 bita adrese, jednog READ/WRITE kontrolnog bita i jednog bita potvrde. Ako je READ/WRITE bit postavljen u jedinicu, izvrava se operacija itanja, u suprotnom se izvrava operacija pisanja. Kada Slave prepozna da je adresiran, potvruje postavljanjem SDA linije u nulu u devetom SCL ciklusu (ACK). Ako je adresirani Slave zauzet, ili iz nekog drugog razloga ne moe odgovoriti na zahtjev Master-a, SDA linija e ostati u jedinici u ACK ciklusu. Master tada alje stanje STOP, ili stanje PONOVLJENI START da inicira novi prenos. Adresni paket koji se sastoji od adrese slave-a i READ ili WRITE bita se zove SLA+R ili SLA+W, respektivno. Prvo se prenosi vie znaajni bit adrese (MSB). Slave adrese se mogu proizvoljno dodjeljivati, ali adresa 0000 000 je rezervisana za generalni poziv. Kada se izda kgeneralni poziv, svi Slave-ovi odgovaraju stavljanjem SDA linije u nulu u ACK krugu. Generalni poziv se koristi kada Master eli da prenese iste poruke do nekoliko Slave-a u sistemu. Kada se adresira generalni poziv zajedno sa WRITE bit-om, svi Slaveovi su podeeni da potvrde generalni poziv sa SDA linijom u nuli u ACK krugu. Sljedei podatkovni paket e tada biti primljen od slave-a koji je potvrdio generalni poziv. Vano je zabiljeiti da je slanje generalnog poziva zajedno sa READ bitom beznaajno, poto moe uzrokovati sukob ako nekoliko slave-a pone prenositi razliite podatke.

Slika 4. Format adrese paketa

3.4 Format podatkovnog paketa Svi podatkovni paketi preneseni na TWI sabirnicu su duine 9 bita, pri emu se sastoje od jednog bajta podataka i jednog bita potvrde. Tokom podatkovnog prenosa, Master generie clock i START i STOP stanja, dok je prijemnik odgovoran za potvrdu prijema. Povrda (ACK) se signalizira od strane prijemnika stavljanjem SDA linije u nulu tokom devetog SCL kruga. Ako prijemnik ostavi SDA liniju u jedinici, signalizira se NACK (nepotvren prenos). Kada prijemnik primi posljednji bajt, ili iz nekog razloga ne moe primiti vie bajta, obavjetava prenosnika slanjem NACK komande nakon posljednjeg bajta. Prvo se prenosi vie znaajan bit podatka.

Slika 5. Format podatkovnog paketa

3.5 Kombinovanje adresnog i podatkovnog paketa i prenosu Prenos se u osnovi sastoji od stanja START, SLA+R/W , jednog ili vie podatkovnih paketa i stanja STOP. Prazna poruka, koja se sastoji od komande START i STOP je nedoputena. Slave moe produiti SCL niski period stavljanjem SCL .linije u nulu. To je korisno ako je podeena brzina Mastera prevelika za Slave, ili je Slave-u potrebno dodatnog vremena za procesiranje izmeu prenosa podataka. Slave proireni SCL niski period nee

uticati na SCL visoki period, koji odreuje Master. Slave moe smanjiti brzinu prenosa podataka na TWI sabirnici produavanjem SCL radnog ciklusa. Slika 6 pokazuje tipini podatkovni prenos. Vane je zabiljeiti da se moe prenijeti nekoliko bajta izmeu SLA+R/W i STOP stanja, zavisno od protokola implementiranog na aplikaciji.

Slika 6. Tipini podatkovni prenos

4. Kontrolna jedinica
AVR TWI modul moe raditi u Master i Slave modu. Mod rada je podijeljen prema status kodu u TWI Status Registru (TWSR) i prema koritenim bitima u TWI Kontrol Registru (TWCR). Set predefiniranih status kodova pokriva razliita stanja u kojima moe biti TWI. Status kodovi su podijeljni u Master i Slave kodove i kasnije u predajen i prijemne odgovarajue kodove. Takoe postoje kodovi za stanje greke i neaktivno stanje. TWI modul radi kao maina konanog stanja upravljanja dogaajem: ako je START uslov praen sa TWI adresom koja odgovara adresi u Slave-u TWI adresnog registra (TWAR), TWI zastavica se postavlja, rezultujui u izvravanju odgovarajueg prekida (ako je globalni prekid omoguen i TWI prekidi su omogueni). Otkad se TWINT zastavica postavi, SCL linija se zadri u niskom stanju. To omoguava softverskoj aplikaciji da zavri svoj task prije dozvoljenja TWI prenosu da nastavi. TWI zastavica se postavlja u sljedei situacijama: Nakon to TWI zavri slanje START/PONOVLJENI START Nakon to TWI zavri slanje SLA+R/W Nakon to TWI zavri slanje adresnog bajta Nakon to TWI izgubi arbitraciju Nakon to TWI primi podatkovni bajt Nakon prijema STOP ili PONOVLJENI START dok je jo uvijek adresiran kao Slave

5. Generisanje brzine prenosa

Jedinica za generisanje brzine prenosa kontrolie period SCL kada radi u Master modu. SCL period je kontrolisan postavkama u TWI Bit Rate registru (TWBR) i preskaler bit u TWI status registru. Rad Slave-a ne zavisi od brzine prenosa ili postavkama preskalera, ali CPU frekvencija u Slave-u mora biti najmanje 16 puta vea nego SCL frekvencija. SCL frekvencija se generie prema sljedeoj jednakosti.

TWBR = vrijednost TWI Bit Rate registra TWPS = vrijednost preskalara u TWI status registru Tabela 1 prikazuje izbor preraunatih vrijednosti TWBR baziranih na CPU i SCL frekvencijama.
Tabela 1. Vrijednost registra brzine prenosa

Slika 7 prikazuje kako spojiti TWI jedinice na TWI sabirnicu. Vrijednost Rp zavisi od Vcc i kapaciteta sabirnice (tipino 4.7k).

Slika 7. TWI spajanje

Primjer koritenja TWI Master modula

#include <avr/io.h> #include <compat/twi.h>

int main(void) { unsigned char tmp = 0xAA; DDRB = 0xFF; PORTB = 0xFF;

DDRC = 0x00;

sei();

while(1) { TWSR = 0x00; //preskaler 1

// SCL frekv = 8000000 / (16 + 2 * 32 * 1) = 100 kHz TWBR = 0x20; //decimalno 32

TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWEA);

TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN); while(!(TWCR & (1<<TWINT))); if((TWSR & 0xF8) != 0x08) { return 0; } PORTB &= ~(1<<PB0);

//salje 0xa0 = 1010 000 0 // 4 bita - identifikator uredjaja (a) // 3 bita - adresa uredjaja // 1 bit - 0 write TWDR = 0xa0; //TWDR = 0xFE; TWCR = (1<<TWINT) | (1<<TWEN);

Primjer koritenja TWI Slave modula

#include <avr/io.h> #include <compat/twi.h>

int main(void) { DDRB = 0xFF; PORTB = 0xFF; DDRD = 0xFF; PORTD = 0x00; DDRC = 0x00;

sei();

while(1) { unsigned char tmp=0x00;

TWAR = 0xa1;

//pocinje citanje podataka TWCR |= (1<<TWINT) | (1<<TWEN) | (1<<TWEA);

while (!(TWCR & (1<<TWINT))); PORTB &= ~(1<<PB0);

switch (TWSR & 0xF8) { case 0x60: PORTB &= ~(1<<PB1); break;

You might also like