Abbonati ora!

I microcontrollori 8051 SILABS

I microcontrollori silabs si basano  sul collaudato core 8051. sono disponibili in cento versioni diverse e offrono un’ampia scelta di periferiche analogiche e di comunicazione.

La famiglia di microcontrollori Silabs nasce alla fine degli anni 90 con il marchio Cygnal. Capostipite è la serie C8051F0xx seguita poi da numerosi altri modelli, ad oggi sono quasi un centinaio e offrono un’ampia scelta di periferiche, molte configurazioni di memoria e diversi package anche di dimensioni ridotte. Il microcontrollore è basato sul core 8051 che, rappresenta un ritorno al futuro in quanto il core, pur mantenendo l’architettura standard del vecchio 8051, in alcuni modelli può raggiungere velocità di picco di 100Mips. Questi dispositivi sono in realtà dei mixed-signal controllers. Tutti i modelli  infatti contengono una sezione analogica completa costituita da un multiplexer di ingresso per acquisizioni su più canali, un PGA (Programmable Gain Amplifier), un convertitore A/D SAR, un riferimento di tensione, un sensore di temperatura e, in alcune versioni, un DAC a due canali. Ampia è anche la scelta delle periferiche di comunicazione, in ogni modello sono infatti incluse tutte le interfacce standard di comunicazione di un sistema embedded: un’interfaccia UART, una interfaccia SPI e  un’interfaccia SMBUS compatibile IIC. Una particolarità dei micro Silabs è la presenza della digital crossbar che permette di modificare la connessione tra gli I/O delle periferiche e i pin del microcontrollore secondo le esigenze del progettista. Dalla prima famiglia C8051F0xx questi microcontrollori integrano anche un oscillatore la cui precisione nelle nuove versioni è migliorata passando dall’iniziale 20% al 2% e non richiede perciò tarature o l’aggiunta di un quarzo esterno. Un’altra periferica comune a tutti i modelli  è la porta jtag per la programmazione e il debug che trasforma ogni micro in un potenziale sistema di sviluppo. Si può infatti acquistare  i sistemi di sviluppo per le varie famiglie a prezzi veramente contenuti partendo da solo $99. I package utilizzati per i micro Silabs sono essenzialmente tre: i QFP per i modelli con il  maggior numero di pin e i QFN o MLP per i modelli più piccoli che occupano uno spazio molto ridotto. Con l’aggiunta di nuove periferiche, sono stati proposti numerosi altri modelli. Ad esempio: la famiglia C8051F35x con convertitore analogico sigma-delta con risoluzione massima di 24bit, oppure la famiglia C8051F34x che aggiunge alle periferiche standard di comunicazione anche una periferica USB2.0 slave, o la recente C8051F5xx per applicazioni automotive che integra una periferica per comunicazione su bus LIN. Impeccabile anche il supporto tecnico fornito da Silabs. Accanto alla dettagliata documentazione tecnica di ogni micrcontrollore, sono disponibili numerosissime appnote, complete di software d’esempio, che coprono svariati argomenti: comunicazione su rete ethernet, realizzazione di periferiche con interfaccia USB, le diverse problematiche dell’acquisizione analogica, filtri digitali, controllo motore.

Il core 8051

I dispositivi Silabs sono basati sul core 8051. Come anticipato l’architettura del core è rimasta invariata: la ram interna è di 256 byte, la parte bassa è occupata dai quattro banchi di registri del micro. I 128 byte superiori sono ad accesso indiretto poiché l’accesso diretto è riservato ai registri funzione del micro, i famosi SFR (Special Function Register). Cambia radicalmente invece la gestione del clock poiché il core Silabs è in grado di eseguire alcune istruzioni in un solo ciclo di clock e la maggior parte in due o tre cicli di clock anziché in multipli di 12 cicli necessari al core standard. Poiché alcuni modelli, ad esempio C8051F12x, possono lavorare con clock a 100MHz l’8051 Silabs può raggiungere velocità di picco di 100Mips. La gestione degli interrupt nei diversi modelli è stata estesa dagli iniziali 8 fino a 24 diversi vettori di interrupt con relativa configurazione delle priorità per consentire la gestione delle tantissime periferiche del microcontrollore. Infine nelle versioni più complete (La famiglia C8051F12x) c’è anche un MAC (Mutliply & Accumulate) con moltiplicatore 16x16bit e sommatore a 40bit che avvicina le prestazioni del micro a quelle di un DSP. La famiglia di microcontrollori Silabs nasce alla fine degli anni 90 con il marchio Cygnal. Capostipite è la serie C8051F0xx seguita poi da numerosi altri modelli, ad oggi sono quasi un centinaio e offrono un’ampia scelta di periferiche, molte configurazioni di memoria e diversi package anche di dimensioni ridotte.

La memoria esterna

Il termine esterna fa riferimento alla memoria a cui si può accedere con le istruzioni movc e movx dell’8051. La dimensione massima della memoria esterna in dirizzabile dal core 8015 è di 64KB. Lo spazio indirizzabile è condiviso tra memoria dati (ram) accessibile con l’istruzione movx e memoria programmi, in questo caso flash, accessibile in lettura con l’istruzione movc. In realtà in tutti i micro Silabs è possibile accedere alla memoria programma in modalità dati con l’istruzione movx configurando opportunamente il bit PSWE del registro PSCTL. Poiché la memoria flash del micro può essere cancellata e programmata a settori di 512/1024 byte a seconda dei modelli, è possibile sfruttare l’accesso in modalità dati alla memoria programma per salvare dati o parametri di configurazione. In alcuni modelli della famiglia C8015F12x la memoria flash è di 128KB. In questo caso l’accesso ai 64KB superiori avviene con la tecnica del bank switching. La memoria è suddivisa in quattro bank da 32KB numerati da 0 a 3. Nei 32KB inferiori dell’area indirizzabile si accede sempre al banco zero. Nei 32KB superiori è possibile abilitare la visibilità di uno degli altri tre banchi in funzione del valore del registro SFR di bank switching. La memoria flash implementa diversi meccanismi di protezione per evitare scritture accidentali o cancellazioni indesiderate. La procedura di modifica della flash richiede l’abilitazione dei bit PSWE e PSEE prima di ogni acceso in scrittura o cancellazione. Un settore della memoria flash è dedicato alla protezione del codice. Nell’evoluzione dei vari modelli la procedura di protezione è cambiata anche se il meccanismo è rimasto sostanzialmente lo stesso. Ogni bit del settore di protezione corrisponde ad un settore della memoria flash, quando si attiva il bit di protezione,  il settore corrispondente non è più modificabile e non è più accessibile nemmeno dalla porta di jtag di programmazione e debug per impedire letture non autorizzate del codice. Per ripristinare la normale funzione della memoria flash si devono disattivare i  bit di protezione; operazione che può essere fatta solo cancellando l’intera memoria flash dalla porta jtag. La quantità di memoria ram esterna varia a seconda del modello: è assente sui modelli più piccoli e può raggiungere 8KB sulle versioni maggiori.

Le periferiche

La dotazione di periferiche per ogni microcontrollore silabs è veramente completa. Silabs ha curato particolarmente la periferica analogica e offre diverse soluzioni per convertitori analogici che possono arrivare fino a 24bit. Completa anche la dotazione di periferiche di comunicazione che in tutti i modelli  comprende almeno una UART una periferica SPI e una periferica SMBUS compatibile con bus IIC. Nella famiglia C8051F04x  è presente una periferica CANbus, mentre nelle versioni più recenti come la famiglia C8051F34x è presente una periferica USB2.0 e nella famiglia C8051F5xx un interfaccia LIN bus. Per la connessione ethernet si rimanda al riquadro dedicato all’argomento. In ogni modello inoltre, ci sono almeno tre timer hardware a 16 bit che possono diventare cinque in alcune versioni e un PCA (Programmable Counter Array) a tre canali.

La sezione analogica

In quasi tutti i modelli  è presente un convertitore analogico digitale con risoluzione che può variare da 8 a 10 o 12 bit con modalità di acquisizione SAR (Successive Approssimation  Register). La velocità di conversione permette di effettuare 100K o 200K acquisizioni al secondo con risoluzione rispettivamente di 12bit e 10bit e può arrivare a 500Ksps per conversioni a 8 bit. Ogni convertitore è dotato di PGA, track and hold e multiplexer per l’acquisizione di più ingressi sia single ended che differenziali. Poiché i  pin di ingresso del microcontrollore si possono configurare singolarmente sia come ingressi digitali che come ingressi analogici, nei diversi modelli si può disporre di 8, 16 o anche 32 canali analogici multiplexati. Ci sono inoltre modelli con caratteristiche particolari come ad esempio:
la famiglia C8051F06x che utilizza due convertitori SAR a 16bit con frequenza massima di acquisizione di 1Msps e trasferimento in DMA verso la memoria ram del micro. I due canali si possono utilizzare sia per l’acquisizione di due ingressi single ended o per l’acquisizione di un canale differenziale. La famiglia C8051F35x che utilizza un convertitore sigma delta con risoluzione massima di 24bit e frequenza di acquisizione di 1Ksps su otto canali multiplexati e comprende PGA e circuito di calibrazione e taratura. Per alcune versioni è disponibile anche la funzione window detector per controllare in modo automatico, senza l’intervento della cpu, il  valore della grandezza analogica misurata. Quando questo valore esce da (entra in) un intervallo prefissato, configurato dal programma, la window detector segnala con un interrupt la condizione alla cpu. In alcuni modelli c’è anche una periferica DAC a 12 bit  a uno o due canali. In ogni versione è anche presente almeno un comparatore analogico con isteresi programmabile.

Le periferiche di comunicazione

La porta di comunicazione seriale dei micro Silabs si può configurare sia per il funzionamento a 8 bit che 9 bit con baudrate massimo di 115000baud. La precisione dell’oscillatore delle versioni più recenti consente di generare il clock per la periferica seriale direttamente dall’oscillatore interno senza utilizzare quarzo esterno. La periferica SPI è completamente configurabile per comunicazioni seriali sincrone sia a tre fili master/slave che a quattro fili per comunicazioni su bus multimaster. In modalità master la frequenza massima del clock è metà del clock di sistema. Utilizzando il  clock interno alla massima frequenza di 25MHz la frequenza massima del clock SPI è di 12.5MHz. È possibile inoltre definire anche la polarità del clock e il tipo di sincronizzazione tra dati e fronti del clock. Anche la periferica SMBUS per comunicazione su bus IIC si può configurare per funzionamento master/slave e può comunicare su bus multimaster. La periferica gestisce tutte le sequenze di sincronizzazione START/STOP del bus IIC e permette di allungare la fase di clock low nella comunicazione con periferiche lente. La periferica CANbus presente in alcune versioni delle famiglie C8051F04x e C8051F06x può comunicare alla velocità massima di 1Mbit/s. Questa periferica ha una propria ram dedicata che può contenere 32 messaggi e gestire i pacchetti inviati e ricevuti sul bus senza richiedere l’intervento della cpu che si limita a trasferire i messaggi in ingresso/uscita nella ram del CAN controller. La periferica svolge le funzioni a livello di protocollo conforme allo standard Bosch 0a e 2.0b e non include il driver hardware  d’interfaccia verso il bus che deve essere aggiunto esternamente. La periferica USB2.0 della famiglia C8051F34x è formata da: un USB transceiver che si può configurare sia per comunicazioni in full speed che per comunicazioni low speed, da una SIE per la gestione del protocollo di comunicazione e da quattro endpoint bidirezionali. Gli endpoint possono supportare le diverse modalità di trasferimento dati previste dal protocollo USB: bulk, interrupt, isochronous. Ad ogni endpoint è associata una memoria buffer che viene utilizzata dalle pipe di IN e OUT. La massima dimensione del packet size dipende dall’endpoint utilizzato e dalla sua configurazione.

Per facilitare la realizzazione della comunicazione USB Silabs fornisce l’ USBexpress development kit che contiene il firmware necessario alla gestione della comunicazione lato device (il micro)  e i driver per la comunicazione lato host realizzato su pc con sistema operativo windows. La comunicazione USB può essere facilmente integrata nell’applicativo PC utilizzando le API della libreria dll fornita nel kit e non richiede conoscenze specifiche del protocollo USB.

Le porte  di I/O

L’alimentazione  dei microcontrollori Silabs è di 3.3V ma tutti gli I/O sono 5V tolerant e possono essere singolarmente configurati come input o come output. Per le uscite digitali si può scegliere sia il driver open collector sia il driver pushpull. Contrariamente a quanto avviene per gli altri microcontrollori, nei micro Silabs non c’è un’associazione diretta tra i pin del micro e le periferiche in esso contenute. L’assegnazione dei pin alle diverse periferiche viene programmata dal progettista che può decidere liberamente quali sono le periferiche che devono essere “portate all’esterno” e quali pin utilizzare per queste periferiche. Per effettuare questa assegnazione si deve programmare la crossbar. La tabella della crossbar (un esempio è riportato in figura 1) è formata da tante colonne quanti sono i  pin disponibili e da tante righe quanti sono gli I/O delle diverse periferiche.

Figura 1: tabella della crossbar per micro C8051F33x. I rettangoli colorati indicano le possibili connessioni degli I/O delle periferiche, elencati nella colonna a sinistra, con i pin del micro indicati nella riga in alto.

Figura 1: tabella della crossbar per micro C8051F33x. I rettangoli colorati indicano le possibili connessioni degli I/O delle periferiche, elencati nella colonna a sinistra, con i pin del micro indicati nella riga in alto.

Figura 2: per la connessione ethernet è possibile utilizzare i componenti della famiglia CP22xx. I componenti includono un MAC 802.3 e un PHY 10base- T,due buffer ram per le code di trasmissione e ricezione e richiedono pochissimi componenti esterni aggiuntivi.

Figura 2: per la connessione ethernet è possibile utilizzare i componenti della famiglia CP22xx. I componenti includono un MAC 802.3 e un PHY 10baseT,due buffer ram per le code di trasmissione e ricezione e richiedono pochissimi componenti esterni aggiuntivi.

Figura 3: lo stack TCP IP fornito da Silabs è il micronet TCP della CMX. Lo stack può essere facilmente configurato con il wizard fornito da Silabs per includere solamente i protocolli necessari all’applicazione limitandolo lo spazio occupato nella memoria flash del microcontrollore.

Figura 3: lo stack TCP IP fornito da Silabs è il micronet TCP della CMX. Lo stack può essere facilmente
configurato con il wizard fornito da Silabs per includere solamente i protocolli necessari all’applicazione limitandolo lo spazio occupato nella memoria flash del microcontrollore.

Dei quadrati colorati indicano tutte le connessioni possibili tra i pin del micro e una data periferica. Le periferiche sono ordinate secondo priorità, la riga più in alto ha priorità maggiore sulla riga più in basso. L’assegnazione degli I/O avviene in modo sequenziale partendo dalla prima colonna seguendo la priorità delle periferiche. Pertanto la periferica abilitata a priorità maggiore occuperà la prima colonna cioè il primo pin disponibile, la periferica successiva avrà a disposizione  i pin a partire dal secondo e così via. La tabella di assegnazione comprende tutti i pin del micro, se necessario si possono escludere alcuni di questi pin dalla tabella utilizzando i  registri PxSKIP. La cross bar si configura normalmente all’avvio dell’applicazione scrivendo nei registri SFR XBARx. Dopo aver configurato i registri XBARx si deve anche abilitare la crossbar per rendere effettive le connessioni.

I timers

Ogni modello può utilizzare tre timers hardware a 16 bit che diventano cinque nelle versioni più complete. I  timers si possono configurare sia come timer che come counter, la struttura del timer è quella standard dei micro 8051, ma al contrario di quanto avviene per l’8051 standard i timers non sono vincolati per fornire il clock alle periferiche di comunicazione UART/SPI/IIC.  Il timer è solo una delle possibili opzioni ma il clock per queste periferiche si può ottenere direttamente dal clock di sistema con opportuni prescaler. Oltre ai timers all’interno dei micro Silabs è sempre presente almeno una periferica PCA con tre canali con cui è possibile realizzare funzioni conteggio o capture su evento esterno, caputre/compare oppure output pwm a 8 e 16bit.

Figura 4: la scheda di valutazione del componente CP22xx e la home page del web server.

Figura 4: la scheda di valutazione del componente CP22xx e la home page del web server.

L’oscillatore

Tutte le famiglie di micro possono utilizzare un oscillatore interno oppure un oscillatore con quarzo esterno. Mentre nelle prime versioni l’oscillatore interno aveva una precisione del 20%, nelle versioni più recenti la precisione è del 2%. Normalmente l’oscillatore è impostato a una frequenza massima di 25Mhz. In alcuni modelli è possibile, tramite un PLL, aumentare la frequenza massima a 50MHz o a 100MHz. I registri  di configurazione dell’oscillatore permettono di scegliere quale oscillatore utilizzare e soprattutto di modificare la scelta al volo durante l’esecuzione. Questa funzione è molto utile in applicazioni che richiedono un basso consumo poiché si può utilizzare l’oscillatore interno alla massima velocità durante la fase ON del processo e commutare il clock sull’oscillatore esterno, con quarzo ad esempio a 32KHz, durante la fase OFF mettendo il micro in idle mode e riducendo così i consumi.

Software e sistemi  di sviluppo

Ogni micro integra al suo interno una periferica jtag per debug ed è perciò un potenziale sistema di sviluppo. Le schede di sviluppo della Silabs utilizzano un normale microcontrollore montato sulla scheda completa di connettori e area millefiori per facilitare la realizzazione di hardware dedicato. L’interfaccia di debug inizialmente era standard JTAG a quattro fili. Ora è stata sviluppata l’interfaccia proprietaria C2 a due fili clock e dati bidirezionale. Per la connessione al personal computer è possibile utilizzare l’adattatore EC2 che converte l’interfaccia seriale nell’interfaccia C2 oppure il convertitore  USB per convertire l’interfaccia da USB a C2. Ogni sistema di sviluppo comprende anche un IDE con compilatore C che permette di programmare ed eseguire il debug del componente collegato al PC tramite porta seriale o USB. Essendo però un micro con core 8051 è possibile utilizzare moltissimi compilatori anche free che possono essere personalizzati per l’utilizzo con i componenti silabs. Un interessante tool for nito con l’ambiente di sviluppo è il configuration  wizard che aiuta il  progettista a destreggiarsi tra le moltissime opzioni degli SFR dei micro Silabs. In base al modello selezionato  il software, per ogni registro SFR, permette di scegliere in modo semplice e intuitivo tra le diverse opzioni di configurazione. Al termine della configurazione  il wizard può generare il codice per l’inizializzazione dei registri SFR sia in linguaggio C che assembler.

 

Figura 5: alcuni modelli del micrcontrollore Silabs si interfacciano alla memoria flash tramite una coda di prefetch del codice e una branch table. Con questa interfaccia si raggiungono velocità di picco di 100Mips.

Figura 5: alcuni modelli del micrcontrollore Silabs si interfacciano alla memoria flash tramite una coda di prefetch del codice e una branch table. Con questa interfaccia si raggiungono velocità di picco di 100Mips.

 

 

 

Scrivi un commento

EOS-Academy