Arduino DUE Tutorial: Atmel SAM3X8E ARM Cortex-M3 CPU

ARM cortex M3

In questa terza puntata del nostro Tutorial su Arduino DUE ci concentriamo sul micro controllore integrato, un Atmel SAM3X8E con ARM Cortex-M3. Probabilmente alcuni di voi avranno già avuto a che fare con quest’architettura mentre per altri potrebbe anche essere la prima volta. Per tutti, vediamo di che cosa è capace e perché e come questa nuova versione della scheda è migliore e più performante sotto tutti i punti di vista. Siete pronti?

Dopo aver analizzato con la dovuta attenzione lo schema elettrico di Arduino DUE, ci siamo già fatti un’idea abbastanza chiara di quelle che sono le sue reali potenzialità. Il pinout che abbiamo visto, soprattutto evidenziando alcune porzioni di grande interesse per noi, sottintende il fatto che venga configurato (via hardware) opportunamente in modo tale da essere pronto all’uso.
Oggi vedremo meglio com’è fatto, quali sono le caratteristiche peculiari dell’architettura che andiamo a studiare ma soprattutto quali sono le sue reali possibilità anche rispetto ai diretti concorrenti.

La serie SAM3X/A di Atmel fa parte della famiglia di microcontrollori Flash basati sull’architettura dei processori RISC a 32 bit dell’ARM Cortex-M3. La massima frequenza di lavoro è di 84 MHz ed al suo interno è possibile trovare fino a 512 kB di memoria Flash e sino a 100 kB di memoria SRAM.
Il pinout, di cui abbiamo ricordato in precedenza, non è altro che il modo in cui ci si può interfacciare, in maniera user-friendly, a tutte le specifiche funzioni accessibili tramite pin del micro controllore. È per questo scopo, infatti, che, come abbiamo visto, esistono accessi diretti ad interfacce quali UART, SPI, I2C ed altre ancora, cui poter connettere periferiche.

Ma non c’è solo questo, in realtà, visto che tra le tante funzioni esistono anche convertitori ADC e DAC.
Altra funzionalità per la quale questo microprocessore risulta molto interessante è la sua possibilità di utilizzare facilmente la libreria QTouch, garantendo totale controllo di pulsanti, slider e qualunque altro supporto hardware compatibile.
Tra le applicazioni per cui questo dispositivo è considerato particolarmente utile ci sono quelle di tipo “networking” e pertanto risulta essere molto interessante nell’ambito dell’automazione sia in campo industriale sia, volendo, nel campo domestico.

Le features principali

Parliamo del Core:

  • ARM® Cortex®-M3 revisione 2.0 (con frequenza di lavoro fino a 84 MHz);
  • Memory Protection Unit (MPU);
  • instruction set Thumb®-2;
  • 24-bit SysTick Counter;
  • controller Nested Vector Interrupt.

Abbiamo già accennato qualcosa sulla memoria; ecco che cosa mancava:

  • da 256 a 512 Kbytes di memoria Flash embedded a 128-bit wide access;
  • da 32 a 100 Kbytes di memoria SRAM embedded;
  • 16 Kbytes ROM con bootloader embedded;
  • Static Memory Controller (SMC): supporto per SRAM, NOR, NAND. Controller NAND Flash con 4-kbyte RAM buffer ed ECC.

Vediamo, adesso, qualcosa in più sul sistema:

  • regolatore di tensione embedded per operazioni single supply;
  • POR, BOD e timer Watchdog;
  • oscillatori al quarzo o ceramici: da 3 a 20 MHz principale ed opzionale;
  • clock real time a 32.768 kHz;
  • oscillatore RC interno ad alta precisione da 8/12 MHz;
  • PLL interno dedicato al clock ed uno dedicato all’Host/Device USB 2.0;
  • sensore di temperatura;
  • fino a 17 canali per periferiche DMA (PDC) e 6 per central DMA con DMA dedicato per Host/Device USB.

Modalità low power:

  • sleep e backup mode; consumo ridotto fino a 2.5 μA;
  • backup domain: VDDBU pin, RTC, 8 registri di backup a 32-bit;
  • ultra low-power RTC.

Le periferiche, invece, sono:

  • USB 2.0, Device/Mini Host (480 Mbps, 4-kbyte FIFO);
  • fino a 4 USARTs (ISO7816, IrDA®, SPI, supporto Manchester e LIN);
  • 2 TWI (compatibili con I2C), fino a 6 SPIs, 1 SSC (I2S), 1 HSMCI (SDIO/SD/MMC) con massimo 2 slots;
  • Timer&Counter a 32 bit e 9 canali;
  • PWM fino a 8 canali da 16-bit;
  • RTT a 32-bit ed RTC con calendario e funzione d’allarme;
  • ADC con guadagno programmabile e modo d’ingresso differenziale da 16 canali, 12 bit;
  • DAC 2 canali e 12 bit;
  • Ethernet MAC 10/100 con DMA dedicato;
  • due controller CAN;
  • un TRNG (True Random Number Generator).

Le operazioni di I/O sulla scheda possono essere gestite con:

  • fino a 103 porte di I/O con diverse sensibilità (edge o level) e debouncing, glitch filtering e resistori in serie on-die;
  • fino a 6 PIO parallele da 32 bit.

Per quanto riguarda le soluzioni di vendita, i Packages sono 4:

  • 100-lead LQFP, 14 x 14 mm, pitch 0.5 mm
  • 100-ball LFBGA, 9 x 9 mm, pitch 0.8 mm
  • 144-lead LQFP, 20 x 20 mm, pitch 0.5 mm
  • 144-ball LFBGA, 10 x 10 mm, pitch 0.8 mm

A scopo riepilogativo, ecco, grazie alla prossima figura, un’immagine che spiega nel dettaglio come sia fatto il diagramma a blocchi del microcontrollore in esame.

Dal punto di vista del Debug e Testing, le features previste sono:

  • debug access a tutta la memoria ed ai registri all’interno del sistema compresi quelli del Cortex-M3, all’interno dei quali il core è attivo, in halt oppure in stato di reset;
  • debug port Serial Wire (SW-DP) e JTAG Debug Serial Wire port (SWJ-DP);
  • unità Flash Patch and Breakpoint (FPB) per la creazione di breakpoint e patch;
  • unità Data Watchpoint and Trace (DWT) per l’implementazione di watch points, data tracing e system profiling;
  • Instrumentation Trace Macrocell (ITM) per supporto di operazioni come printf;
  • supporto per Boundary-scan JTAG IEEE® 1149.1 su tutti i pin digitali.

Diamo, adesso, uno sguardo un po’ più approfondito alle periferiche embedded ed iniziamo parlando della SPI (Serial Peripheral Interface). Diciamo intanto che è garantito il supporto per comunicazioni con dispositivi esterni collegati tramite seriale.

  • 4 chip select con supporto per decoder esterni che permette la comunicazione con un massimo di 15 periferiche;
  • memorie seriali, come DataFlash ed EEPROM 3-wire;
  • periferiche seriali, tra cui ADC, DAC, LCD Controllers, CAN Controllers e sensori;
  • co-processori esterni.
  • Quest’interfaccia permette anche le comunicazioni master-slave su bus grazie a:
  • chip select a lunghezza programmabile da otto a 16 bit;
  • fase e polarità programmabili per chip select;
  • ritardi di trasferimento programmabili tra comunicazioni consecutive;
  • mode fault selezionabile.

Il trasferimento dei dati è anche piuttosto rapido grazie anche al fatto che la linea di chip select può essere “lasciata alta” (attiva) per velocizzare il trasferimento sullo stesso dispositivo.
Anche il trasferimento dei dati, e quindi la capacità del canale DMA, è stata ottimizzata grazie ai canali dedicati per trasmissione e ricezione.

Quando parliamo di TWI, ovvero di Two Wire Interface, ci riferiamo ad un’interfaccia che permette le comunicazioni in modalità master, multi-master e slave. Tra le sue caratteristiche c’è anche la garantita compatibilità con l’interfaccia two-wires di Atmel ma anche con I2C e serial memory. Possono essere utilizzati, in maniera selezionabile, uno oppure due o anche 3 byte per gli slave address. Tra le caratteristiche abbiamo anche:

  • operazioni read/write sequenziali;
  • Bit Rate fino a 400 kbit/s;
  • General Call supportata in modalità Slave.

Le UART, nel quadro generale delle interfacce di cui si potrà fare uso, rivestono una grande importanza per via delle molteplici caratteristiche previste, tra cui la possibilità di impostare il baud rate ma anche la generazione di parità pari, dispari, mark o space. La generazione di segnali di wake up, le modalità di test Remote Loopback, Local Loopback ed Automatic Echo completano il quadro.

Continuiamo sull’argomento “interfacce” per parlare della Controller Serial Synchronous (SSC). Esso permette la comunicazione seriale sincrona in applicazioni audio oppure, in generale, nelle telecomunicazioni. Questo sarà vero anche quando verranno utilizzati CODECs in modalità Master o Slave, I2S, TDM Buses, lettori di carte magnetiche e così via dicendo.
Ricevitore e trasmettitore sono indipendenti ed il clock divider è comune. È possibile configurare il sincronismo di frame e la lunghezza dei dati mentre sia il ricevitore sia il trasmettitore possono essere programmati per iniziare automaticamente la comunicazione oppure per effettuare la rilevazione di eventi differenti all’interno del frame del segnale di sincronismo.

Per quanto concerne il Timer Counter (TC), abbiamo tre differenti canali a 32 bit. Le sue molteplici funzionalità includono la misura di frequenza, il conteggio di eventi ma anche la misura di intervalli (di tempo), la generazione di impulsi ed altre funzioni quali PWM, Delay Timing.
Ciascun canale può essere configurato direttamente dall’utente e può contenere tre differenti input esterni (clock) e cinque interni e due segnali di I/O multi-purpose.

Quando parliamo di interfaccia per schede multimediali ad alta velocità (High Speed Multimedia Card Interface, HSMCI), ci riferiamo ad una dotazione per questo processore che garantisce la compatibilità con le MultiMedia Card Versione 4.3, le irrinunciabili (ormai) SD Memory Card (v. 2.0) ma anche CE-ATA (1.1). È garantito il supporto per le modalità ad alta velocità di trasferimento dei dati e sono predisposti due supporti per slot multiplexed.
Il tutto è dotato di protezione contro modifiche ai dati non previste on-the-fly per i registri di configurazione.
E veniamo adesso ad una delle interfacce più utili di questo microprocessore che permette l’equipaggiamento con pieno potenziale e la facilità di interfacciamento di Arduino DUE, ovvero lo USB On-The-Go (UOTGHS).

Il supporto permette Low/Full/High-Speed (LS/FS/HS) e On-The-Go, 1.5Mb/s, 12Mb/s, 480Mb/s. Tra le features abbiamo:

  • 10 Pipes/Endpoints;
  • 4K bytes di DRAM Embedded Dual-Port;
  • fino ad due banchi memoria per Pipe/Endpoint;
  • configurazione flessibile Pipe/Endpoint e gestione di canali DMA per un massimo di sei;
  • tansceiver UTMI On-Chip che include Pull-ups/Pull-downs;
  • pad OTG On-Chip che include un comparatore analogico.

Altro aspetto fondamentale del SAM3X è l’accoppiata ADC-DAC, una dotazione straordinariamente utile se si pensa che convertire i dati è un’esigenza davvero primaria.
La risoluzione, per entrambi, è di 12 bit ed il tasso di conversione non supera 1 MHz. L’alimentazione si “estende” da 2.4 a 3.6 V ed è possibile selezionare ingressi single ended o differenziali per entrambi. Il guadagno e l’offset, per entrambi e per ciascun canale, sono selezionabili a partire da un valore massimo full scale input fino a zero.
Il convertitore analogico-digitale offre fino a 16 canali d’ingresso analogico indipendenti e per ciascuno è possibile optare per l’attivazione oppure la disattivazione.

Trigger software e/o hardware sono di tipo esterno oppure possono corrispondere ai trigger TIOA (uscite del TC). È garantito il supporto PDC ed esiste la possibilità di effettuare la configurazione del timing per l’ADC.
Il sistema può prevedere il wake-up automatico perché viene rilevato un evento di trigger ed altrettanto si può fare per riportare il sistema nello stato di sleep mode; questo vale anche per il convertitore e, quindi, non solo il sistema (globalmente) ma anche soltanto il convertitore può godere di questa funzionalità.

Per quanto riguarda il convertitore DAC, invece, più specificatamente dobbiamo dire che esiste la possibilità di godere di Trigger multipli per ciascun canale. Il suo utilizzo può anche essere quello di fornire un input ad un comparatore analogico oppure un altro convertitore ADC.
È anche possibile utilizzarlo in modo tale che si abbia ridotto consumo di potenza.

Fino a questo momento risulta evidente che si tratta di un sistema piuttosto smart, molto avanzato che prevede funzionalità anche straordinariamente versatili ed è proprio per questo motivo che utilizzare queste periferiche, con la potenza delle comunicazioni che si possono mettere in piedi, utilizzando i diversi protocolli, è garanzia del fatto che utilizzare Arduino DUE potrà essere davvero divertente, non foss’altro che tutta questa potenza prima non esisteva per la scheda.

Mancano all’appello due importanti esponenti della categoria dei controller cui abbiamo la possibilità di accedere: CAN ed Ethernet.
Per quanto riguarda il primo noi abbiamo piena compatibilità con CAN 2.0 Part A e 2.0 Part B, Bit Rates massimo fino a 1Mbit/s ed otto mailboxes object oriented con le seguenti proprietà:

  • programmabilità secondo specifiche per ciascun messaggio;
  • identificatore indipendente a 29-bit e mask defined per ciascuna mailboxe;
  • utilizzo del CAN_SIZE_COUNTER-bit Timestamp su messaggi trasmessi o ricevuti;
  • concatenazione hardware dei bitfields ID.

Il timer interno è a 16 bit e può essere utilizzato per Timestamping e sincronizzazione di rete. È anche possibile effettuare la gestione della priorità delle trasmissioni. Sono supportate le modalità autobaud e listening.
Anche in questo caso è possibile prevedere modalità di funzionamento Low Power e di wake-up programmabile comandato dall’attività sul bus o dalla specifica applicazione.

Per quanto riguarda, invece, il controller Ethernet MAC (EMAC), abbiamo la più completa compatibilità con uno standard IEEE 802.3 e l’operatività a 10/100 Mbit/s.
Le operazioni che avvengono su questo canale sono di tipo full duplex ma, volendo, possono anche essere half-duplex.
È garantito il supporto per il Promiscuous Mode, in cui tutti i frame ricevuti validi vengono copiati in memoria. Il controllo del flusso half duplex viene garantito forzando le collisioni tra frame in arrivo; quello full duplex, invece, tramite il riconoscimento dai frame di pausa in arrivo.
Viene anche garantito il supporto per il VLAN tagging 802.1Q grazie al riconoscimento delle comunicazioni in arrivo.
Sono sopportati anche Jumbo frames di dimensione fino a 10,240 bytes.

Altra caratteristica interessante è il generatore di numeri casuali (TRNG), un dispositivo che ha passato i test della “NIST Special Publication 800-22″ nonché quelli “Diehard Random”. Ogni 84 cicli di clock, il dispositivo propone un numero casuale rappresentato con una profondità di 32 bit. Per che cosa si può utilizzare? Magari per implementare meccanismi di sicurezza ma potete usarlo per qualsiasi applicazione che lo richieda.

UART

Lo standard di cui parliamo adesso è piuttosto conosciuto e ci stiamo avvicinando a grandi passi al momento in cui lo utilizzeremo. Si tratta dello Universal Asynchronous Receiver Transmitter, il quale utilizza una UART a 2 pin che può essere sfruttato per effettuare comunicazioni ed offre un ottimo supporto per trasmissioni on-site. Lo standard è ancora molto attuale, sebbene sia nato diverso tempo fa. Inoltre, il suo utilizzo, insieme con periferiche a controller DMA (PDC), permette la trasmissione a pacchetto con tempi ridotti al minimo nell’esecuzione delle istruzioni. I due pin di cui parlavamo prima sono RX e TX che possono essere collegati al connettore DB9 come in figura.

USART

Lo standard Universal Synchronous Asynchronous Receiver Transceiver, meglio noto con l’acronimo USART, permette una comunicazione di tipo full-duplex seriale asincrona sincrona. Il formato dei dati è molto ben personalizzabile utilizzando una serie di parametri come la lunghezza, la parità oppure il numero di stop bit e così via. Questo garantisce il più ampio e largo supporto per la maggior parte degli standard esistenti.
Il ricevitore implementa il controllo di parità per gestire gli errori ma anche il framing error e l’overrun error detection.
Il time-out del ricevitore abilita l’handling per la lunghezza delle variabili ed il timeguard del trasmettitore facilita le comunicazioni con dispositivi slow remote. Le comunicazioni multidrop sono anche supportate attraverso l’handling dei bit di indirizzo sia in ricezione sia in trasmissione.
Le principali modalità di test della USART sono, come accennato in precedenza: remote loopback, local loopback e automatic echo.
La USART supporta specifiche modalità operative grazie ad interfacce tipo LIN, RS495 ma anche bus SPI.
La funzionalità di handshaking permette un controllo del flusso out-of-band attraverso gestione automatizzata dei pin RTS e CTS.

RS232

Il SAM3X-EK si può connettere al bus USART0 (comprendendo TXD, RXD, ed i segnali di controllo) tramite connettore DB9 maschio attraverso il transceiver RS232 MN16 in figura.

Ed a proposito di seriale, basta dare uno sguardo  al datasheet del componente per trovare, con relativa facilità, quello che stiamo cercando ovvero il dettaglio, nella Signal Description List, di come lavorare su interfaccia seriale. Vediamolo brevemente in tabella:

I/O Line

Peripheral A

Peripheral B

Extra Function

EK Usage

Device

PA8

URXD

PWMH0

WKUP4

URXD

UART

PA9

UTXD

PWMH3

-

UTXD

UART

Tools

Veniamo, ora, alla parte più “applicativa” di questo articolo, quella in cui cerchiamo di capire come usare il microcontrollore.

Emulatore: Atmel SAM-ICE
Si tratta dell’emulatore JTAG per microcontrollori basati su Atmel ARM® core. ICE è stato progettato per SAMA5, SAM3, SAM4, SAM7 and SAM9 con supporto per Thumb®. Supporta una velocità di download non superiore a 720K Bytes/s mentre perJTAG la frequenza (massima) supportata è 12 MHZ.

Evaluation Kit: SAM3X-EK

L’evaluation Kit (progettato per dispositivi SAM3X e SAM3A) è una soluzione piuttosto rapida ed efficace per farvi un’idea delle potenzialità di questa MCU. Se siete a caccia di informazioni ma non vi accontentate di ciò che leggete, si tratta certamente di un’ottima possibilità.

Programmer: Atmel SAM-BA In-system Programmer

SAM-BA® è una soluzione software ISP dedicata alla serie di microcontrollori già elencati che fornisce un set di tool per la programmazione molto versatile ed utile. Questo, così come altre features e debug tool, permetterà un controllo ed una velocità di programmazione notevoli.

Software libraries: Atmel QTouch Library

Ci siamo, nel recente passato, interessati a queste librerie citandole. Si tratta di un set di istruzioni pre-compilato che supporta i metodi di acquisizione QTouch e QMatrix. All’interno delle librerie sono contenuti alcuni progetti di esempio che prevedono, per esempio, l’uso dell’ATtiny88 MCU con il pannello QTOUCH8 oppure anche una scheda basata sull’MCU ATmega324PA con QMATRIX8x8. I progetti sono disponibili sia per compilatore IAR sia per GCC ma gli eseguibili ed i file  HEX sono comunque inclusi per una più rapida consultazione.

Software libraries: Atmel Software Framework

Si tratta della “Source code library” per Atmel® megaAVR®, AVR® XMEGA®, AVR UC3 e micro basati su Atmel ARM Cortex-M. Il framework, denominato Atmel® Software Framework (ASF), non è altro che una libreria software che fornisce una serie di soluzioni software per le MCU Atmel flash, megaAVR, AVR XMEGA, AVR UC3 e per i dispositivi SAM. Tra i vantaggi abbiamo:

  • semplificazione dell’uso dei microcontrollori (perchè il livello di astrazione sale);
  • ASF è progettato per essere utilizzato in tutte le fasi del progetto: valutazione, prototipazione, progetto (vero e proprio) e produzione;
  • è integrato all’interno dell’Atmel Studio IDE con una GUI oppure è disponibile in versione standalone per compilatori GCC e IAR;
  • è scaricabile gratuitamente.

Software tools: Atmel Studio

Atmel® Studio è un ambiente di sviluppo  creato al fine di effettuare progettazione e debug in applicazioni embedded su Atmel ARM® ed AVR®.

Software tools: QTouch Studio 4.3.1

L’Atmel QTouch Studio è un’applicazione per PC che permette la visualizzazione real-time del data stream di debug delle librerie QTouch proveniente dalla scheda di test o in sviluppo. Alcune soluzioni sono:

  • QT600
  • SAM3N-EK
  • SAM3S-EK
  • AVRTS2080A
  • AVRTS2080B
  • QTouch Xplained

Il software funziona, stando a quanto dichiarato dal produttore, solo su piattaforma Windows.

Per approfondimenti, ulteriori dettagli o altre informazioni potete consultare il sito intenet del prodotto.

Conclusioni

Bene, per oggi direi che possiamo fermarci qui. Ora abbiamo un quadro piuttosto completo della scheda: sappiamo com’è fatta, sappiamo cosa ci possiamo fare ed abbiamo capito più o meno come fare ad interfacciarci e dialogare con essa. La prossima volta vedremo di cominciare qualche esperimento con la scheda per scoprirne realmente le possibilità mettendola sotto test sul campo. Alla prossima.

11 Comments

  1. Boris L. 26 marzo 2013
  2. Antonello Antonello 26 marzo 2013
  3. Piero Boccadoro Piero Boccadoro 26 marzo 2013
  4. Pari Pierpaolo 21 aprile 2013
  5. Boris L. 6 aprile 2013
  6. Piero Boccadoro Piero Boccadoro 23 aprile 2013
  7. Pari Pierpaolo 23 aprile 2013
  8. Pari Pierpaolo 23 aprile 2013
  9. Boris L. 28 aprile 2013
  10. Piero Boccadoro Piero Boccadoro 28 aprile 2013
  11. Pari Pierpaolo 30 aprile 2013

Leave a Reply