
Benvenuti a questa serie di lezioni dedicate ai professionisti che vogliono compiere i primi passi nello sviluppo di applicazioni per processori a 32 bit. Il corso è rivolto a tutti coloro che hanno già esperienza con la programmazione embedded su piattaforme a 8/16 bit e desiderano fare un passo in avanti ed entrare nel mondo dei processori ARM. La piattaforma che utilizzeremo sarà un evoluzione dell'Arduino UNO a 8 bit: l'Arduino M0 PRO. Clicca qui per scoprire come ricevere in omaggio la scheda Arduino M0 Pro.
La piattaforma ARM
Il cuore di Arduino M0 PRO è un microcontrollore Atmel SAMD21G18A (Smart Arm based Microcontroller) basato su un processore ARM Cortex-M0+ a 32 bit. ARM (precedentemente Acorn RISC Machines ora Advanced RISC Machines) progetta principalmente processori a 32 bit, e ne concede la licenza ai produttori di chip in silicio secondo un modello di business chiamato IP (intellectual property) licensing. Le varie aziende come ST Microelectronics, Texas Instruments o Atmel nel nostro caso acquistano la licenza e integrano i processori ARM all'interno dei loro progetti (ad esempio Microcontrollori o System on a chip (SoC)). Recentemente, con la nascita della linea Cortex, ARM ha suddiviso i suoi processori in tre famiglie (o profili), per differenziare i suoi prodotti in base alle diverse esigenze del mercato: sono nati quindi i Cortex-A (Application processors), ad alte prestazioni, con supporto per sistemi operativi come Linux e utilizzati nei telefoni cellulari o nei tablet; i Cortex-R (Real- Time processors), per applicazioni real time con gestione degli interrupt fortemente deterministica ed efficiente; la serie Cortex-M dedicata prevalentemente al mercato dei microcontrollori. I processori Cortex serie M (M0,M0+,M3,M4 e M7) sono dei processori RISC (Reduced Instruction Set Computer) e hanno un set d'istruzioni relativamente piccolo (56 istruzioni); i Cortex-M sono facili da programmare, dato che quasi tutto può essere programmato in C o C++ (l'architettura dei processori Cortex è C-friendly ed è facile per un compilatore generare codice macchina da codice sorgente scritto in linguaggio C), e sono realizzati in maniera da offrire una risposta rapida e deterministica agli interrupt, per questo il core contiene al suo interno un controller dedicato chiamato Nested Vectored Interrupt Controller (NVIC), che consente una gestione degli interrupt semplice e flessibile. Altre periferiche fanno parte del core, come un timer di sistema chiamato System Tick Timer o SysTick e altre che vedremo in seguito. Il produttore del microcontrollore (il chip di silicio che vediamo fisicamente sulla nostra scheda di sviluppo) aggiunge poi la memoria flash, la RAM e le periferiche (timer, interfacce di comunicazione seriale, pin di GPIO e altre).
Arduino M0 PRO e il SAMD21
La scheda Arduino M0 PRO si presenta col tipico pinout di Arduino, dividendo i pin in digitali, analogici e di alimentazione (figura 1). A differenza dell'Arduino UNO la scheda è alimentata a 3.3 V (gli header dei pin sono grigi e non neri ad indicare questo). E' possibile alimentare la scheda dai due connettori micro USB (massimo 500 mA di corrente assorbita), dal jack accanto ad essi o dal pin Vin (range 6-20 V). Sotto la scritta M0 PRO troviamo il SAMD21G18A, con 256 KB di memoria flash per il codice (dei quali 4 KB sono riservati dal bootloader a meno che non vogliamo farne a meno, come vedremo) e 32 KB di SRAM. L'altro chip presente sulla scheda è il programmatore/debugger chiamato EDBG (Embedded DeBuGger) che ci consentirà di programmare la memoria del microcontrollore, ma anche grazie all'interfaccia di debug messa a disposizione da quest'ultimo di eseguire passo passo il nostro codice alla ricerca di eventuali errori o bug.
La scheda presenta due porte micro USB ed entrambe consentono di programmare il micro: la prima, programming, è la porta consigliata per la programmazione ed è collegata all'EDBG che ci permette di comunicare con l'interfaccia di debug del SAMD21 (per programmare il microcontrollore o eseguire il debug) e alla prima UART del microcontrollore (svolgendo il ruolo di convertitore USB-seriale e programmare la memoria utilizzando il bootloader e quindi l'IDE ufficiale di Arduino); la seconda, denominata native USB, è collegata direttamente al controller USB presente sul SAMD21 e può anch'essa essere impiegata per programmare il microcontrollore utilizzando l'IDE. In definitiva gli approcci per programmare l'Arduino M0 PRO sono due: utilizzare il bootloader precaricato e quindi l'ambiente di sviluppo di Arduino (come spiegato nella prima parte di questo articolo) o (approccio che seguiremo in questo corso) utilizzare Atmel Studio 7.0 come IDE e sfruttare l'EDBG sulla scheda per programmare e, cosa fondamentale, debuggare [...]
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2839 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.

Con questo diamo via ad un nuovo interessante corso embedded ARM. Approfondiremo molti aspetti di programmazione, quindi…stay tuned e se avete domande scrivete pure 😉
Buongiorno, una domanda in generale. C’è un modo per stampare gli articoli in un modo ben formattato da un browser togliendo in automatico le pubblicità? Grazie.
Dovresti vedere l’inconcina della STAMPA vicino le tag 😉
Buongiorno, le faccio i complimenti perchè è proprio quello di cui avevo bisogno e per l’introduzione veramente ben scritta! La prego di continuare 😉
Grazie, il corso prevede altre lezioni in cui mano mano impareremo di più sull’architettura dei Cortex-M di ARM e delle periferiche del SAMD21 di Atmel, con progetti pratici ma anche richiami di teoria della programmazione in C. Sono a disposizione per qualunque chiarimento 😉
Ciao Massimiliano, se usi il browser Chrome puoi aggiungere l’estensione “CleanPrint” che ti permette di rimuovere velocemente tutto ciò che non vuoi stampare. Se invece usi Firefox allora puoi utilizzare l’add-on “aardvark”
Davvero un bel corso! Da profondo appassionato credo che questo sia uno dei corsi migliori che poteste mai intraprendere. Spero sia un corso ricco e approfondito (per quel che possibile) per chi, come me, studia questo 🙂 Complimenti