Tutorials - PIC18 by Data Sheet

 
 

MSSP - I2C


 

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 discesa 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.


 

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 14/01/12.