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