Tutorials - PIC18 by Data Sheet

 
 

MSSP - I2C


I Registri I2C.

MSSP ha 6 registri per controllare il modo I2C.

SSPSR è lo shift register vero e proprio e non è direttamente accessibile
SSPBUF è il buffer dei dati in arrivo e partenza ed è leggibile e scrivibile
SSPSTAT è il registro di stato della comunicazione
SSPCON1 è un registro di controllo del modulo I2C
SSPCON2 è un secondo registro di controllo del modulo I2C
SSPADD è il registro di indirizzo

ai quali vanno aggiunti i registri per la gestione dell' interrupt (di tipo periferico).

In ricezione, la combinazione SSPSR e SSPBUF crea un sistema a doppio buffer. Quando il dato è completato in SSPSR esso viene copiato in SSPBUF, così da poterne ricevere uno successivo, mentre l' unità centrale elabora quello corrente. Un flag SSPIF viene settato per comunicare l' avvenuta ricezione.
Durante la trasmissione invece si tratta di un buffer semplice: scrivendo SSPBUF si scriveranno sia questo che SSPSR.  Sarà quindi necessario attendere la completa trasmissione del byte caricato nel registro di scorrimento prima di caricare il successivo.


SSPSTAT

SSPTAT (SSP STATus) è il registro di status della comunicazione, ma contiene anche elementi relativi al funzionamento come SPI. Da notare che in modo I2C alcuni bit sono in comune con il modo SPI, ma hanno funzioni differenti.

Per I2C il registro contiene:

  • flag che indicano il riconoscimento delle condizioni sul bus
  • il flag di Buffer Full
  • i bit di selezione dello slew rate e della compatibilità SMBus

 

SSPSTAT bit SMP CKE D/A P S R/W UA BF
funzione R/W R/W R R R R R R
default 0 0 0 0 0 0 0 0
  • bit 7     SMP : (Slew rate control bit di selezione dello slew rate
                1 = disabilitato per comunicazione in modo standard (100 kHz e 1 MHz)
                0 = abilitato, per la comunicazione in modo high speed (400 kHz) 
                
  • bit 6     CKE (SMBus selection)  selezione del modo
                
    1 =  abilita l' interfaccia per la compatibilità con SMBus
     
               0 =  disabilita il modo SMBus
     
  • bit 5    D/A : dato/indirizzo
                in modo Master
                non utilizzato - riservato
                in modo Slave
                1 = indica che l' ultimo bit ricevuto è un dato
                0 = indica che l' ultimo bit ricevuto è un indirizzo
                Il bit è azzerato al reset e quando viene azzerato SSPEN
     
  • bit 4    P : stop bit
                1 = indica che è stato ricevuto uno Stop
                0 = non è stato ricevuto uno Stop
                Il bit è azzerato al reset e quando viene azzerato SSPEN
     
  • bit 3    S : start bit
                1 = indica che è stato ricevuto uno Start
                0 = non è stato ricevuto uno Start
     
  • bit 2    R/W : read/write
                in modo Master
               
    1 = trasmissione di un byte in corso
                0 = trasmissione non in corso
                Un OR con i bit SEN, RSEN, PEN, RCEN o ACKEN indica che MSSP è in modo ativo

                in modo Slave
                1 = read
                0 = write
                Questo bit conserva l' informazione R/W conseguente all' ultimo check valido di
                indirizzo ed è valido solamente fino al prossimo Start, Stop o Ack
     
  • bit 1    U/A : (Update Address bit)
               Valido solo in modo Slave a 10 bit
                1 = l' utente necessita dell' aggiornamento dell' indirizzo in SSPADD
                0 = non è richiesto aggiornamento
     
  • bit 0    BF : Buffer Full
               in trasmissione
                1 = SSPBUF è pieno
                0 = SSPBUF vuoto o non completo
               in ricezione
                1 = SSPBUF è pieno (non include Stop e ACK)
                0 = SSPBUF vuoto o non completo (non include Stop e ACK)

Vediamoli in particolare.


I primi due bit più significativi, SMP e CKE servono a stabilire come il modulo MSSP controlla i pin collegati al bus, quindi sono da considerare essenzialmente in una fase di assegnazione iniziale per il setup del modulo MSSP in funzione delle caratteristiche attribuite al bus.

SMP

  • Questo bit controlla lo Slew rate , ovvero le rampe di commutazione dei segnali sul bus. Se viene lasciato a 0 (default) MSSP controllerà i segnali SCL e SDA in modo compatibile con le temporizzazioni dello standard I2C nella modalità high speed (400 kHz).
    Se viene impostato a 1, i segnali sono adeguati a SMBus, ma anche al clock di 100 kHz e 1 MHz.
    Quindi questo bit sarà programmato in funzione delle caratteristiche attribuite al bus.

CKE

  • Questo bit seleziona la compatibilità con SMBus
    Se a 0 (default) il modulo MSSP configura i pin per l' uso con lo standard I2C
    Se viene programmato a 1, abilita l' interfaccia per la compatibilità con SMBus
    Anche questo bit va programmato inizialmente
    in funzione delle caratteristiche attribuite al bus.


I successivi 6 bit (
D/A, P, S, R/W,  U/A, BF) sono veri e propri flag del modulo MSSP.
E' fondamentale rilevare che:

  • si tratta di flag a sola lettura, cioè non possono essere modificati dall' utente.
     
  • Il loro valore è stabilito automaticamente dalla logica del modulo MSSP a seconda della fase della comunicazione in corso.
     
  • Vanno a 0 a seguito dalla disabilitazione del modulo MSSP e/o dal Reset.

Alcuni sono validi solamente per un modo di funzionamento Slave o hanno significato diverso in altre configurazioni.

 

D/A

  • Questo flag è valido solo in modo Slave. In modo Master il suo valore non ha importanza.
    Indica se l' ultimo byte ricevuto e presente in SSPBUF è un indirizzo o un dato.
    Questo permette al programma di gestione della comunicazione di individuare con sicurezza la fase del protocollo in cui ci si trova in quel dato istante.
    Se il flag è a 0, in SSPBUF è contenuto un indirizzo, altrimenti si tratta di un dato.
    Viene rimesso a 0 al Reset del microcontroller oppure quando il modulo MSSP è disabilitato (SSPEN=0).


P

  • Questo flag indica l'ultima condizione che è stata rilevata era uno Stop (P = 1).
    Va a 0 automaticamente quando un altro evento diverso da Stop viene ricevuto.

S

  • Questo flag indica l'ultima condizione che è stata rilevata era uno Start (S = 1).
    Va a 0 automaticamente quando un altro evento diverso da Start viene ricevuto.

R/W

  • ha due funzioni distinte a seconda se si lavora come Master o come Slave.
     
    In modo Master, informa se è in corso un trasferimento di bit (1) oppure no (0).
    Un OR con i bit SEN, RSEN, PEN, RCEN o ACKEN indica che MSSP è in modo attivo, ovvero sta completando una operazione e non può accettare alcun comando.
     
    In modo Slave  indica il valore del bit R/W, bit 0 del primo byte inviato dal Master dopo la condizione di Start.
    Se R/W è "0", è richiesta una scrittura, se è a "1", è richiesta una lettura.
     
    Questo bit conserva l' informazione R/W conseguente all' ultimo check valido di indirizzo (ovvero se l' indirizzo dello Slave corrisponde a quello richiesto dal Master) ed è valido solamente fino alla fine della sequenza, ovvero alla prossima condizione di Start, Stop o Ack.

U/A

  • Viene utilizzato esclusivamente in modalità Slave con indirizzo a 10 bit. Il suo scopo è richiedere al programma di gestione il rinnovo del byte di indirizzo contenuto in SSPADD e indispensabiule per la comparazione a due bytes dell' indirizzo a 10 bit.
    In realtà, si ha un solo registro a 8 bit per l' indirizzo e quindi, in modo a 10 bit, occorrono due comparazioni successive, la prima con i due bit più significativi dell' indirizzo, la seconda con gli otto successivi.r
    U/A è un flag critico, nel senso che, fino a che è settati, costringe lo slave a mantenere la linea SCL a livello basso, realizzando un clock stretching che arresta la trasmissione col Master. Fino a che il flag  non viene cancellato dalla scrittura dell' indirizzo richiesto in SSPADD, il bus è bloccato.


BF

  • Indica se il registro SSPBUF è pieno (1) o vuoto (0).
    I modo ricezione, indicherà se la ricezione è stata completata. In trasmissione, indicherà se il byte scritto in SSPBUF è stato completamente shiftato sul bus.

 


SSPCON1

E' il primo dei due registri di controllo della comunicazione.
Contiene:

  • il bit di abilitazione dell' MSSP
  • i bit della selezione dei vari modi di funzionamento in I2C
  • il bit di abilitazione del clock stretching
  • i flag di identificazione dell' overflow e della collisione

 

SSPCON1 bit WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0
funzione R/W R/W R/W R/W R/W R/W R/W R/W
default 0 0 0 0 0 0 0 0
  • bit 7     WCOL : Write Collision Detect
                durante la trasmissione come Master
                1 = SSPBUF è stato sovrascritto mentre stava completando una trasmissione.
                Il flag va cancellato da software
                0 = nessuna collisione
     
  • bit 6     SSPOV : (Synchronous Serial Port OVerflow) Overflow in ricezione
               in modo SPI Slave
                
    1 =
    è stato ricevuto un byte mentre non era ancora stato scaricato il precedente
                0 =
    no overflow
  • bit 5    SSPEN : (Synchronous Serial Port Enable)
                1 = abilita la funzione e configura i pin relativi
                0 = disabilita la funzione e rilascia i pin per altri usi
                *** vedere nota successiva
  • bit 4    CKP : (ClocK release control bit) controllo del clock stretching
                in modo slave
                1 = rilascia il clock
                0 = applica il clock stretching

                in modo Master
                non ha alcuna funzione
  • bit 3:0  SSPM3:0 : Mode select
                1111 =  I2C Slave con indirizzo a 10 bit con interrupt per Start e Stop
                1110 =  I2C Slave con indirizzo a 7 bit con interrupt per Start e Stop
                1011 =  I2C Master firmware controlled
                1000 =  I2C Master
                0111 =  I2C Slave con indirizzo a 10 bit
                0110 =  I2C Slave con indirizzo a 7 bit
    Va osservato che le combinazioni al di fuori di questo elenco sono utilizzate per configurare il modulo MSSP come SPI

Il registro SSPCON1 dei PIC18F (enhanced) equivale interamente al registro SSPCON dei PIC16 (mid-range). Vediamo i vari bit in maggiore dettaglio.


SSPEN(bit 5), CKP e i quattro SSPM  (bit 3:0) sono bit di comando, usati nella configurazione iniziale del modulo MSSP.

SSPEN

  • E' la "chiave di avviamento" del modulo MSSP. Programmato a livello 1 abilita il modulo.
     
    Occorre ricordare che sarà necessario, prima di attivare il modulo:
     - selezionare la direzione dei pin SDA e SCL come ingressi
     - selezionare la modalità di funzionamento del modulo con gli SSPM3:0 .
     
    Programmando a 0 il bit SSPEN , il modulo MSSP viene disabilitato. Questo cancella le operazioni in corso, i flag attivi e rilascia per altri usi i pin SDA e SCL.

SSPM3:0

  • Attraverso questi bit si definisce il modo di funzionamento del modulo MSSP. 
    Va considerato che alcune combinazioni dei 4 bit sono riservate alla modalità di interfaccia SPI e non vanno imposte nel caso di I2C.
     
    Indica se il registro SSPBUF è pieno (1) o vuoto (0).
    I modo ricezione, indicherà se la ricezione è stata completata. In trasmissione, indicherà se il byte scritto in SSPBUF è stato completamente shiftato sul bus.


CKP

  • Questo bit è valido solamente se è selezionata una modalità Slave.
    il suo scopo è quello di effettuare il clock stretching (vedere più avanti).


I rimanenti due bit sono dei flag indicatori di particolari condizioni anomale.

WCOL

  • E' valido, con funzioni diverse, sia in modo Master che in modo Slave.
    In  modo Master questo flag va automaticamente a 1 quando si sia tentato di scrivere il registro in SSPBUF in un momento in cui questo non è possibile, ovevro non è ancora stata completata l' azione precedente (ad esempio non è stato inviato o completato lo Start oppure il bus non è libero). La scrittura in SSPBF, allora, non ha alcun effetto.
      
    In modo Slave indica che si sta cercando di scrivere in SSPBUF mentre c'è ancora un dato in trasmissione. Anche qui, la scrittura tentata non ha effetto.
      
    Questo flag va rimesso a zero da programma, una volta presa visione dell' anomalia.


SSPOV

  • E' un flag di overflow, che , andando a 1, indica che il modulo MSSP ha ricevuto un byte, ma il precedente non è ancora stato letto dal programma.
    Il byte ricevuto in SSPSR non viene trasferito in SSPBUF. In ricezione, il dato in SSPSR sarà copiato in SSPBUF quando il contenuto di questo sarà letto e il flag cancellato (doppio buffer).
    Questo flag va rimesso a 0 da programma.
     
    Va osservata la differenza tra SSPOV e BF.

SSPCON2

SSPCON2 è il secondo dei due registri di controllo della comunicazione.
Contiene essenzialmente:

  • i bit di comando/flag di avvio delle condizioni. Queste sono avviate portando il relativo bit a 1; il bit è cancellato automaticamente dall' hardware quando la condizione è conclusa.
  • l' abilitazione della General Call

In modo Slave una parte dei bit diventa la maschera dell' indirizzo. Il bit 0 dell' indirizzo a 7 bit non è mascherabile, mentre quello dell' indirizzo a 10 bit viene mascherato contemporaneamente al bit 1.

 

SSPSTAT bit GCEN ACKSTAT ACKDT
ADMSK5
ACKEN
ADMSK4
RCEN
ADMSK3
PEN
ADMSK2
RSEN
ADMSK1
SEN
funzione R/W R/W R R R R R R
default 0 0 0 0 0 0 0 0
  • bit 7    GCEN : (General Call ENable) abilitazione alla ricezione della General Call
              
    solo in modo Slave

                1 =
    abilita la ricezione della General Call

                0 =
    Genereal Call disabilitata
  • bit 6    ACKSTAT : (ACKnowledge STATus)  tipo di acnowledge ricevuto
               solo in modo
    Master trasmettitore
                1 =
    ACK non ricevuto (NACK)
                0 =
    ACK ricevuto
     
  • bit 5    ACKDT : (ACK Data bit) selezione del livello dell' acknowledge
              
    solo per il modo Master ricevitore

                1 =
    invia NACK

                0 =
    invia ACK
     
              
    ADMSK5: solo per il modo Slave
                bit 5 della mascheratura indirizzio (mascheratura valida per il bit a 1)
  • bit 4    ACKEN : (ACK sequence ENable bit) abilita la sequenza di acknowledge
              
    solo per il modo Master ricevitore

                1 =
    in
    izia la condizione di acknowledge (livello determinato da ACKDT)
                          
    Cancellato automaticamente dall' hardware.
                0 =
    condizione di ACK idle
     
              
    ADMSK4: solo per il modo Slave
                bit
    4
    della mascheratura indirizzio (mascheratura valida per il bit a 1)
  • bit   RCEN : (Receiver ENable bit) abilita la ricezione del Master
              
    solo per il modo Master ricevitore

                1 =
    abilita la ricezione del Master
                0 =
    ricezione idle
     
              
    ADMSK
    3: solo per il modo Slave
                bit
    3 della mascheratura indirizzio (mascheratura valida per il bit a 1)
  • bit 2    PEN : (Stop condition ENable bit) abilita l' avvio della condizione di Stop
              
    solo per il modo Maste
    r
                1 =
    in
    izia la condizione di Stop
                          
    Cancellato automaticamente dall' hardware.
                0 =
    ricezione idle
     
              
    ADMSK
    2: solo per il modo Slave
                bit
    2 della mascheratura indirizzio (mascheratura valida per il bit a 1)
  • bit 1    RSEN : (ReStart condition ENable bit) abilita l' avvio della condizione di Restart
              
    solo per il modo Maste
    r
                1 =
    inizia la condizione di
    Restart
                          
    Cancellato automaticamente dall' hardware.
                0 =
    Restart idle
     
              
    ADMSK2: 
          solo per il modo Slave con indirizzo a 7 bit
                bit
    1
    della mascheratura indirizzio (mascheratura valida per il bit a 1)
     

               
    solo per il modo Slave con indirizzo a 10  bit
                bit
    1e bit 0 della mascheratura indirizzio (mascheratura valida per il bit a 1)  
              
  • bit 0    SEN : (Start condition ENable)  bit di avvio della condizione START
               in modo Master

                1 = inizia la condizione di Start. Cancellato automaticamente dall' hardware
                0 = condizione di Start idle

               in modo Slave
                1 = abilita il clock stretching sia in ricezione che trasmisione
                0 = clock stretching disabilitato
     
              
    ADMSK2: 
          solo per il modo Slave con indirizzo a 7 bit
                bit
    1
    della mascheratura indirizzio (mascheratura valida per il bit a 1)
     

               
    solo per il modo Slave con indirizzo a 10  bit
                bit
    1e bit 0 della mascheratura indirizzio (mascheratura valida per il bit a 1)           
Note
  1.  per i bit ACKEN, RCEN, PEN, RSEN, SEN : se il modulo MSSP è attivo, a seguito di particolari condizioni, questi bit possono non essere settati e SSPBUF può non essere scritto oppure la sua scrittura può essere disabilitata. 
     
  2. Per maggiori informazioni sulla funzione di mascheratura degli indirizzi, vedere più avanti.

SSPCON2 è presente anche nei mid-range, con le stesse funzioni
I bit che contiene sono essenzialmente i comandi per generare le condizioni, ad eccezione di
GCEN e RCEN:

GCEN

  • Questo bit abilita il modulo MSSP alla ricezione e trattamento della General Call (vedere più avanti i dettagli su questo elemento del protocollo ), quindi è valido solo per le selezioni di modi Slave. 
    in modo Master non ha alcuna funzione.
     
    Se si abilita questo bit, il PIC, come Slave, risponde non solo all'indirizzo definito in SSPADD, ma anche a quello speciale riservato per la Generale Call (0x00).
    I byte che seguono l' indirizzo, in questo caso, hanno funzioni specifiche o riservate (per esempio comandare un reset software). Se si decide che il microcontroller debba rispondere alla General Call, è a carico dell' utente la gestione dell' evento.

RCEN

  • Questo bit abilita il modulo MSSP Master a ricevere dati dallo Slave.
    Attenzione alla differenza: il Master, abilitando RCEN, si apsetta dati in arrivo dallo Slave, ma non viene configurato come Slave. Si tratta di Master in condizione di ricezione (Master ricevitore).
    Con RCEN programmato a 1 il modulo MSSP automatizza la ricezione del byte dal bus, che sarà trasferito in SSPBUF per essere letto dal software.
    Con il bit programmato a 0 il modulo trasmetterà sull bus il byte contenuto in SSPBUB.

I bit rimanenti sono i comandi di avvio delle condizioni
In pratica il modulo MSSP genera le varie condizioni del protocollo I2C in modo interamente automatico, dopo il semplice settaggio del relativo bit di comando in SSPCON2. Quindi, livelli sul bus e temporizzazioni sono del tutto trasparenti per l' utente, al quale, però, resta la condotta logica delle operazioni.

I bit 6:4 sono dedicati alle condizioni di acknowledge.

ACKSTAT

  • Indica se è stato ricevuto un NACK (=1) o un ACK (=0).

 

ACKDT

  • Questo bit contiene il valore da attribuire all' acknowledge emesso dal Master.
    In pratica , le condizoni ACK e NACK sono del tutto identiche come tempi e sequenza e si differenziano solo per il livello attribuito alla linea SDA, che sarà a 0 per un ACK e a 1 per un NACK.
    Il programma di gestione del Master, prima di far partire la condizione con ACKEN, deve caricare in ACKDT il valore voluto per l' acknowledge: se l' utente desidera genrare un ACK, ACKDT sarà posto a 1, l' inverso per generare un NACK.

ACKEN

  • Programmato a 1 genera sul bus la condizione di acnowledge con la polarità stabilita in ACKDT.

I rimanenti bit avviano le altre condizioni.

PEN

  • Programmato a 1 genera sul bus la condizione Stop.

RSEN

  • Programmato a 1 genera sul bus la condizione di Repeated Start o Restart.

SEN

  • Programmato a 1 genera sul bus la condizione di Start.

 

Molto importante da considerare è il fatto che i bit 5:0 di SSPCON2, nell' MSSP degli Enhanced, si differenziano da quelli dell' MSSP dei mid-range perhè, in modo Slave, diventano la maschera dell' indirizzo.

Questo è possibile in quanto i questi bit sono funzionali nel modo sopra descritto solo per il PIC programmato come Master. Come Slave non avrebbero utilità.
Così, per il modulo MSSP dei PIC18F programmato in una modalità Slave, diventano bit di maschera di indirizzo. Questa funzione è descritta più avanti nel paragrafo che descrive l' indirizzamento.


SSPADD

SSPADD ha funzione completamente diversa nell' uso in modo Master o Slave.

 

SSPADD bit ADD7 ADD6 ADD5 ADD4 ADD3 ADD2 ADD1 ADD0
funzione R/W R/W R/W R/W R/W R/W R/W R/W
default 0 0 0 0 0 0 0 0
  • bit 7-0   ADD7:0
                in modo Slave
                 bit dell' indirizzo del modulo MSSP

                in modo Master
                 bit di selezione della frequenza del Baud Rate Generator
Nota
  • Il Master non ha indirizzo, quindi, quando l' MSSP è configurato in questa modalità, il registro SSPADD serve per la programmazione del Baud Rate Generator
     
  • Nel modo multi-Master un Master può essere chiamato come Slave da un' altro Master e in tal caso dovrà operare come tale e abbisognerà di un indirizzo.

In modo Master, la funzione di BRG è descritta più avanti.

In modo Slave, la funzione di indirizamento è anche descritta più avanti.

 


Operazioni in I2C

Il modulo MSSP viene abilitato portando a 1 il bit SSPEN (SSPCON1<5>).

Lo stesso registro SSPCON1 consente, attraverso i bit SSPCON1<3:0> di impostare il modulo per le seguenti modalità I2C:

  • Master
  • Slave con indirizzo a 7 bit
  • Slave con indirizzo a 10 bit
  • Slave con indirizzo a 7 bit e interrupt per le condizioni di Start e Stop abilitato
  • Slave con indirizzo a 10 bit e interrupt per le condizioni di Start e Stop abilitato
  • Master controllato da firmware, slave idle

Selezionando uno qualsiasi di questi modi si forzano i pin SDA e SCL ad assumere una configurazione open drain per collegarsi al bus (su cui dovranno essere presenti i pull-up).


 

 

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