domenica 26 gennaio 2014

Introduzione ad ASF (settima parte) – Introduzione ad SPI

Analizziamo in questo articolo l’utilizzo dell’interfaccia Serial Peripheral Interface (SPI)

SPI permette una comunicazione sincrona ad alta velocità tra un dispositivo Master ed uno o più dispositivi Slave.
Ogni dispositivo contiene un registro a scorrimento tipicamente ad 8 bit (1 byte) il cui scorrimento è basato sul segnale di clock fornito dal Master.

Prendiamo in considerazione una comunicazione tra un dispositivo Master ed un solo dispositivo Slave

spi

I registri a scorrimento sono collegati tra loro tramite i segnali MISO (Master Input - Slave Output) e MOSI (Master Output – Salve Input), lo scorrimento dei bit tra i due registri permette quindi uno scambio di dati tra i due dispositivi.

Questa architettura porta ad alcune importanti conseguenze da tenere sempre presenti:

- Il Master deve inviare dei dati per leggere i dati dello Slave, i bit del registro a scorrimento dello Slave verranno copiati in quello del Master ma al tempo stesso i bit del Master saranno copiati nel registro dello Slave.

- Nuovi byte non possono essere scritti nel registro prima che i vecchi siano stati trasferiti tramite lo scorrimento

- I dati devono essere letti prima dell’arrivo dei successivi che faranno scorrere il buffer e sovrascriveranno quindi i vecchi dati che saranno così persi.

Iniziamo a vedere adesso dopo questa breve panoramica su SPI come interfacciarci tramite XMega (Master) ad un dispositivo esterno (Slave)

Creiamo un nuovo progetto tramite il template EWS ATXmega32A4U come visto negli articoli precedenti

UPDATE: Template aggiornato per Microchip Studio ed ASF 3.52 disponibile qui

Aggiungiamo tramite ASF Wizard il modulo SPI – Serial Peripheral Interface Master (Common API) scegliendo standard_spi, utilizzeremo il modulo hardware SPI del micro. Un’altra opzione che non vedremo in questo articolo è utilizzare il flessibile modulo hardware USART del micro o addirittura entrambi.

spi standard

Dopo aver aggiunto il modulo notiamo come nel progetto siano stati inseriti i file spi.c ed spi.h, i driver di basso livello di SPI ed i file spi_master.c ed spi_master.h, servizi a livello più elevato

sol explorer

Il Driver SPI è semplicemente un file C contenente le funzioni sotto elencate che permettono una gestione a basso livello del modulo hardware di cui il micro è dotato, queste funzioni non contengono molta logica e sostanzialmente espongono sotto nomi più amichevoli i registri interni del micro. L’unica funzione contenente un poco di logica è la funzione spi_xmega_set_baud_div che effettua una serie di controlli sui dati in ingresso prima di impostare il clock in modo da avvicinarsi al baudrate desiderato.

spi_driver

Non chiameremo direttamente nessuna funzione del Driver SPI ma utilizzeremo invece il servizio SPI Master che oltre ad alcune definizioni e strutture dati offre le seguenti funzioni che ci permettono di strutturare in termini di pacchetti di byte il nostro Firmware

spi_service

Nella prossima puntata vedremo come funzionano nella pratica le funzioni che ASF ci offre, alla prossima.

mercoledì 1 gennaio 2014

Strumenti di sviluppo Xilinx e Windows 8

Alcuni lettori del blog mi hanno più volte segnalato il forte desiderio di articoli anche su logiche programmabili e strumenti di sviluppo Xilinx

Complice l’arrivo di un nuovo portatile con preinstallato Windows 8 ed una nuova scheda di sviluppo basata su FPGA Spartan-6 LX come regalo per il nuovo anno ai lettori del blog inizierà una serie di articoli relativi al mondo Xilinx.

Gli strumenti di sviluppo Xilinx non sono purtroppo attualmente supportati su Windows 8, vediamo in questo articolo come è possibile risolvere questo problema.

La scheda di sviluppo Avnet Spartan-6 LX9 MicroBoard (link produttore) utilizzata è fornita con l’ambiente di sviluppo Xilinx ISE. Dopo una prima installazione su Windows 8.1 apparentemente conclusa senza errori ho constatato purtroppo il mancato funzionamento col nuovo sistema operativo, l'opzione di un’installazione parallela (in dual boot) di Windows 7 è stata esclusa dalla mancanza di driver del nuovo portatile funzionanti con sistemi operativi precedenti.

Una soluzione rapida è la virtualizzazione di Windows 7 tramite programmi come Virtual Box, dopo l’installazione del pacchetto è necessario installare l’estensione VirtualBox Extension Pack per poter supportare eventuali periferiche USB 2.0 come hard disk o chiavette esterne che potranno essere utili durante la progettazione.

I passi da compiere sono:

- installare Virtual Box con eventualmente il relativo Extension Pack (link)

- creare una nuova macchina virtuale abilitando se necessario il controller USB 2.0 (EHCI)

L’operazione è molto semplice, scegliendo Macchina / Nuova dal menù di VirtualBox basterà seguire il wizard guidato

new

E’ necessario assegnare un quantitativo ragionevole di RAM e spazio su disco alla macchina virtuale, 2GB di RAM e 32GB di spazio su disco sono sufficienti per la scheda di sviluppo in oggetto.

- installare il sistema operativo Windows 7 (o un qualunque sistema operativo supportato) e Xilinx ISE sulla macchina virtuale (attualmente l’ultima versione è la 14.7 scaricabile dal sito Xilinx previa registrazione)

- abilitare la licenza di Xilinx ISE, la scheda di sviluppo fornisce gratuitamente ISE Design Suite WebPACK e SDK utilizzabili solamente con la FPGA Spartan-6 LX9-2CSG324 come quella utilizzata nella scheda di sviluppo (device locked license).

NB: Se la licenza che si ottiene è legata ad un particolare token come ad esempio l’indirizzo MAC della propria scheda di rete sarà prima necessario configurare la scheda di rete della macchina virtuale.

net

- collegare la scheda di sviluppo al pc tramite la connessione USB diretta per la programmazione

- abilitare nella macchina virtuale il programmatore on-board presente sulla scheda tramite il menù Dispositivi / Dispositivi USB selezionando Digilent Adept USB Device

VBox

Adesso il dispositivo sarà perfettamente accessibile tramite gli strumenti di sviluppo come ad esempio ISE iMPACT, il software per programmare i nostri design sulla fpga Xilinx.

impact

Vedremo nel prossimo articolo come creare il classico Hello World dell’hardware, un semplice led lampeggiante, per prendere domestichezza col flusso di lavoro da seguire con gli strumenti di sviluppo Xilinx