Corso su ARM: scopriamo la FRDM-KL46Z

FRDM-KL46Z

Benvenuti alla quarta puntata del nostro corso su piattaforma ARM Cortex-M0+. Come vi avevamo preannunciato nelle scorse puntate, sia nell'introduzione sia nella scorsa puntata, oggi parleremo della scheda. Come fatta? Come funziona? Che cos'ha di particolare ed interessante? Vediamolo insieme.

Dopo tre settimane di intenso studio dell'architettura ARM, della sua storia e delle sue peculiarità, siamo finalmente arrivati al momento in cui iniziamo mettere le mani sulla scheda, vederla, toccarla e capire di che cosa stiamo effettivamente parlando.
Scopo delle prossime puntate di questa seconda fase del nostro corso sarà quello di capire come fare a lavorare con la scheda, come metterci le mani per programmarla e quindi, di fatto, entrare nella scheda. Per il momento però accontentiamoci di guardarla e di studiarla nel suo insieme.

FRDM-KL46Z

Il nome è abbastanza impronunciabile ma l'interesse che suscita è enorme. Stiamo parlando di una piattaforma di sviluppo, naturalmente targata Freescale, che si dimostra essere l'ideale per la prototipazione rapida di applicazioni basati sull'utilizzo di microcontrollori. L'hardware della Freescale Freedom KL46Z è semplice ma estremamente sofisticato; il semplice fatto che si lavori con microcontrollore Kinetis serie L, per chi ha un minimo di familiarità con l'ambiente Freescale, è sufficiente per spiegare quante siano le possibilità di interazione e quante famiglie di dispositivi possano essere utilizzate per effettuare sia progetti sia valutazione. Per chi non lo dovesse sapere, la FRDM-KL46Z  può essere utilizzata per lavorare con: KL46, KL36, KL26 e KL16.
Al suo interno la scheda contiene il microcontrollore MKL46Z256VLL4, un dispositivo che opera ad una frequenza massima di 48MHz (per intenderci, stiamo parlando di tre volte la frequenza di Arduino UNO), oltre ad implementare una serie di interessantissime features che vedremo tra un attimo.
La scheda, tra le sue caratteristiche di maggior pregio, ha lo standard OpenSDA, forma contratta di "open standard embedded serial and debug adapter", decisamente più difficoltosa da ricordare. Il nome per esteso, però, spiega tutto e permette di intuire l'offerta di diverse opzioni sia per le comunicazioni seriali sia per il flash programming sia, infine, per il debug run-control. E la possibilità di realizzare debug interno è di per sè stessa una caratteristica che vale oro; tempo e soldi risparmiati nell'acquisto di un debugger esterno, proprio come con Arduino, ma qui potrete fare debug a livello professionale e aumentare le vostre conoscenze.

Tra le altre caratteristiche di pregio ci sono: 256KB di memoria flash, 32KB di RAM,  controller USB, controller per segment LCD ed altro. Ma passiamo in rassegna queste caratteristiche una alla volta.

Le features

La dotazione hardware completa della scheda prevede:

  • MKL46Z256VLLZ4 da 48 MHz, 256KB Flash, 32 KB RAM e package 100LQFP;
  • Open SDA;
  • modulo LCD 4 digit segment;
  • Capacitive touch slider;
  • sensore di luminosità ambientale;
  • accelerometro MMA8451Q;
  • magnetometro MAG3110;
  • 2 LED;
  • 2 pulsanti;
  • diverse alimentazioni possibili: USB, batterie a bottone, sorgenti esterne;
  • power-measurement access points;
  • connettori di I/O compatibili col layout di Arduino R3;
  • interfaccia di debug SDA programmabile.

Riguardo quest'ultima caratteristica, esistono diverse applicazioni cui questa funzionalità può servire: archiviazione di massa e gestione della relativa interfaccia, P&E Debug interface (relativa compatibilità con IDE tools), l'interfaccia CMSIS-DAP (nuovo standard ARM per piattaforma Embedded) e applicazioni di data logging.

Nel particolare

Questo per quanto riguarda le impressioni generali ma adesso inizia una sezione di questo articolo in cui iniziamo a vederla nel dettaglio, analizzandone gli schemi elettrici e l'estetica per individuare tutto quello di cui abbiamo parlato finora.
La prima immagine che vi mostriamo non è altro che il diagramma a blocchi del sistema.

i principali componenti vengono invece individuati nella figura che segue.

Per quanto riguarda il microcontrollore, le sue features sono:

  • ARM Cortex-M0+ a 32 bit;
  • frequenza operativa: 48 MHz;
  • 256 kB di memoria flash;
  • 32 kB di memoria RAM;
  • Power management and mode controllers;
  • unità di wakeup low-leakage;
  • engine di bit manipulation per operazioni di read-modify-write su periferiche;
  • controller Direct Memory Access (DMA);
  • timer watchdog Computer Operating Properly (COP);
  • FLL and PLL per la generazione del clock del sistema;
  • clock di riferimento interno a 4 MHz e 32 kHz;
  • supporto per cristalli esterni;
  • oscillatore RC low-power ad 1 kHz per RTC e COP.

Tra le periferiche analogiche abbiamo:

  • supporto DMA per ADC SAR a 16 bit;
  • DAC a 12 bit;
  • compratore high speed.

Per quanto riguarda le comunicazioni, ci sono:

  • chip Sound(I2S) Audio Interface(SAI) integrato;
  • 2 SPI da 8 bit;
  • controller USB dual-role (con transciver FS/LS);
  • regolatore di tensione USB;
  • due moduli I2C;
  • 1 UART low-power e 2 moduli UART standard.

I timer sono:

  • 1 modulo Timer/PWM da 6 canali;
  • 2 moduli Timer/PWM da 2 canali;
  • Periodic Interrupt Timer (PIT) da 2 canali;
  • low-power Timer (LPT);
  • system tick timer.

L'interazione uomo macchina (HMI) è gestita grazie alle seguenti caratteristiche:

  • controller per segment LCD  (massimo 8X47 o 4×51);
  • controller GPIO;
  • modulo hardware di interfaccia per input capacitive touch sense.

Vediamoli un po' meglio e più da vicino.

A cominciare dai clock.
I microcontrollori Kinetis KL46  contengono al loro interno degli oscillatori compatibili con frequenze operative comprese all'interno di tre range distinti: 32-40 kHz (low freq. mode), 3-8 MHz (high freq. mode, low range) e 8-32 MHz (high freq. mode, high range). E, come abbiamo visto, su questa scheda la frequenza di lavoro è di 8 MHz.

Per quanto riguarda l'interfaccia USB, i microcontrollori Kinetis KL46  utilizzano un controller USB dual-role con transceiver on-chip full-speed/low-speed. VREGIN deve essere alimentato per abilitare la circuiteria interna dell'USB. Il controllo avviene tramite il jumper indicato con "J7".

Abbiamo già parlato delle porte seriali; i segnali relativi l'interfaccia primaria sono PTA1 UART0_RX e PTA2 UART0_TX e sono connessi all'OpenSDA.

Come tutte le schede che si rispettino, anche questa prevede la funzione di RESET; su questa scheda ad essa si accede tramite un pulsante, SW2, ed anche tramite OpenSDA. Il pulsante può essere utilizzato per forzare l'evento di RESET dall'esterno, indirizzato direttamente al microcontrollore.
Questo particolare segnale può essere anche utilizzato per forzare il circuito OpenSDA nella modalità bootloader.

E dal momento che abbiamo iniziato a parlare di questa interfaccia, continuiamo con le funzioni di debug. Per effettuare questo genere di operazioni l'unica interfaccia su tutti i dispositivi Kinetis serie L effettivamente completamente disponibile è la Serial Wire Debug (SWD). Come dicevamo, qui il debug sarà interno, nessun bisogno di tool o strumenti ulteriori. Il controllore primario di questa interfaccia sulla scheda di cui stiamo parlando è l'OpenSDA.
Ciò nondimeno, esiste un connettore, J11, da 10 pin (0.05'') non utilizzato che permette l'accesso ai singoli segnali SWD. Il Samtec FTSH-105-02-F-D, o altri connettori compatibili, possono essere raggiunti a J11 per permettere l'accesso tramite cavi esterni.

Per quanto riguarda gli LCD, FRDM-KL46Z  utilizza un display a quattro cifre, il LUMEX LCD-S401M16KR, di dimensioni 4×8. Le connessioni vengono mostrate di seguito:

Avevamo anche accennato, poco fa, alla possibilità di utilizzare sensori capacitivi touch; ci sono due segnali Touch Sense Input (TSI), TSI0_CH9/PTB16 e TSI0_CH10/PTB17, che sono connessi ad elettrodi capacitivi configurati come slider. Il software Freescale Touch Sense  fornisce una libreria che permette di lavorare proprio su questo tipo di struttura.

Avevamo parlato anche di accelerometri e magnetometri, due in particolare: l'MMA8451Q  ed il MAG3110. Il primo è un accelerometro triassiale con interfaccia I2C e due segnali GPIO. Di default, il suo indirizzo I2C è 0x1D (con SA0 alto).

MMA8451Q

KL46

SCL

PTE25/TPM0_CH1/I2C0_SDA

SDA

PTE24/TPM0_CH0/I2C0_SCL

INT1_ACCEL

PTC5/LLWU_P9

INT2 _ACCEL

PTD1 (condivisa con INT2_MAG)

Il magnetometro è anch'esso triassiale ed anche per comunicare con questo viene utilizzato il bus I2C.

MAG3110

KL46

SCL

PTE25/TPM0_CH1/I2C0_SDA

SDA

PTE24/TPM0_CH0/I2C0_SCL

INT1_MAG

PTD1 (condivisa con INT2_ACCEL) può essere isolato rimuovendo R50

Per quanto riguarda i LED presenti sulla scheda c'è ben poco da dire, in verità: uno è verde, l'altro è rosso, sono due e le connessioni sono davvero molto semplici: le connessioni al verde sono PTE29/TPM0_CH2 mentre al rosso c'è PTD5.

Spostiamoci adesso su un argomento decisamente più interessante ovvero i connettori di I/O: il microcontrollore MKL46Z256VLL4 ha un package LQPF da 100 pin. Alcuni di questi vengono utilizzati dalla circuiteria sulla scheda ma molti sono connessi direttamente ad uno dei quattro header di I/O. I pin del microcontrollore KL46 prendono il nome in funzione della specifica porta a cui fanno riferimento e sono ordinati allo stesso modo. Questo vuol dire sostanzialmente che, tanto per fare un esempio, il primo pin della porta A si chiamerà semplicemente PTA1.

Ed ora veniamo ad un argomento che sicuramente piacerà a molti utenti di questo blog ma sicuramente anche a molte persone in giro per il mondo: la compatibilità con Arduino. Si vede già grazie alle immagini che vi abbiamo mostrato, ma vale la pena di spenderci un paio di minuti a parlarne. La compatibilità è pressoché totale rispetto a ciascuna scheda di espansione, che la comunità globale chiama shield, che possa essere utilizzata o che sia stata progettata per Arduino. Ma non soltanto per per la versione UNO R3 ma anche per tutte quelle che sono compatibili.
Naturalmente anche le schede pensate per i cloni di Arduino potrebbero essere compatibili dato che tutto ciò che serve era semplicemente avere la stessa disposizione degli header.

La scelta nasce, è facile immaginarlo, dal fatto che garantire questa compatibilità potrebbe più facilmente portare utenti già esperti di Arduino ad avvicinarsi ad una piattaforma decisamente più performante. Nel contempo, tenendo tutto ben saldo rispetto ai progetti che un novizio o un neofita stanno studiando, la possibilità di iniziare su una scheda più performante sicuramente offre prospettive più interessanti.
Da questo punto di vista, insomma, almeno secondo noi, una scelta davvero vincente.

Adesso parliamo dell'alimentazione.
Come abbiamo detto in precedenza, esistono diverse possibilità per alimentare la scheda: è possibile che venga alimentata direttamente tramite la connessione USB, il pin VIN nell'header I/O, grazie all'utilizzo di una batteria a bottone oppure da una alimentazione esterna alla scheda con tensioni comprese tra 1.71 e 3.6V attraverso il pin 3.3V sull'header I/O.
L'alimentazione via USB e quella tramite VIN sono regolate al valore 3.3V da un regolatore lineare sulla scheda che fornisce l'alimentazione principale. Le altre sorgenti non sono, viceversa, regolate direttamente sulla scheda. Nella tabella che segue, eventuali altri ulteriori informazioni sull'alimentazione.

Source

Range

OpenSDA Operational?

Regolato?

OpenSDA USB

5V

Yes

Yes

K20 USB

5V

No

Yes

VIN Pin

4.3-9V

No

Yes

3.3V Pin

1.71-3.6V

No

No

Coin Cell Battery

1.71-3.6V

No

No

Vale la pena di notare che l'OpenSDA è operativo soltanto quando c'è la connessione USB perché in quel caso l'OpenSDA è alimentata. Tuttavia la circuiteria di protezione è disposta in maniera tale da permettere che ci siano più sorgenti disposte contemporaneamente ad alimentare la scheda.

(fai click per ingrandire)

 

Power Supply Name

Descrizione

P5-9V_VIN

Alimentato da VIN (J9 pin 16). Uno Schottky garantisce la protezione.

P5V_SDA

Alimentato dal connettore OpenSDA USB. Uno Schottky garantisce la protezione.

P5V_KL46Z

Alimentato dal connettore KL46Z USB. Uno Schottky garantisce la protezione.

P3V3_VREG

Regulated 3.3V supply. Prende l'alimentazione da P3V3 attraverso lo Schottky.

P3V3_BATT

Batteria a bottone. Prende l'alimentazione da P3V3 attraverso lo Schottky.

P3V3

Main supply rail. Può essere alimentato da P3V3_VREG, P3V3_BATT, o direttamente dal pin 8 di J9.

P3V3_KL46Z

KL46Z MCU supply. J17 fornisce un modo comodo di misurare il consumo.

P3V3_SDA

OpenSDA circuit supply. J9 fornisce un modo comodo di misurare il consumo.

P5V_USB

5V nominali dall'header I/O (pin 10 di J3). Fornito sia da P5V_K20D50M sia da P5V_OSDA attraverso la protezione dello Schottky.

E finalmente entriamo nel merito dell'OpenSDA. Si tratta, come anticipato, di un open-standard per debug. Esso permette le comunicazioni seriali ed il debug attraverso un Host USB ed un processore (target) embedded. L'hardware è basato su microcontrollore della famiglia Kinetis K20 e dispone di 128 kB di memoria flash embedded e, naturalmente, del controller USB. L'OpenSDA dispone di un bootloader per mass storage device (MSD), che permette un meccanismo semplice e veloce per caricare differenti applicazioni come flash programmers, interfacce di debug run-control e conversione serial-to-USB.

Nella figura che segue, il diagramma a blocchi dell'OpenSDA.

Nella figura che segue vi mostriamo la sezione dello schematico in cui viene realizzata la connessione dell'interfaccia USB:

Qui di seguito, invece, le connessioni al microcontrollore dell'interfaccia OpenSDA:

Un breve accenno alla memoria Flash:

Nella prossima figura, la sezione dello schema che descrive le connessioni dell'accelerometro:

ed anche quelle del magnetometro:

Come si può vedere, queste ultime due sono pressochè semplici reti di polarizzazione dal momento che l'interfaccia in uso è la I2C che prevede collegamenti diretti dei soli SCL ed SDA.

Conclusioni

Che dire, questa analisi dovrebbe avervi dato un'idea abbastanza chiara di quale sia il grado di validità e lo spessore di questa scheda. La scelta di renderla compatibile con il più famoso e diffuso Arduino è stata certamente molto intelligente perché lascia ampio spazio all'iniziativa e alla creatività di tante persone che nel mondo stanno già lavorando ed imparando a prendere confidenza con strumenti altrimenti molto specializzati e specialistici. Lo scopo di questa scheda è fornire grandi potenze di calcolo anche a coloro che hanno poca dimestichezza con la progettazione, con i microcontrollori e così via dicendo.

Pensiamo sarà certamente entusiasmante per molti di voi poterci lavorare. Ma soprattutto siamo certi che ve la contenderete nel nostro Review4U 2.0.

Nella prossima puntata, o meglio nelle prossime due, analizzeremo tutte le soluzioni software che possono permettere al programmatore di ottimizzare i tempi di lavoro e creare codici su questa e su altre schede. Alla prossima.

 

                    

Per ulteriori informazioni potete scrivere a questa email: ggalletti@arroweurope.com

8 Comments

  1. Giorgio B. 16 ottobre 2013
  2. Marven 16 ottobre 2013
  3. Piero Boccadoro 20 ottobre 2013
  4. Piero Boccadoro 20 ottobre 2013
  5. riccardo.chiappa.3 23 ottobre 2013
  6. Piero Boccadoro 23 ottobre 2013
  7. riccardo.chiappa.3 23 ottobre 2013
  8. Piero Boccadoro 25 ottobre 2013

Leave a Reply