In questo articolo della Rubrica Firmware Reload incontreremo un System on Chip dalle caratteristiche veramente stupefacenti, sviluppato e prodotto da Silicon Labs. Insieme al componente viene messo a disposizione del progettista di applicazioni wireless un completo ecosistema, concepito per permettere di concentrarsi sull’applicazione. Tutti i dettagli del complesso mondo wireless/RF sono, per quanto possibile, risolti a priori e “congelati” in blocchi funzionali pre-collaudati e caratterizzati.
Il dispositivo è stato progettato per applicazioni Internet of Things, ovvero tutte quelle apparecchiature in fase di concezione, in grado di comunicare tra loro in una grande rete globale, per assolvere a funzioni distribuite, virtualmente senza supervisione umana o con supervisione minima. In particolare i SoC della famiglia Si106 e Si108 integrano tutto quanto necessario per le cosiddette applicazioni “smart meter” compatibili con lo standard 802.15.4g (vedi Riferimento 1). Il datasheet suggerisce come non solo applicazioni di misura e tariffazione remota siano realizzabili ma anche tutte quelle funzioni che comportano misura, controllo, acquisizione dati, piccole automazioni. Tra le applicazioni suggerite ci sono telemetria, automazione domestica, controllo remoto, apertura porte, controllo illuminazione e condizionamento, allarmi anti intrusione ed anti incendio. Vediamo più in dettaglio come Si106 è composto.
DESCRIZIONE DELLO SCHEMA A BLOCCHI
In Figura 1 possiamo vedere lo schema a blocchi del SoC, veramente completo e complesso. Possiamo distinguere cinque blocchi circuitali principali ed una serie di moduli di servizio. Procedendo da sinistra a destra, troviamo il modulo CIP51, principalmente formato dalla CPU, un microcontrollore della famiglia 8051, su cui ritorneremo tra poco. Il modulo contiene anche memoria programma, fino a 64 kB di flash e memoria dati, fino a 4 kB di RAM. La memoria FLASH è in realtà usabile anche per conservare dati attraverso un meccanismo che vedremo in seguito, meccanismo che costituisce un’eccezione nell’architettura di CIP51. Troviamo poi gli Special Function Registers, sostanzialmente un banco di memoria RAM con flessibili meccanismi di accesso.
Il modo d’indirizzamento diretto è usato per accedere agli SFR, molti sono anche bit-addressable, oltre che byte-addressable. L’indirizzamento diretto, ricordiamo brevemente, specifica l’operando esprimendo direttamente il suo indirizzo in memoria, come numero esadecimale o, meglio, con un nome mnemonico abbreviato (ad esempio P3 per Port3 Data Register). Il modulo SFR contiene sia i registri standard dell’architettura 8051 che registri aggiunti per gestire le periferiche proprie di Si10x. Gli SFR gestiscono anche lo scambio dati tra CPU e periferiche on-chip. Abbiamo poi un blocco Periferiche Digitali ed un blocco Periferiche Analogiche. Il blocco digitale contiene i quattro counter/timer classici dell’architettura MCS51, una interfaccia seriale UART, una interfaccia seriale SPI, una interfaccia seriale I2C, 11 General Purpose I/O (GPIO).
Il modulo di gestione hardware della periferica I2C è compatibile con la System Management Bus Specification, versione 1.1. È interessante notare come la SPI possa essere usata internamente al chip in uno dei due modi di interfacciamento con il modulo RF RTX, nel qual caso essa è sempre attiva. Il lettore che non abbia familiarità con SPI può trovare una introduzione a questa interfaccia in Riferimento 3. Il modulo digitale di Si106 contiene anche una periferica timer avanzata, simile a quanto reso disponibile da Intel sui suoi ultimi dispositivi MCS-52, il Programmable Counter Array. Esso consiste in counter/timer con funzioni avanzate richiedenti minore supervisione da parte della CPU, confrontati con i timer base dell’architettura. Il PCA consiste in un counter/timer 16-bit aggiuntivo e sei moduli capture/compare. Ogni modulo capture/compare ha la propria linea hardware associata con un I/O fisico connesso alla Crossbar, in modo da potergli assegnare un pin fisico, se richiesto. PCA consente così di realizzare funzioni di misura di intervalli di tempo e generazione di treni di impulsi PWM con minima perdita di tempo CPU. Uno dei moduli Capture/Compare può essere usato come WatchDog Timer, sorvegliando così il corretto funzionamento dell’applicazione e recuperando eventuali condizioni di blocco. Passando al modulo analogico, questo contiene un convertitore 10-bit analogico-digitale a 10 bit, un sensore di temperatura e due comparatori.
Il convertitore è ad approssimazioni successive, con memoria analogica di campionamento integrata e capacità di generare interrupt quando il valore esca da finestre di valori programmate. Esso è capace di acquisire 300000 campioni al secondo. La periferica è ben progettata, rendendo disponibile una modalità Burst a basso consumo, nella quale ADC è abilitato, acquisisce e memorizza campioni e poi torna ad una condizione di basso consumo, il tutto senza interventi della CPU. È anche disponibile un accumulatore che consente sovra-campionamento e media tra valori, tecnica utile per filtrare rumore. L’ingresso del convertitore può essere uno qualsiasi dei GPIO, riconfigurati come Ingressi Analogici, il sensore di temperatura, la massa interna, l’alimentazione della CPU o l’uscita del regolatore di tensione integrato di cui parleremo tra poco. Le connessioni all’alimentazione servono a realizzare funzioni di autocorrezione ed autodiagnostica (vedi Riferimento 2). Il convertitore può operare con tensione di riferimento generata internamente per ridurre al minimo i componenti necessari a realizzare l’applicazione e massimizzare la disponibilità di pin I/O. I due comparatori possono essere usati come sorgente di reset e wake-up, essendo in grado di operare anche quando il clock di sistema del dispositivo non è attivo.
I comparatori hanno isteresi e tempi di risposta programmabili, un multiplexer analogico per collegare gli input e le uscite sono collegabili a pin Port pins. Il sensore di temperatura ha una risposta caratterizzata da buona linearità ed è usabile per misure relative. Una semplice calibrazione, verso una singola temperatura nota, consente di avere una buona precisione assoluta. Sostanzialmente si esegue una calibrazione in un singolo punto per determinare e registrare l’offset da applicare alla retta che costituisce la funzione di trasferimento Temperatura/Tensione del sensore. Qualche cautela è necessaria per tener conto dell’auto-riscaldamento del componente, occorre attendere la sua stabilizzazione termica ed operare in una situazione di consumo analoga a quella media operativa. Il modulo rappresentato a destra in Figura 1 è il più innovativo e definisce la missione del dispositivo. Si tratta, infatti, di un ricetrasmettitore radio, capace di operare nella banda 142-1050 MHz.
La possibilità di operare con tensioni di alimentazione comprese tra 1,8 V e 3,6 V, unita al basso consumo, confermano Si106 come ideale per operare in applicazioni alimentate a batterie. Si106 opera in Time Division Duplexing (TDD), con trasmissione e ricezione alternata di pacchetti di dati. Il ricevitore usa è a singola conversione, con riduzione ad una bassa frequenza intermedia dei segnali ricevuti con modulazioni FSK/GFSK oppure OOK. Un amplificatore programmabile fornisce il segnale IF ad un convertitore Analogico-Digitale, cui seguono operazioni di filtraggio, demodulazione, trattamento dei pacchetti dati a cura di un Digital Signal Processor dedicato.
I dati ricostruiti sono passati alla MCU 8051 attraverso GPIO o l’interfaccia SPI, prelevandoli da un buffer di memoria temporanea a 64-byte organizzato con architettura FIFO (First In, First Out). L’oscillatore locale di precisione serve sia il trasmettitore che il ricevitore, operando con un VCO ed un sintetizzatore PLL. Dispositivi diversi sono disponibili nella famiglia Si106 per bande di 142 - 175, 283 - 350, 420 - 525, e 850 - 1050 MHz, oppure 283 - 350, 425 - 525 e 850 - 960 MHz. Nel primo caso abbiamo step minimi di 28.6 Hz e data-rate da 100 bps ad 1 Mbp, nel secondo step di 114,4 Hz e data-rate da 100 bps a 500 kbps. Un Amplificatore di Potenza ad alta efficienza pilota l’antenna. Tipici consumi possono essere nell’ordine di 85 mA a 915 MHz, con una potenza di uscita di +20 dBm.
L’uscita è single-ended per un facile ed economico adattamento all’antenna. Due differenti configurazioni dell’amplificatore consentono di scegliere tra consumo ottimizzato (Classe E) o migliore tolleranza a variazioni di tensione di alimentazione e temperatura (Switched Current Matching), a spese di un consumo leggermente più elevato. La flessibilità del circuito di gestione dei pacchetti dati consente una codifica/decodifica autonoma, sostanzialmente senza porre vincoli alla struttura del pacchetto dati. Il timer di wake-up e il rivelatore di pacchetti ricevuti consentono ulteriori riduzioni di consumo, svegliando il modulo quando necessario. Varie differenti modulazioni sono utilizzabili, On-off keying (OOK), Gaussian frequency shift keying (GFSK), frequency- shift keying (FSK), GFSK a 4 livelli (4GFSK) e FSK 4 livelli (4FSK). GFSK è la scelta raccomandata per le migliori prestazioni e pulizia spettrale. È anche possibile generare una portante RF continua, non modulata.
MODULI DI SUPPORTO
Si comprende come i blocchi circuitali qui appena introdotti, permettano di costruire applicazioni flessibili e sofisticate in modo molto compatto ed economico. Ma Silicon Labs ha inserito una serie di moduli ausiliari che estendono ancora di più questa flessibilità e compattezza. Troviamo una serie di opzioni per la generazione del clock di sistema. Si106 dispone di un oscillatore interno di precisione, un oscillatore interno a basso consumo, un real-time clock (SmaRTClock) e può anche operare con un quarzo esterno. In alternativa al quarzo possono essere usate economiche RC o oscillatori CMOS. L’oscillatore interno di precisione opera a 24,5 MHz nominali con precisione del 2% e può essere calibrato operando su due registri. L’oscillatore a basso consumo opera a 20 MHz nominali. Il clock di sistema può essere derivato da una qualsiasi delle sorgenti citate, direttamente o attraverso un divisore per ridurre i consumi. SmaRTClock ha bassissimo consumo e può operare con o senza componenti esterni.
Condensatori di carico interni sono disponibili e programmabili in 16 valori per adattarsi ad una vasta gamma di quarzi a 32768 kHz. È disponibile una funzione sveglia, usabile anche per generare reset o wake-up. L’orologio opera direttamente da una batteria fintanto che la tensione erogata si mantiene tra 0,9 e 3,6 V, anche quando Si106 viene posto in power down. Funzioni di orologio e attivazioni periodiche sono così supportate con consumi minimi. A tal proposito, cinque modi operativi sono disponibili con spegnimento parziale o totale delle sorgenti di clock, alcuni modi (Suspend, Sleep) consentono un rapido risveglio con esecuzione della prossima istruzione puntata dal program counter al momento dell’entrata in modo low power. Si106 include anche un convertitore DCDC per consentire di lavorare con una singola batteria, fino ad una tensione minima di 0,9 V. Esso è un convertitore elevatore a commutazione, con ingresso tra 0,9 e 1,8 V ed uscita programmabile tra 1,8 e 3,3 V. Il valore di uscita default è 1,9 V.
Può erogare 65 mW con picchi di 100 mW, ed alimentare anche circuiteria esterna a Si106, riducendo il numero di componenti richiesti a costruire sensori intelligenti comprendenti parti analogiche che non lavorano a 0,9 V. Un regolatore stabilizzato integrato nel chip può alimentare la MCU ad 1,8 V a partire da una sorgente tra 1,8 e 3,6 V. Il Codice a Ridondanza Ciclica è spesso usato per il controllo di errori in flussi di dati. Si106 contiene un generatore di CRC hardware, in grado di operare con polinomi di 16 o 32 bit (CRC16 e CRC32), rispettivamente. Questo libera la MCU dall’onere di calcolare il CRC in software. Per finire l’esposizione di questa pletora di moduli e periferiche, notiamo la presenza dell’interfaccia C2, interfaccia di debug a 2 fili sviluppata da Silicon Labs per i propri microcontrollori. Una linea clock ed una linea dati bidirezionale sono usate per comunicare tra dispositivo ed il sistema host che ospita il debugger con interfaccia utente. Sono possibili sia programmazione della FLASH che debug in-system, direttamente sulla scheda applicativa.
QUALCHE CONSIDERAZIONE A PROPOSITO DI UN VECCHIO AMICO, LA CPU 8051
La MCU utilizzata appartiene alla famiglia MCS8051, una delle più diffuse, insieme allo storico concorrente MC6805, nell’era precedente alla diffusione dei PIC. A partire dalla sua introduzione da parte di Intel nel 1980, 8051 ha avuto una gigantesca base installata, con strumenti di sviluppo, librerie e supporto forse tuttora ineguagliati. La capacità di manipolare variabili a singolo bit, quindi compatte ed efficienti, operazioni di moltiplicazione e divisione, flessibili istruzioni di controllo del flusso di esecuzione, oltre al peso di Intel, hanno contribuito a questo successo. Questo malgrado un’architettura relativamente complessa basata su registri specializzati e non ad impiego generico, come siamo oggi abituati a vedere, e curiose asimmetrie nel set di istruzioni. È ad esempio disponibile una istruzione di incremento del registro puntatore ma non il decremento. MCU CIP51 di Silicon Labs è una implementazione brevettata del set di istruzioni originali 8051, con piena compatibilità a livello di codice oggetto. Il set di istruzioni è completamente implementato in hardware, invece che con esecuzione di microcodice, come nella versione originale. La maggior parte delle istruzioni risultano eseguite in uno o due cicli di clock, invece di 12, con una performance totale da 20 a 25 volte l’originale, grazie anche all’architettura pipeline ed al clock più veloce, reso possibile dai moderni processi CMOS di fabbricazione. CIP51 è capace di un picco di 100 MIPS (Million of Instruction Per Second). Notiamo che la compatibilità a livello di codice oggetto non è sufficiente per garantire la completa portabilità di programmi sviluppati sull’architettura originale. Proprio i diversi tempi di esecuzione delle istruzioni potrebbero pregiudicare il funzionamento corretto di codice che utilizzi ritardi basati sull’esecuzione di un determinato numero di istruzioni. Sebbene tale pratica sia decisamente sconsigliabile, essa era diffusa nel mondo delle applicazioni embedded, ed in qualche caso estremo sostanzialmente inevitabile.
APPLICAZIONI
Le applicazioni suggerite sono molto ampie, oltre a smart-meter. Silicon Labs consiglia il dispositivo per sistemi di apertura porte senza-chiave, antifurti per auto, controlli remoti, sostituzione di telecomandi infrarossi, stazioni meteo wireless, RFID attivi, monitor per neonati, display remoti. Un ampio ecosistema è stato reso disponibile, comprendente hardware, software e strumenti di sviluppo. L’Application Note 791, vedi Riferimento 4, fornisce minuziose descrizioni di layout per PCB pre-caratterizzati, per ridurre lo sforzo di progettazione e minimizzare rischi di malfunzionamento. Oltre a raccomandazioni generali per la progettazione di circuiti stampati RF, viene spiegato come posizionare i componenti critici e la ragione dei suggerimenti forniti.
La lettura si rivela quindi utile anche per chi intenda lavorare su componenti simili, non necessariamente appartenenti alla stessa famiglia. Per Si106 vengono anche forniti i disegni del PCB con lo sbroglio ottimale suggerito per varie configurazioni in cui il componente è applicabile, sbroglio da riprodurre fedelmente nella propria scheda. Alcune altre Application Notes sono richiamate nel testo, consentendo di andare ancora più a fondo nelle procedure di calcolo dell’adattamento di impedenza dei ricetrasmettitori integrati. Si mette in luce come non sia possibile soddisfare contemporaneamente tutti i requisiti di progetto e si guida il lettore alla scelta di soluzioni di compromesso che siano consone alla specifica applicazione che s’intende realizzare.
Tra le specifiche di progetto principali possiamo elencare la potenza di trasmissione voluta, basso consumo, conformità agli standard internazionali, tolleranza alla variazione di impedenza, stabilità verso alimentazione e temperatura e, naturalmente, costo. Semplici schede applicative sono disponibili per consentire di iniziare a sviluppare in un ambiente consolidato, vedi Riferimento 5. Passando invece al lato software, sono disponibili un ambiente di sviluppo, una Wireless Development Suite e i manuali di riferimento. La Guida alla Programmazione non è solo un elenco di registri e comandi ma rende disponibili esempi di configurazione e gestione delle varie funzioni per aiutare la messa a punto ma anche la stesura del programma applicativo. Abbiamo così esempi di trasmissione continua della portante (CW), ma anche trasmissione e ricezione di semplici pacchetti dati, fino ad una complessa comunicazione bidirezionale basata su pacchetti dati di lunghezza variabile. In conclusione, rischiamo di incontrare nei prossimi anni nelle nostre case, molte applicazioni basate su questa piccola meraviglia della tecnica, magari senza neppure sapere che si tratti proprio di esso.
Nota: Tutti i marchi citati appartengono ai legittimi proprietari, non citati qui per brevità.