Home
Accesso / Registrazione
 di 

Recensione evaboard STM32-Discovery (CORTEX-M3)

Recensione evaboard STM32-Discovery (CORTEX-M3)

In questo articolo (Review4U) parlerò di un'interessante scheda di valutazione, la STM32-DISCOVERY, della ST Microelectronics, che monta un processore a 32-bit della famiglia ARM.

La scheda, senza contenitore come di regola, ha dimensioni di 43x84mm, ed è costituita da un PCB doppia faccia. Il microprocessore (il "target") montato è il STM32F100RBT6B, con ben 128k di FLASH e 8k di RAM, funzionante fino ad un massimo teorico di 24MHz (più avanti vedremo come overcloccare leggermente il micro).
Insieme al micro "target", è montato un altro micro della stessa famiglia, un STM32F103C8T6, che ha il compito di gestire il debugger USB...è incluso un vero debugger hardware, chiamato ST-Link, che può essere usato anche con schede diverse. Allo scopo occorre rimuovere i due jumper CN3 e collegare la scheda esterna al connettore CN2. Naturalmente i processori supportati sono solo gli ST che utilizzano il protocollo SWD. Viceversa, se si ha a disposizione un debugger JTAG (ad esempio il J-Link della IAR/Segger), si può sempre collegare ai relativi pin del target e non utilizzare l'ST-Link.

Tornando alla scheda, è comoda la scelta di montare pin-strip "lunghi", che sporgono anche dal lato componenti e che sono eccellenti per fissare le sonde dell'oscilloscopio.

L'alimentazione sia per il micro target che per il debugger viene prelevata direttamente dall'USB, tramite riduzione a 3.3V effettuata dal regolatore LD1117. Completano la dotazione due pulsanti, di cui solo uno utilizzabile per i nostri programmi, mentre l'altro è il reset, e 4 LED, di cui uno sull'alimentazione, uno di pertinenza del debugger e due a disposizone del nostro target.
Per finire è da segnalare il montaggio del quarzo su zoccolo per una facile e indolore sostituzione.

Il microcontrollore dell'evaboard STM32-Discovery (CORTEX-M3)

Il microcontrollore appartiene alla estesissima famiglia ARM, sottofamiglia Cortex, versione M3. Si tratta di un processore a 32 bit reali, che ha l'interessante caratteristica di utilizzare un set di istruzioni a lunghezza ridotta, detto Thumb-2, con prestazioni spesso pari o superiori ai set di istruzioni full 32-bit precedenti, e con il grande vantaggio di minor spazio occupato dal codice. Trattare in poche righe una famiglia di micro così estesa è impossibile, rimando quindi alle informazioni più dettagliate presenti sul web. Come curiosità, si stima che circa il 98% dei milioni di telefoni cellulari costruiti ogni anno, monti al proprio interno un micro della famiglia ARM.

TOOLS E SOFTWARE
La ST tramite i suoi partner mette a disposizione ben tre diversi sistemi di sviluppo, naturalmente con limitazioni di vario genere: IAR, KEIL e ATOLLIC. Per motivi personali ho selto il compilatore IAR, che è in grado di compilare e linkare codice C e assembler fino ad un massimo di 32kbytes. La versione che ho scaricato, previa registrazione gratuita sul sito IAR, è la 6.10.3 per ARM.

LA DEMO
Per testare questa scheda, ho scritto un breve programmino che simula un segnale audio digitale. In particolare ho realizzato un simulatore di SPDIF. Lo SPDIF è lo standard consumer analogo dello standard professionale AES-EBU, che trasmette i dati audio in DIGITALE su un'unico filo. Entrambi gli standard sono descritti in dettaglio nella norma IEC958 e anche, più approssimativamente, in documenti free reperibili in rete.

Molti PC, DVD, TV, hanno un'uscita SPDIF che può "appoggiarsi" per il trasferimento, ad un cavo ottico oppure coassiale (rame). Più difficile è trovare un ingresso SPDIF: questo è tipicamente presente solo su amplificatori AV (Audio/Video). Le velocità di campionamento utilizzate sono di solito tre: 32kHz, 44.1kHz (standard CD), e 48kHz. Per il mio demo ho scelto la frequenza maggiore, cioè 48kHz. Ogni campione audio, che può essere lungo fino a 20 o 24 bit, occupa 32 bit fissi, che diventano 64 dopo la necessaria codifica in Biphase Mark, e così divisi:

    4 bit di preambolo. Non vengono codificati BM, ma diventano comunque 8-bit fissi.
    4 bit di dati ausiliari (possono essere usati per aumentare a 24 i bit totali del campione audio). Codificati BM diventano 8 bit.
    20 bit di campioni. Codificati BM diventano 40 bit.
    1 bit di Validity. Codificato BM diventa 2 bit. Se uguale a 1, il campione viene scartato.
    1 bit di Subcode Data. Codificato BM diventa 2 bit.
    1 bit di Channel Status Information. Codificato BM diventa 2 bit.
    1 bit di Parity. Codificato BM diventa 2 bit. Calcolato come parità degli ultimi 28 bit originali, escludendo cioè i primi 4 bit del preambolo.

La codifica Biphase Mark è necessaria per due motivi: in primo luogo fa sì che il flusso di dati risultante abbia valor medio nullo, e questo lo rende trasmissibile per mezzo di trasformatori di isolamento (che come noto, non trasferiscono la continua). Inoltre permette di risincronizzare facilmente il clock del ricevitore, in quanto presenta sempre un certo numero di transizioni 0->1 e viceversa. Nel flusso infatti si troveranno massimo 2 bit consecutivi identici, tranne nello speciale preambolo dove se ce ne sono tre.

La codifica BM dice che 1 bit originale va codificato in 2 bit seguendo questa semplice regola: il primo bit BM è sempre l'opposto dell'ultimo bit trasmesso, mentre il secondo bit BM è uguale al primo bit BM se il bit originale è 0, oppure opposto al primo bit BM se il bit originale è 1. Ad esempio se volessimo trasmettere i bit 001, supponendo l'ultimo bit precedente a 0:

    bit da trasmettere -> 0 0 1
    flusso BM -> xx xx x0 11 00 10
    ^ ultimo bit precedente

Il flusso SPDIF si può immaginare come una Matrioska: è cosituito da tanti Blocks consecutivi, ciascuno dei quali è costituito da 192 frames, a loro volta contenenti 2 canali A e B (Left e Right), ciascuno dei quali è costituito da 32 bit (Time Slots), cioè 64 bit dopo codifica BM.


(Immagine: Alessio Damato. File is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported)

Eseguendo un semplice calcolo si può trovare il bit rate complessivo:
64 bit codificati BM x 2 canali x 48000 campioni/sec = 6144000 bit/sec

Esistono tre tipi di preambolo: due per il subframe A (Left) e uno per il subframe B (Right).

I tre preamboli sono denominati:

    'B' di valore 0xe8. Indica l'inizio di un Block costituito da 192 Frames. Indica il canale A.
    'M' di valore 0xe2. Indica un subframe per il canale A, che non è il primo del Block.
    'W' di valore 0xe4. Indica un subframe per il canale B.

Il flusso sarà quindi come segue:

1 2 3 ... 192
BW MW MW ... MW
BW MW MW ... MW
BW MW MW ... MW

Cioè il primo frame di un blocco sarà sempre BW, cioè 64 bit con preambolo B e 64 bit con preambolo W, poi ci saranno 191 frames di tipo MW, cioè 64 bit con preambolo M e 64 bit con preambolo W. Il ciclo si ripete ogni 192 frames.

Nota: la norma IEC958 definisce questi stessi preamboli come X, Y e Z.

Il programma implementa un semplice DDS software,con Phase Accumulator a 32 bit e tabella del seno a 10 bit. Rimando a riferimenti in rete per la spiegazione del DDS.

Per generare un flusso a 6.144MHz, ho utilizzato la SPI del STM32, ma ho dovuto cambiare il cristallo, originariamente 8MHz, per ottenere esattamente questa frequenza di flusso. Nella mia applicazione ho utilizzato un quarzo a 7.68MHz, diviso inizialmente per 5 ottenendo 1.536MHz, e poi moltiplicato per 16 dal PLL interno per ottenere 24.576MHz del clock principale. Come si può vedere controllando il datasheet, il micro è leggermente overcloccato (max 24MHz) ma questo non ha dato problemi di sorta. La SPI utilizza il clock principale diviso 4.

Naturalmente sono possibili molte altre combinazioni quarzo/divisori/moltiplicatori, con un foglio di calcolo è semplice e divertente ottimizzare la scelta. Purtroppo non è possibile ottenere con un solo cristallo tutte le tre frequenze standard 32kHz, 44.1kHz e 48kHz, a causa soprattutto della "stranezza" del 44.1kHz.

La SPI del micro è settata come MASTER (il micro genera il clock), e 16-bit, così da ridurre il carico di lavoro del micro.

L'uscita SPDIF viene prelevata dal pin PA7-MOSI, tramite un condensatore da 100nF, in serie ad una resistenza da 390 ohm chiusa a massa con una 94 ohm (2x47ohm in serie). Il condensatore serve ad eliminare la continua dal segnale emesso dal micro, che è compreso tra 0 e 3.3V, e quindi ha un valore medio di 1.65V. Il partitore resistivo attenua il segnale da 3.3Vpicco-picco a 0.5-0.6Vpp come richiesto dallo standard SPDIF, con impedenza di uscita di circa 75 ohm.
Per la connessione all'ampli sarebbe necessario un cavo coassiale da 75 ohm, ma un normale cavetto, schermato o non, funziona perfettamente (purchè non troppo lungo).

Su YouTube è reperibile il video del test del sistema completo. Notare che il mio ampli fa lampeggiare la scritta DIGITAL quando non c'è un flusso digitale in ingresso, mentre quando ne riconosce uno, la scritta diventa fissa e in alto a sinistra il canale commuta da A (analogico) a C1 (coaxial 1).

POSSIBILI SVILUPPI E CONCLUSIONI
Partendo da questa base, è possibile realizzare:

    - generatore audio portatile con uscita digitale, per testare impianti A/V.
    - generatore audio con uscita analogica, collegando un convertitore SPDIF->analogico come gli UDA1350 o UDA1351 della NXP.
    - analizzatore di frequenza, aggiungendo un microfono electret di qualità e relativo ampli.
    - riproduttore musicale digitale di alta qualità, memorizzando ad esempio i files in formato lossless (WAV, FLAC, ecc) su SD card connessa alla seconda porta seriale.
    - utilizzo del DMA interno per ridurre ulteriormente il carico del micro.

Che dire altro, con soli 11€+IVA vi portate a casa un'evaboard con microprocessore a 32-bit reali e 24MHz, con debugger real-time incluso, tool di sviluppo gratuiti...pensateci bene prima di montare a mano il solito micretto!

Ringrazio la Redazione per l'opportunità.

AllegatoDimensione
SPDIFFY - F100.zip11.73 KB

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog
ritratto di stewe

Una scheda a 32bit sarebbe

Una scheda a 32bit sarebbe un bel passo avanti rispetto ai classici 8bit dell'hobbysta... articolo interessante!

ritratto di Fabrizio87

l 8 bit è ancora molto

l 8 bit è ancora molto diffuso anche nei prodotti commerciali,
a volto non serve di piu che 8 bit o 4 bit quando le logiche sono molto semplici.

ancora nessuna ricezione su le FPGA?

ritratto di giuskina

spdif o uscita ottica?

quale delle due è "migliore" in campo musicale, nella fattispecie nell'home entertainment (parlo di xbox360 e amplificatore yamaha HTR-6030)

ritratto di rberna

Ad oggi non c'è differenza

Ad oggi non c'è differenza di qualità. La fibra ottica introduce un jitter maggiore, e i vecchi sistemi che non effettuavano il reclocking dei dati (non avendo buffer), suonavano peggio.
Ora no.

Personalmente la fibra ottica la trovo scomoda (si stacca sempre, che due oo).

Però se hai dei giri di massa il coassiale può introdurre del rumore nelle parti analogiche (non nel flusso digitale naturalmente).

Inoltre con il coassiale si va in genere + lontano, una fibra dopo 3m è già alla frutta (parlo di quelle cheap).

Ciao

ritratto di SA

overclock

Ho overcloccato l'STM32 Value line fino a 48 MHz 0 wait states, dovendo il costruttore garantire il funzionamento in tutto il range di tensione e temperatura questo e' possibile a temperatura ambiente e con tensione di alimentazione di 3.3V!

ritratto di mingoweb

Non hai avuto problemi nel

Non hai avuto problemi nel tempo con un STM32 overclockkato?

ritratto di Fabrizio87

overclockkato rimane un

overclockkato rimane un gioco molto pericoloso,
e non capisco questa passione di fare lavorare i componenti oltre limiti previsti dal costruttore

ritratto di mingoweb

Potrebbe essere una

Potrebbe essere una soluzione per avere un componente con prestazioni maggiori ad un minor prezzo. Ovviamente questo metodo e da utilizzare solo con progetti dove non è prevista una grossa stabilità del sistema!

ritratto di Fabrizio87

il problema principale del

il problema principale del overclockkato e che fa scaldare molto i componenti,
così da accorciarli velocemente la vita, non penso che ci sia applicazioni dove è necessario cambiare i componenti tutte le settimane.

ritratto di mingoweb

Questo è anche vero..

Questo è anche vero.. Magari è utile overcloccare componenti molto vecchi che magari andrebbero buttati via e con un overclock potrebbero ancora ritornare utili per applicazioni di breve durata!

ritratto di linus

e poi

basterebbe aumentare la superfice di dissipazione dei componenti overcloccati, oppure mettere delle ventole adeguate, così da recuperare dei componenti destinati al macero.

ritratto di Alex87ai

Articolo interessante e

Articolo interessante e recensione impeccabile, soprattuto quando descrivi dello standard SPDIF e della codifica Biphase Mark...Completo nei riferimenti ai vari standard e inoltre l'articolo, a mio parere, rappresenta un buon inizio per implementare lo standard SPDIF o la codifica BM nelle possibili applicazioni future! Ottimo!

ritratto di rberna

Grazie...e il firmware

Per chi è interessato ecco il codice C.

http://www.megaupload.com/?d=1QBLYP5X

ritratto di laguzzz

Volevo chiedere se come

Volevo chiedere se come compilatore potevo usare ride7 ???

e se avete qualche sito da suggerirmi visto che sono alle primissime armi...

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 5 utenti e 35 visitatori collegati.

Ultimi Commenti