Come Aggiungere in Modo Semplice Pin a un Processore

Transcript

Come Aggiungere in Modo Semplice Pin a un Processore
Come Aggiungere in Modo Semplice Pin a un Processore
By (Jon Pearson, Cypress Semiconductor Corp.)
Sommario
L’utilizzo dei port expander può contribuire a incrementare in maniera economica la flessibilità in fase di progetto di sistemi
embedded
Introduzione
In un progetto di un sistema embedded, anche in presenza di un programma ben congegnato, il fallimento può essere alle
porte a causa dell’esaurimento del numero di pin disponibili sul processore prescelto che si traduce nell’impossibilità di
conseguire l’obbiettivo previsto. La prospettiva di adottare un nuovo processore dotato di un numero maggiore di pin di solito
non incontra favori entusiastici. Anche una pianificazione avanzata e l’adozione di margini di progetto non sempre permettono
di ottenere il numero di pin desiderato in quanto ragioni di mercato (o di marketing) spingono verso la costante riduzione dei
costi. Il fatto di completare un progetto nei tempi previsti con un surplus di 10 pin non è di solito visto di buon occhio.
La scelta più ragionevole è selezionare il processore più adatto per l’applicazione considerata (in termini di potenza di
elaborazione e di corredo di periferiche) e aumentare le risorse di I/O mediante dispositivi di espansione esterni che si
connettono su un bus: i port expander. Mettendo a disposizione due pin per un bus di comunicazione standard I2C è possibile
avere un numero quasi illimitato di pin aggiuntivi, che possono essere utilizzati quando si presenta la necessità, con un
impatto praticamente trascurabile sulle componenti hardware e software. Questi, in breve, i vantaggi di un port expander I2C.
Visto da vicino
Un port expander fa parte di una classe di dispositivi, quasi sempre di tipo slave, che si trova su un bus di comunicazione (di
solito I2C, il bus di comunicazione seriale bidirezionale sviluppato da Philips – ora NXP, anche se sono disponibili altri tipi di
bus) in cui sono inviati comandi seriali per la lettura dai pin di I/O o la scrittura sugli stessi. Il processore principale è il master
del bus di comunicazione, un compito per il quale non è richiesta nessuna funzionalità specifica implementata su silicio, anche
se la presenza di un blocco periferico I2C contribuisce a semplificare lo svolgimento del lavoro.
Sebbene esistano parecchi tipi di port expander, dai più semplici ai più complessi che dispongono di numerose caratteristiche
aggiuntive, il loro funzionamento base può essere così descritto:
1. l’indirizzo del dispositivi slave è regolato mediante l’impostazione dei pin nello stato logico alto o basso e quindi
configurato dal master, che scrive comandi sul bus di comunicazione per definire quali sono i pin di ingresso e di
uscita;
2. Durante il funzionamento, il master scrive comandi per cambiare i pin di uscita nel modo desiderato o leggere lo stato
attuale dei pin di ingresso. In molti casi una variazione del pin di ingresso può essere configurata per pilotare una
linea di interrupt in modo da ottenere l’attenzione da parte del master del bus
I pin del port expander agiscono alla stregua di pin satelliti per il processore (il master del bus) in modo da ampliarne il raggio
d’azione per svolgere compiti come ad esempio interagire con un pannello frontale (commutatori e LED), abilitare o disabilitare
altri dispositivi presenti nel sistema (ciò potrebbe comportare l’accensione e lo spegnimento dei sistemi di alimentazione in
una specifica sequenza). In altri casi esso può essere preposto allo svolgimento di compiti di sicurezza, come ad esempio il
monitoraggio continuo dei commutatori connessi all’esterno di un contenitore e l’attivazione di un allarme nel caso il
contenitore venga aperto (un’applicazione molto comune nel caso delle slot machine).
Quindi risulta possibile aggiungere i pin richiesti quando necessario o, meglio ancora, montare il dispositivo sulla scheda in
dall’inizio, collocarlo distante dal bus I2C e, nel caso il progetto non lo richieda, è sufficiente non installarlo.
Caratteristiche e opzioni
Mentre il concetto di port expander è molto semplice, i produttori mettono a disposizione un gran numero di prodotti con
caratteristiche differenti, per cui il criterio di scelta non dipende solamente dal numero dei pin. Ovviamente il numero di pin
disponibili per l’espansione è una variabile, ma poiché ogni dispositivo sul bus I2C deve avere un unico indirizzo (sette bit, con
un ottavo bit che indica l’operazione di lettura o di scrittura), maggiore è il numero di indirizzi che può assumere il dispositivo,
maggiore sarà il numero di essi che è possibile collocare sul bus in caso di necessità. Il compromesso è rappresentato dal
fatto che per ogni linea di indirizzo si rinuncia a un potenziale pin di I/O.
Come Aggiungere in Modo Semplice Pin a un Processore
Published in EO Embedded
Page 1 of 4
April 2007
[+] Feedback
I produttori di pin expander mettono a disposizione un’ampia gamma di dispositivi, con un numero di pin di I/O variabile da 8
fino a 60 su un singolo dispositivo. Per quando riguarda le linee di indirizzo, parecchi dispositivi ne hanno almeno una o due,
mentre altri forniscono uno schema che mette a disposizione fino a 7 bit di indirizzo, lasciando che le linee di indirizzo
inutilizzate agiscano come I/O.
La scelta della modalità di pilotaggio dei pin di I/O varia da dispositivo a dispositivo. Gli ingressi a elevata impedenza possono
offrire la possibilità di selezionare un resistore di pull-up o pull-down interno da 4,7 Ohm sull’uscita. Per quanto riguarda le
uscite, la scelta della configurazione drain aperto/collettore aperto può essere integrata con un’opzione che prevede
un’erogazione di 10 mA e un assorbimento di 25 mA o con resistori di pull-up e pull-down interni. E’ necessario verificare i
datasheet dei singoli integrati per valutare le opzioni disponibili, in special modo nel caso sia necessario pilotare direttamente
dispositivi LED (che richiedono una corrente di pilotaggio di elevata intensità) o collegarsi direttamente a contatti di
commutazione (dove è richiesta la presenza di un resistore di pull-up o di pull-down).
Un’altra caratteristica utile per il pilotaggio dei LED è la modulazione PWM (Pulse Width Modulation). I port expander più
semplici ed economici non dispongono di tale funzionalità, ma quasi tutti i costruttori propongono dispositivi in grado di
supportare circuiti di modulazione di questo tipo (fino a 16 in un singolo dispositivo). Il vantaggio della modulazione PWM è
dato dal fatto che un LED può essere pilotato con una modulazione a elevata frequenza dove il duty cycle imposta l’intensità
luminosa del LED (maggiore è la percentuale del ciclo utile, maggiore sarà il tempo di accensione del LED e la sua intensità
luminosa). Un altro possibile utilizzo è quello di far lampeggiare un LED con una modulazione PWM a bassa frequenza (da 1/
2 Hz a 4 Hz). Infine, nel caso sia previsto dalle opzioni di configurazione e la precisione dell’oscillatore sia sufficiente, il circuito
di modulazione PWM potrebbe essere predisposto per fornire un segnale di temporizzazione a un altro dispositivo.
Alcuni componenti rendono disponibili una certa quantità di EEPROM che è possibile indirizzare in maniera seriale. In questo
modo risulta di solito possibile sostituire una funzione o un dispositivo aggiuntivo altrimenti necessario, utile per
l’identificazione della scheda o per memorizzare altre informazioni inerenti la configurazione. Val la pena sottolineare che
raramente le dimensioni della sono sufficienti per le operazioni di acquisizione dati.
Un altro aspetto interessante da prendere in considerazione è il modo con cui vengono configurati i dispositivi. Per la maggior
parte di essi, la configurazione (direzione della porta, stato dell’uscita, modulazione PWM) è volatile, quindi ogni volta che
viene rimossa l’alimentazione e riapplicata il port expander deve essere impostato: il master del bus deve quindi inviare
ancora i dati di configurazione. I dispositivi più avanzati possono memorizzare la configurazione in una memoria non volatile
presente nel port expander e ripristinarla al momento dell’accensione. Una caratteristica complementare è la capacità di
permettere al dispositivo di avere uno stato di configurazione di power-on (alimentato) scritto nel dispositivo che è differente
dallo stato attuale e che non crea alcun disturbo allo stesso. E’ possibile definire uno stato di failsafe (malfunzionamento
accettabile) e caricarlo nell’eventualità di mancanza di alimentazione: il dispositivo rimane in quello stato finchè il processore
(master del bus) riesce ad aggiornare il dispositivo stesso.
Vantaggi in fase di progetto
Esistono tre modi di utilizzo di un port expander che consentono di sfruttarne al massimo i benefici in un progetto:
1. aggiungere un port expander I2C a un progetto per poter eseguire la prototipazione in tempi rapidi e supportare le
fasi di test e di debug con l’obbiettivo di escluderlo dal prodotto finale
2. aggiungere port expander I2C a un progetto senza un’esigenza specifica, come una sorta di “polizza d’assicurazione”
che è possibile eliminare in qualsiasi momento
3. ridurre le esigenze in termini di pin del processore utilizzando i port expander I2C laddove sia possibile
Nelle fasi iniziali di un progetto, il software applicativo per il monitoraggio e il controllo dei diversi componenti presenti in un
sistema nella migliore delle ipotesi è inadeguato se non addirittura assente. Un port expander I2C con una connessione al bus
disponibile esternamente, può essere impiegato al posto del processore (e del software) per pilotare linee logiche o
monitorare lo stato delle stesse. Con questo semplice componente disponibile a bordo e un master I2C relativamente
economico collegato a un personal computer è possibile effettuare una vasta gamma di operazioni di debug e di verifica
dell’hardware nelle prime fasi di progettazione. Alternativamente, un port expander sulla scheda può servire come test-driver
per l’hardware, consentendo al sistema di funzionare in uno stato per il resto normale, mentre gli stati di malfunzionamento
vengono indotti esternamente attraverso il port expander utilizzando il master I2C collegato a un personal computer. In
entrambi i casi quando il sistema è nella sua configurazione finale, il port expander può essere escluso dal progetto.
All’inizio dell’articolo si era riportato come esempio la possibilità di giungere alla fine di un progetto avendo esaurito i pin sul
processore prescelto. Piuttosto che aggiungere un port expander dopo che ciò si verifica e quindi procedere alla stesura di un
nuovo layout della scheda, si può “giocare d’anticipo” e riservare un piccolo angolo sulla scheda per collocare un port
expander con le connessioni al bus I2C fin dall’inizio. La connessione del dispositivo al bus I2C – l’introduzione di resistori a
Come Aggiungere in Modo Semplice Pin a un Processore
Published in EO Embedded
Page 2 of 4
April 2007
[+] Feedback
resistenza nulla su queste connessioni può essere utile specialmente se i dispositivi del bus I2C saranno integrati nel prodotto
finale – dà la possibilità di impostare degli indirizzi mediante l’installazione di varie combinazioni di resistori e fornisce
collegamenti ai pin di I/O che potranno successivamente essere collegati mediante ponticelli. Se il progetto non richiederà mai
la presenza di un port expander,e possibile escluderlo insieme ai resistori dalla lista dei materiali necessari con l’unico
inconveniente di lasciare libero un minuscolo spazio sulla scheda a circuito stampato.
Infine, una volta acquisita familiarità con i compiti che un port expander (o dispositivi slave simili collegati al bus I2C) può
svolgere è possibile utilizzarlo quando è possibile. Naturalmente è opportuno partizionare il progetto in molte componenti il più
possibile scollegate tra di loro. I vantaggi effettivi potrebbero non essere avvertiti nel corso del primo progetto, ma in ogni
successivo design si potrà seguire un percorso ben definito, riutilizzando nel nuovo progetto parti già collaudate del
precedente. Grazie alle differenti caratteristiche offerte dai vari costruttori è possibile ridurre in maniera sensibile l’operazione
di manipolazione dei pin che deve effettuare il processore principale, aumentando in tal modo il valore del nucleo centrale del
sistema.
I port expander non sono elementi nuovi nel campo della progettazione embedded, così come l’insufficiente numero dei pin
non è un problema venuto di recente alla ribalta. Come accade per tutte le categorie di dispositivi che sono presenti da tempo
sul mercato, a intervalli regolari vengono viene apportata qualche innovazione. L’ampia gamma di caratteristiche (numero di
pin di I/O, modulazioni PWM, EEPROM seriali, opzioni d indirizzamento, configurazione non volatile) e l’universalità d’impiego
dei port expander li rendono componenti utilissimi in fase di progettazione. Grazie all’accesa competizione tra i costruttori per
aggiungere nuove caratteristiche ai loro prodotti, un progettista non deve spendere una fortuna per completare con successo
un progetto nel momento in cui si presenta una nuova funzionalità che richiede un numero maggiore di pin.
Come Aggiungere in Modo Semplice Pin a un Processore
Published in EO Embedded
Page 3 of 4
April 2007
[+] Feedback
Cypress Semiconductor
198 Champion Court
San Jose, CA 95134-1709
Phone: 408-943-2600
Fax: 408-943-4730
http://www.cypress.com
© Cypress Semiconductor Corporation, 2007. The information contained herein is subject to change without notice. Cypress Semiconductor Corporation assumes no responsibility for the
use of any circuitry other than circuitry embodied in a Cypress product. Nor does it convey or imply any license under patent or other rights. Cypress products are not warranted nor intended
to be used for medical, life support, life saving, critical control or safety applications, unless pursuant to an express written agreement with Cypress. Furthermore, Cypress does not authorize
its products for use as critical components in life-support systems where a malfunction or failure may reasonably be expected to result in significant injury to the user. The inclusion of
Cypress products in life-support systems application implies that the manufacturer assumes all risk of such use and in doing so indemnifies Cypress against all charges.
PSoC Designer™, Programmable System-on-Chip™, and PSoC Express™ are trademarks and PSoC® is a registered trademark of Cypress Semiconductor Corp. All other trademarks or
registered trademarks referenced herein are property of the respective corporations.
This Source Code (software and/or firmware) is owned by Cypress Semiconductor Corporation (Cypress) and is protected by and subject to worldwide patent protection (United States and
foreign), United States copyright laws and international treaty provisions. Cypress hereby grants to licensee a personal, non-exclusive, non-transferable license to copy, use, modify, create
derivative works of, and compile the Cypress Source Code and derivative works for the sole purpose of creating custom software and or firmware in support of licensee product to be used
only in conjunction with a Cypress integrated circuit as specified in the applicable agreement. Any reproduction, modification, translation, compilation, or representation of this Source Code
except as specified above is prohibited without the express written permission of Cypress.
Disclaimer: CYPRESS MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Cypress reserves the right to make changes without further notice to the materials described
herein. Cypress does not assume any liability arising out of the application or use of any product or circuit described herein. Cypress does not authorize its products for use as critical
components in life-support systems where a malfunction or failure may reasonably be expected to result in significant injury to the user. The inclusion of Cypress’ product in a life-support
systems application implies that the manufacturer assumes all risk of such use and in doing so indemnifies Cypress against all charges.
Use may be limited by and subject to the applicable Cypress software license agreement.
Come Aggiungere in Modo Semplice Pin a un Processore
Published in EO Embedded
Page 4 of 4
April 2007
[+] Feedback