Micro-recensione della nuova FEZ-Cerberus/FEZ-Cerb40

  • RSS
  • Add To My MSN
  • Add To Windows Live
  • Add To My Yahoo
  • Add To Google
Post di Lorenzo Maiorfi lunedì 26 marzo 2012 22:24:26
Valuta questo articolo 2 Voti

C’è un certo fermento in casa GHI: dopo non molto tempo dal rilascio della nuova mainboard Gadgeteer open-source (sia per il design hardware che per il porting) FEZ-Hydra, ecco pubblicata, un po’ inaspettatamente considerato il rischio di sovrapposizione con le altre schede a catalogo, una nuova scheda (anzi due) della famiglia FEZ: la FEZ-Cerberus.

Diciamo subito che non si tratta di una scheda veramente inedita, nel senso che il 95% del porting basato sullo stesso hardware è parte del Porting Kit 4.2, in particolare delle due soluzioni “stock” STM32Stamp e MCBSTM32E, sviluppate dalla svizzera Oberon. Una scheda custom basata sul primo dei due porting è stata inoltre presentata in questo stesso Blog qualche mese fa (vedi qui). Una delle differenze sicuramente più significative riguarda l’adozione però di una differente famiglia di microcontrollore, il STM32F4 basato su core Cortex-M4 al posto del STM32F1 basato su Cortex-M3. Va inoltre detto che si tratta della prima scheda GHI equipaggiata con la versione 4.2 del .NET Micro Framework, aspetto un po’ sorprendente in considerazione del fatto che su Codeplex il rilascio RTM è marcato 4 Ottobre 2011.

Come anticipato, le edizioni della scheda sono in realtà due: una (la FEZ-Cerberus) è realizzata come mainboard Gadgeteer mentre l’altra (la FEZ-Cerb40, il cui nome sembrerebbe fare riferimento ai 40 pin) è stata sviluppata come un modulo OEM dalle dimensioni veramente molto compatte (è più piccola di una FEZ-Mini!) e apparentemente destinata ad un uso meno prototipale o didattico. Basti ad esempio pensare che alcuni componenti non sono stati neanche saldati (ma previsti sul PCB) per ridurre i costi della scheda (sul catalogo GHI in vendita a soli $24!). L’alimentazione, ad esempio, non viene erogata da un regolatore on-board, né dalla porta USB, ma deve essere fornita, già regolata, direttamente ai pin del microcontrollore. Analogamente non è stato saldato il quarzo da 32KHz o altri tipi di “accessori” tipicamente reperibili su questo tipo di schede, come un pulsante di reset o un jumper per attivare il bootloader.

Non c’è stato ancora tempo per un’analisi approfondita e per stessa ammissione di GHI il porting è ancora molto acerbo (la gestione di molte periferiche è ad uno stato poco più che embrionale), ma al di là dell’effettivo interesse per gli aspetti didattici di un prodotto che fin dalla nascita viene pubblicato già corredato dal progetto Eagle del PCB e dei sorgenti del porting, l’aspetto che dai primi test ci ha veramente stupito è stato quello relativo alla velocità.

Prendendo a riferimento uno dei benchmark più tipici nella verifica della performance di un microcontrollore (il toggling continuo di una porta di uscita digitale), abbiamo messo a confronto la FEZ-Cerb40 con la scheda che utilizziamo più spesso nei nostri progetti, la FEZ-Cobra, utilizzando come firmware di test il seguente:

   1: public class Program
   2: {
   3:     const int CYCLES = 1000000;
   4:  
   5:     static OutputPort _led = new OutputPort((Cpu.Pin)FEZ_Pin.Digital.LED, false);
   6:  
   7:     public static void Main()
   8:     {
   9:         DateTime dtnow = DateTime.Now;
  10:  
  11:         Debug.Print("Start...");
  12:  
  13:         for (int i = 0; i < CYCLES; i++)
  14:         {
  15:             _led.Write(!_led.Read());
  16:         }
  17:  
  18:         Debug.Print("...Stop!");
  19:  
  20:         TimeSpan ts = DateTime.Now - dtnow;
  21:  
  22:         Debug.Print("Tempo " + ts.Minutes + "m " + ts.Seconds + "s");
  23:  
  24:         Thread.Sleep(Timeout.Infinite);
  25:     }
  26: }

Dove per la FEZ-Cerb40, per la quale non esistono ancora neanche Assembly con la mappatura simbolica dei pin, la porta digitale era stata dichiarata con il seguente snippet (le porte dell’STM32 sono denominate Port A, Port B, Port C e così via ed i registri che mappano i relativi valori sono dislocati rispetto all’indirizzo base del bit 0 della porta A, PA0, su indirizzi consecutivi, così che PA0 è mappato sul Cpu.Pin 0, PA1 sull’1, PA15 sul 15, PB0 sul 16 e così via):

   1: static OutputPort _pa0 = new OutputPort((Cpu.Pin)0, false);

I risultati, veramente sorprendenti, hanno visto la FEZ-Cobra completare il test in 3 minuti e 22 secondi, contro i soli 19 secondi della FEZ-Cerb40! Niente male, eh?

Se volete qualche dettaglio in più potete fare riferimento ai seguenti link:

re: Micro-recensione della nuova FEZ-Cerberus/FEZ-Cerb40

lunedì 26 marzo 2012 22:52:39 Marco Lai

Mi sembra ottima come soluzione, viste anche le performance e il costo, potrebbe essere una diretta concorrente di Arduino, forse è proprio questa la strategia di GHI?

I commenti su questo intervento sono chiusi.