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:
- 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.
- 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.
- 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.
- I registri di controllo del il modulo
MSSP in I2C sono gli stessi del modo SPI, ma variano le funzioni dei
vari bit
- I bit dei registri di controllo in modo I2C possono
avere funzioni differenti a seconda della modalità impostata. Occorre
verificare con cura queste funzioni.
- 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.
- 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.
- Ne risulta che una gestione
software sarà essenzialmente una macchina a stati dove uno stato
viene introdotto alla conclusione del precedente.
- 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.
- 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:
|