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.

Nessun commento:

Posta un commento