Tutorials - PIC18 by Data Sheet

 
 

MSSP - I2C

 

I2C Silicon Errata.

Il modulo MSSP si trova ad avere possibili problemi dovuti alla realizzazione. Questi problemi sono riportati in documenti chiamati Errata da Microchip; essi individuano i problemi e suggeriscono possibili soluzioni.
Il documento DS80131e riporta una serie di problemi legati al modulo MSSP in modo I2C.

Anche se  gli Errata sono relativi solamente ai dispositivi con ID e revisione indicate dallo stesso documento e nella lista dei processori la famiglia 18Fx321 non viene elencata, è opportuno prendere visone comunque dei problemi generali legati al modulo MSSP.

 

Modulo  I2C in modalità Slave.

Nella sua implementazione corrente, il modulo potrebbe non riuscire a riconoscere correttamente alcuni condizioni di Restart. Per questa discussione, un Restart è definito come una condizione di Start presentata al bus dopo che una condizione iniziale di Start è stato riconosciuta valida e, di conseguenza, il bit di stato di avvio (SSPSTAT <3>) è stato settato, e non è ancora stata emessa una condizione di Stop che abbia liberato il bus.

Se un Restart non viene riconosciuto, si verifica una perdita di sincronizzazione tra il Master e lo Slave e la condizione può continuare fino a quando il modulo viene azzerato. Una condizione NACK, generata dallo Slave per qualsiasi motivo, non azzererà il modulo.
Questo errore è stata osservato solo in due circostanze:

  • Il Restart avviene nella finestra di un byte di dati o indirizzi. La partenza inaspettata della condizione può essere erroneamente interpretata come un bit di dati, a condizione che le condizioni richieste per la configurazione e le temporizzazioni siano rispettati.
  • Una condizione di Restart avviene tra back-to-back tra due match di indirizzo nello Slave, con il bit R/W = 1 (lettura) in entrambi i casi. (Questa circostanza è considerata come improbabile in funzionamento normale.)

Una routine di  time-out dovrebbero essere utilizzata per monitorare il funzionamento del del modulo. Il timer è abilitato al ricevimento di una condizione di Start valida; se un time-out si verifica, il modulo viene azzerato. La lunghezza del periodo di timeout varia da applicazione ad applicazione e dovrà essere determinata dall'utente.

Due metodi sono suggeriti per reimpostare il modulo:

  1. Cambiare la modalità del modulo a qualcosa diverso del modo desiderato modificando le impostazioni di bit, SSPM3: SSPM0 (SSPCON1 <03:00>); poi, modificare i bit di nuovo nella posizione della configurazione desiderata.
  2. Disattivare il modulo deselezionando il bit SSPEN (SSPCON1 <5>), quindi, ri-attivare il modulo settando il bit.

Sono possibili altri metodi.

Errore sul bit S

Quando una è avviata una condizione di Start, il bit S di SSPSTAT va a 1. Fino a quando questo bit è a 1, il modulo non può rilevare una nuova condizione di Start che sia immessa sul bus per errore.
Il bit S viene cancellato dalla ricezione di uno Stop, dalla disabilitazione del modulo MSSP o al riconoscimento del secondo byte di un indirizzo di 10 bit.
Così, se, per errore, uno Start viene inserito sul bus durante una trasmissione già iniziata da uno Start, questo sarà rilevato non come un errore, ma come un bit di dati.

In più, un NACK generato dallo Slave non provoca il reset del modulo.

Questo bug potrebbe colpire anche i PIC 18. Mentre Microchip risolve il problema, la soluzione proposta è la seguente:

  • avviare un timer quando si riceve uno Start. Il suo tempo di overflow va calcolato in base al tempo massimo tra il ricevimento dello Start e la cancellazione di S da parte dello Stop di fine comunicazione.
    Se si verifica un overflow del timer vuol dire è che lo Stop non è stato ricevuto nel tempo previsto e l'utente dovrà quindi azzerare il modulo, che può essere fatto cambiando il valore dei bit SSPMx, per poi ridare loro il valore corretto per l'applicazione.

 


E' pratica indispensabile, scelto un dispositivo, non solo controllarne il foglio dati, ma anche verificare l'esistenza di Errata. Si deve dire che i problemi descritti da questi documenti sono assai spesso marginali ed è possibile che l' utente nella sua applicazione non li incroci mai. Ma, in ogni caso, dato che sono tali da creare situazioni in cui il debug diventa drammatico, è opportuno tenerne conto.

Alcune note finali.

Questi sono alcuni punti salienti di cui occorre tener conto usando il modulo MSSP in I2C.

  1. Il modulo MSSP controlla sia la comunicazione SPI che la I2C, ma può essere configurato solamente per una alla volta. Nel caso occorra avere sullo steso PIC entrambi i bus si dovrà scegliere un modello dotato di almeno 2 moduli MSSP.
  2. I registri di controllo del il modulo MSSP in I2C sono gli stessi del modo SPI, ma variano le funzioni dei vari bit
     
  3. I bit dei registri di controllo in modo  I2C possono avere funzioni differenti a seconda della modalità impostata. Occorre verificare con cura queste funzioni.
  4. Alcuni bit hanno funzione duale: 

    -
    ci sono bit da settare da programma per avviare le condizioni (Start, Stop, ACK, NACK, Restart) e nello stesso tempo svolgono funzione di flag dell' operazione. Essi sono resettati automaticamente dall' hardware alla conclusione dell' operazione. 

    - altri flag, come SSPIF e BCLIF, vanno cancellati da programma
     
    - altri bit, come BF e UA, sono cancellati a seguito di una operazione specifica (rispettivamente lettura o scrittura di SSPBUF, scrittura di SSPADD)
     
    Occorre verificare dalle descrizioni seguenti quando e come i vari flag vengono movimentati, dato che alcuni (buffer full e overflow) bloccano la comunicazione fino a che l' anomalia è corretta.
  5. La comunicazione I2C si svolge secondo un protocollo ben definito, in passi successivi in cui il seguente può dipendere dal precedente.
    MSSP non supporta concatenamento di comandi, per cui è obbligo verificare che il modulo abbia eseguito il precedente comando e sia libero prima di iniziare un nuovo comando.
     
  6. Ne risulta che una gestione software sarà essenzialmente una macchina a stati dove uno stato viene introdotto alla conclusione del precedente.
     
  7. Il modulo MSSP automatizza al massimo le operazioni sul bus (manipolazione dei segnali per la ricezione e trasmissione, generazione delle condizioni, riconoscimento delle condizioni, campionamenti sulle linee, ecc) oltre a funzioni speciali come il clock stretching e l' arbitrato (per i sistemi multi-Master).
    Però il modulo MSSP non può governare la logica della comunicazione, le cui azioni sono completamente a carico dell' utente.
    In questo senso, una completa gestione del bus I2C, sopratutto in multi-Master, è abbastanza complessa. 
    In ogni caso, la gestione del bus richiede di averne ben compreso la logica.
     
  8. La gestione in interrupt è facilitata da flag specifici ed è indispensabile se il dispositivo deve svolgere altre funzioni oltre alla comunicazione sul bus.

I2 + C

I linguaggi C per i PIC forniscono librerie di funzioni per il setup e l' uso del modulo MSSP in I2C.
Altrettanto vari altri linguaggi ad alto livello.


LINK

Alcuni link utili, a partire da quelli di Microchip:

Inoltre:


 

 

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