Ho tradotto parte del datasheet del 328, riguardante proprio twi guarda caso.
Leggete, se trovate errori postate la traduzione corretta e per chi se la sente traduca anche il resto.
Traduzione non fedele di parte del datasheet ATmega328 (parte 1).
{
L'interfaccia seriale 2-wire (TWI) è la soluzione ideale per le tipiche applicazioni con i microcontrollori
Il protocollo permette al proggettista di sistemi di interconnettore fino a 128 differenti dispositivi
usando solo due line bidirezionali, una per il clock(SCL) e una per i dati (SDA). Il solo hardware esterno
necessario per realizzare il bus è un singolo resistore di pull-up per ogni linea del bus TWI.
Tutti i dispositivi connessi al bus hanno un'indirizzo individuale e i meccanismi per risolvere
la comunicazione sono previsti dal protocollo TWI.
Figura 21-1 TWI Bus interconnection (pag 215)
La terminologia TWI:
- Master Il dispositivo che inizia e termina la trasmissione e genera anche il clock SCL.
- Slave Il dispositivo indirizzato dal master
- Trasmitter Il dispositivo che pone i dati sul bus
- Receiver Il dispositivo che legge i dati dal bus
Entrambe le linee del bus sono connesse al positivo dell'alimentazione attraverso
un resistore di pull-up. Le porte del bus di tutti i dispositivi compatibili con il bus TWI
sono open-drain o open-collector. Un livello LOW su una linea del bus è generato quando uno
o più dispositivi forniscono in uscita uno zero. Un livello HIGH è presente solo quando
tutti i dispositivi connessi al bus si pongono in alta impedenza, permettendo ai resistori
di pull-up di portare il livello della linea HIGH. Nota che tutti i dispositivi AVR connessi
al bus TWI devono essere alimentati con ordine per permettere alcune operazioni.
Il numero di dispositivi che possono essere connessi al bus è limitato solo dalla capacità
del bus che non deve superare i 400 pF e dalla grandezza di 7-bit dell'indirizzo di slave.
Due set di specifiche sono trattate qui, una per le velocità del bus sotto i 100Khz, e
una valida per velocità del bus fino a 400Khz.
Trasferimenti di bits
Ogni bit trasferito sul bus è accompagnato da un'impulso sulla linea di clock SCL.
Il livello della linea dati SDA deve essere stabile quando la linea SCL è HIGH.
La sola eccezione a questa regola è quando si genera una condizione di start o di stop.
Fig 21-2 Data Validity (pag. 217)
Condizione START e STOP
Il master inizia e termina una trasmissione di dati. La trasmissione è iniziata quando
il master emette una condizione di START sul bus e termina quando il master emette
la condizione di STOP. Dopo una condizione di START il bus è considerato occupato
e nessun altro master dovrebbe provare a prendere il controllo del bus. Uno speciale
caso si verifica quando una nuova condizione di START viene emessa, questa è conosciuta come
condizione REPEATED START ed è usata quando il master desidera iniziare un nuovo
trasferimento senza cedere il controllo del bus. Dopo la condizione REPEATED START
il bus è considerato occupato fino a che una condizione di stopo non viene emessa.
Il comportamento è identico a START, e quindi in tutto il documento START è utilizzato
per descrivere sia START e REPEATED START, se non diversamente specificato.
Come si vede in Fig 21-3 lo START e lo STOP avvengono cambiando il livello della linea
SDA quando la linea SCL è HIGH
continua nel post seguente......
Io cercavo indicazioni circa l'interrupt su twi, cioè ogni quando la isr viene esguita e non ho trovato nulla di chiaro, ma ho sperimentato che dopo uno start la isr viene chiamata ripetutamente, non so il motivo.
Chi ne sa di più e pregato di far luce sul twi del 328.
Ciao.