L' indirizzamento sul bus I2C
I dispositivi sul bus I2C sono selezionati attraverso indirizzi, inviati sul
bus stesso.
L' indirizzo è il primo elemento della trasmissione che il Master pone dopo
aver preso il controllo del bus con una condizione di Start.
Sono possibili:
-
indirizzi a 7 bit, per cui basta l'emissione di un byte per
definire l' indirizzo;
-
indirizzi a 10 bit, dove occorre l' emissione di due bytes per
completare l' indirizzo
Inoltre sono previsti alcuni indirizzi riservati a funzioni particolari, tra
cui quello di General Call, che il modulo MSSP supporta.
SSPADD in modo Slave
SSPADD in modalità Master serve alla programmazione del Baud
Rate Generator, dato che il clock sul bus è prodotto dal Master.
In modo Slave, esso assume il ruolo che gli da il nome (SSP
ADDress), ovvero conterrà l'indirizzo a cui risponderà il
microcontroller.
Nel caso di Slave con indirizzo a 7 bit, SSPADD dovrà essere
scritto con il valore esadecimale dell' indirizzo a cui lo Slave dovrà
rispondere.
Il meccanismo è semplice: il modulo MSSP, ricevuto dal Master
il primo byte dopo lo Start, comparerà questo byte con il valore
contenuto in SSPADD: se saranno identici, lo Slave entrerà in
colloquio sul bus.
Va fatta attenzione che conterrà il registro potrà essere scritto a
questo scopo nei bit 7:1, lasciando a zero il bit 0. Se l' indirizzo
assegnato allo Slave è, ad esempio, 0x26, (binario 0010 0110) occorrerà
scrivere in SSPADD il numero 01001100, ovvero 0x4C:
SSPADD |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
contenuto |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
Questo si ottiene semplicemente prendendo il numero dell' indirizzo
voluto shiftandolo a sinistra di una posizione.
Va ricordato che il Master, trasmettendo l' indirizzo allo Slave,
scriverà nel bit 0 un valore pari a 1 per richiedere una la lettura e a 0 per
una scrittura.
Più complicata è la sequenza nel caso di indirizzamento a 10 bit.
Questo caso è trattato più avanti
nella descrizione del funzionamento dell' MSSP in modo Slave.
General Call
La procedura di indirizzamento per il bus I2C prevede che il primo byte
dopo la condizione di avvio solitamente sia quello che determina quale sarà
il dispositivo Slave indirizzato dal Master.
Esistono però l'eccezione dell' indirizzo di General Call (chiamata
generale) che si rivolge a tutti i dispositivi sul bus contemporaneamente. Quando questo indirizzo è
utilizzato, tutti i dispositivi dovrebbero, in teoria, rispondere con un
ACK.
L'indirizzo di chiamata generale è uno degli otto indirizzi riservati per scopi specifici
dal protocollo I2C.
E' costituito da tutti i bit a 0 con R/W = 0.
L'indirizzo di chiamata generale è riconosciuto dal modulo MSSP quando il
bit relativo GCEN SSPCON2 <7> è stato programmato a 1. Questo vuol dire
che il microcontroller potrà essere programmato dall' utente sia per
rispondere alla general call sia per ignorarla (GCEN=0).
A seguito di una condizione di Start, il primo byte in linea è shiftato
in SSPSR e confrontato con SSPADD; se GCEN=1 il confronto avviene anche con l'
indirizzo di General Call.
Se l'indirizzo di chiamata generale chiamata è riconosciuto, SSPSR è copiato
in SSPBUF, il bit di flag BF è posto a 1 e, sul fronte di d iscesa del nono
impulso del clock, il flag SSPIF va a 1.
La sorgente dell'interrupt può essere verificata leggendo il contenuto di SSPBUF. Il valore può essere utilizzato per determinare se l'indirizzo è
quello dello specifico dispositivo o un indirizzo di chiamata generale.
In modo di indirizzamento a 10 bit, SSPADD deve essere aggiornato con la
seconda metà dell' indirizzo e
questo viene segnalato dal bit UA (SSPSTAT <1>)
che va a 1.
Se l'indirizzo è chiamata generale, con il bit GCEN=1, la seconda metà dell'indirizzo non è
necessaria, il bit UA non
andrà a 1 e lo Slave inizierà a ricevere i dati dopo l' ACK.
Nel modulo MSSP non ci sono
altri supporti specifici per i rimanenti indirizzi speciali.
|