Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Approfondiamo la conoscenza
dei concetti di base che ci
serviranno per utilizzare la
tecnologia Sensor TAG.
Prima Puntata.
di PIERO BOCCADORO
SENSOR TAG:
istruzioni per l’uso
S impleLink Sensor Tag è una soluzione
integrata di alto livello tecnologico che Texas
Lo standard 802.15.4 e i Beacon
1
Per comprendere come avviene la comunicazione
Instruments ha messo sul mercato “strizzando tra dispositivi Bluetooth Low Energy è
l’occhio” all’Internet delle Cose (Internet of necessario analizzare il livello fisico e MAC
Thing, o IoT) e dando agli sviluppatori la della comunicazione, così come da specifica
possibilità di sperimentare il loro primo progetto IEEE 802.15.4 e suo emendamento. A partire
di comunicazione wireless, automazione dal protocollo Zigbee, che si appoggia a queste
industriale o domotica, partendo da una scheda linee guida per i livelli più bassi dello stack
estremamente performante. protocollare ISO/OSI, vediamo il funzionamento
In questo tutorial offriremo una panoramica delle reti WPAN (Wireless Personal Area
completa di tutto quello che l’Internet delle cose Network), iniziando dalle frequenze di interesse:
significa e che lo sviluppo di firmware del caso stiamo parlando della banda ISM (Industrial,
comporta, ivi compresi gli strumenti utili per Scientific and Medical) e in particolare ci
sviluppare sia sulla soluzione TI, sia su tutte le riferiamo a valori di 2,4 GHz adottati su scala
altre cui faremo riferimento. mondiale, 868 MHz per l’Europa e 915 MHz
Ma prima è necessario muovere alcuni passi nella per gli USA. La nascita dello standard IEEE
giusta direzione, perciò prima di tutto proviamo 802.15.4, come del resto di tutti gli standard di
a capire che cos’è l’Internet delle cose, su che comunicazione, ma anche di tutti i protocolli a
cosa si basa e come si passa dalla filosofia di livello operativo (quindi, per esempio, sanitario)
interconnessione al dispositivo fisico connesso. è il risultato di un percorso di evoluzione che
Per capirlo è necessario fare un passo indietro ed porta alla definizione di necessità comuni e dei
imparare insieme alcuni concetti di base. criteri accettati e da rispettare al fine di ottenere
Esistono, però, altre topologie all’interno Le frequenze su cui opera (da ricordare che
delle quali ciascun dispositivo opera come sono unlicensed band, ovvero libere) sono:
“pari” rispetto agli altri e pertanto ciascuno tre canali tra 868 e 868,6 MHz (Europa),
ha sempre a distanza unitaria almeno un 30 canali nel range 902÷928 MHz (Nord
altro dispositivo, senza che ciò comporti America), 2.400÷2.483,5 MHz (worldwide) e
alcun cambio in termini di ruoli nelle 3.100÷10.600Mhz (UWB introdotta dalla draft
comunicazioni, perché ciascuno di essi opera 2007 e variabile da paese a paese).
nello stesso modo di tutti gli altri. Esistono Come per quello fisico, il livello MAC fornisce
poi altre possibilità, come ad esempio l’albero due servizi: MAC Data service e MAC
binario, ovvero una struttura che prevede management service. Questi si interfacciano
che ciascun nodo abbia collegati a sé altri due con l’unità di gestione del livello MAC ed
nodi differenti. access point denominato MLME-SAP (MAC
Si distinguono anche per indirizzo, perché sublayer management entity service access
il metodo di indirizzamento può prevedere point). Compito del MAC data service è
parametri di lunghezza differenziata; per l’abilitazione della trasmissione e ricezione
questo motivo esisteranno indirizzi espressi in delle unità dati del livello MAC, ovvero
forma breve, a 16 bit, oppure a 64. dei MPDUs (MAC protocol data units),
L’altro parametro fondamentale è la attraverso il PHY data service. Altre funzioni
possibilità che uno slot temporale, allocato rivestite da questo livello sono:
per la trasmissione oppure per la ricezione, • la gestione dei beacon;
sia “garantito”, ovvero sia in qualche modo • l’accesso al canale;
opzionato in maniera preferenziale ed allocato • la gestione dei GTS (guaranteed time slot);
non dinamicamente. • la validazione dei frame;
Come per tanti altri protocolli, anche nel caso • gli acknowledged frame delivery;
delle LR-WPAN, abbiamo un’architettura • le associazioni e dissociazioni dei
divisa in blocchi denominati livelli (layer). dispositivi;
Ognuno di questi è responsabile di una • la gestione di applicativi di sicurezza.
parte dello standard e offre servizi ai livelli
superiori. Lo standard IEEE 802.15.4 tratta Alcune funzioni generali delle LR-WPAN
unicamente i due livelli inferiori dello stack risultano piuttosto importanti per chiarire il
ISO/OSI (che conta un totale di sette livelli) funzionamento per cui è utile prendere subito
ovvero livello fisico e MAC. confidenza con nozioni quali: superframe
Il livello fisico (PHY) fornisce due servizi: structure, modello di trasferimento dei dati,
PHY Data Service e PHY Management struttura del frame, robustezza, consumo
Service Interfacing. energetico, sicurezza e precision ranging.
Questi si interfacciano con l’unità di gestione Tra questi, analizziamo, superframe
del livello fisico, denominata Physical Layer structure, una modalità di accesso al canale in
Management Entity (PLME). I pacchetti dati a regime di beacon abilitati. Non è obbligatorio
tale livello consistono in unità dati del livello utilizzare la struttura superframe, e può
fisico, PHY Protocol Data Units (PDDUs) essere disabilitata.
ed è compito del servizio PHY Data Service Il superframe non è altro che una divisione
abilitare la trasmissione e ricezione sul canale del tempo in 16 slot di uguali dimensioni
radio. Altre funzioni rivestite da questo livello ed è fortemente legata ai beacon poiché essi
sono: sono spediti periodicamente durante il primo
• attivazione e disattivazione delle slot di ogni superframe e la loro funzione
trasmittenti; è quella di sincronizzare i dispositivi
• energy detection (ED); connessi, identificare il PAN coordinator
• link quality indication (LQI); e descrivere la struttura del superframe.
• selezione del canale; Nell’intervallo fra due beacon avviene la fase
• clear channel assessment (CCA); Contention Access Period (CAP) durante la
• invio e la ricezione dei pacchetti su quale i dispositivi che vogliono comunicare
medium fisico. si contendono il canale tramite meccanismi
Fig. 7
spesso vengono applicate manipolazione
dei bit meno significativi per rendere la
trasmissione del dato resistente e robusta
rispetto alle componente di rumore. Questi
artifici passano sotto il nome di “dithering”
ovvero una commutazione pressoché
casuale che non altera la parte significativa
del dato ma aiuta a nascondere o rendere
meno significative le componenti di disturbo
inevitabilmente presenti sul segnale.
Nella Fig. 8 sono riportate una serie di
condizioni di errore relative a diverse
situazioni, da quello di sincronizzazione fino
alla rilevazione di un pacchetto danneggiato
oppure di un frame incompleto passando
per diverse condizioni di overflow dovute,
per esempio, ad un tempo di latenza troppo
alto piuttosto che al fatto che l’intero
pacchetto sia stato generato in maniera
errata e contenga più dati. La gestione degli
errori e la tipologia degli stessi ci aiuta
a comprendere cosa stiamo sbagliando
e perché. Anche in questo caso l’ordine
progressivo suggerisce che le condizioni di
errore siano state inserite secondo un criterio
prima di tutto cronologico e comunque
relativo al funzionamento e al meccanismo
di trasmissione. E con lo stesso metodo con
cui definiamo componenti, facciamo per
viene trasferito il dato. È il caso di notare che gli errori. Specifiche condizioni possono,
queste sono definite in ordine progressivo e inoltre, essere utilizzate per svolgere funzioni
ciò perché si rispetta l’ordine in cui vengono di debug o per verificare l’esecuzione di
utilizzate; ciò identifica e stabilisce anche porzioni di codice. Se utilizziamo le funzioni
una certa gerarchia (Fig. 7). L’importanza definite nella libreria con cui possiamo
dell’ordinamento è fondamentale stampare su interfaccia seriale i messaggi di
nell’interpretazione dei dati. Senza ordine errore, possiamo introdurre alcune di queste
corretto di lettura, tutto quello che riceviamo condizioni all’interno del codice per verificare
o leggiamo o proviamo ad interpretare è quando le condizioni sono vere, quali dati
inutile. Soprattutto, facendo riferimento a vengono effettivamente inviati, come vengono
quanto detto in precedenza, dal momento gestiti e così via dicendo. Altra componente
che i pacchetti vengono incapsulati in fondamentale per il funzionamento di
maniera tale da tenere traccia di quali sono le un protocollo di comunicazione sono i
destinazioni e quali i contributi che vengono parametri IANA (Fig. 9). IANA è una sigla
da ciascun layer. Se non si rispettano questi che identifica la Internet Assigned Numbers
criteri, tutto quello che viene ricevuto e letto Authority, cioè un organismo il cui scopo è
viene interpretato in maniera non corretta. delegare la gestione di blocchi di indirizzi
Senza contare, poi, che quando si ha a che fare IP ad enti locali chiamati Regional Internet
con dati digitali esistono tecniche che mirano Registries, ciascuno dei quali assegna gli
a confinare l’errore il più possibile e molto indirizzi per una specifica zona del mondo
Listato 1
bool topology_isAcceptablePacket(ieee802154_header_iht*
ieee802514_header) {
predefinito con il quale deve avvenire l’hop bool returnVal;
e così di conseguenza la verifica che, qualora switch (idmanager_getMyID(ADDR_64B)->addr_64b[7]) {
il nodo sia root, la sincronizzazione possa case TOPOLOGY_MOTE1:
if (ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE2) {
avvenire. Nessun nodo che non sia root returnVal=TRUE;
può gestire una condizione del genere e } else {
returnVal=FALSE;
può garantire la sincronizzazione, per ovvi }
motivi. Le altre condizioni sono abbastanza break;
case TOPOLOGY_MOTE2:
autoesplicative: si abilita l’interfaccia radio if (ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE1 ||
e si impostano i parametri che servono alla ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE3) {
gestione della trasmissione dei dati (Fig. 11). returnVal=TRUE;
} else {
Molto spesso risulta poco chiaro come fare returnVal=FALSE;
a gestire un dato, scrivere un parametro, }
break;
aggiornare un indice. Ma lavorare su un case TOPOLOGY_MOTE3:
pacchetto significa conoscerne la dimensione, if (ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE2 ||
ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE4) {
poterne stimare i valori oppure ricavarli 10
oppure impostarli ad un numero che returnVal=TRUE;
scegliamo. Supponiamo, come nell’esempio } else {
returnVal=FALSE;
che abbiamo appena visto, di voler creare }
una quota del payload all’interno della quale break;
case TOPOLOGY_MOTE4:
allocare delle informazioni che desideriamo: if (ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE3) {
in particolare, 5 byte che vengono inizializzati returnVal=TRUE;
} else {
ad un valore e poi aggiornati, più due byte returnVal=FALSE;
dell’ID (quelli riguardanti lo specifico nodo). }
Dobbiamo aggiornare quei 5 byte ogni volta break;
default:
che avviene una trasmissione, perché vengono returnVal=TRUE;
utilizzati come marca temporale (timestamp) }
return returnVal;
per stabilire la differenza tra la trasmissione }
di un pacchetto e la successiva. Ebbene, a
livello applicativo il dato può essere scritto
con questa soluzione; a livello protocollare in ingresso e in uscita. Gli altri non saranno
definiremo una funzione che materialmente visibili, quindi non saranno possibili
scrive il dato puntando sempre a pkt -> interazioni o comunicazioni. È importante
payload [0 - 5]. sottolineare che la topologia non deve essere
Ricordate quando abbiamo scritto che la fissa; ciò che vogliamo da questi sensori e
topologia è impostabile e vi avremmo fatto che siano in grado di connettersi e scambiare
vedere come? Bene, è arrivato il momento: informazioni, e che l’informazione segua
guardate il codice nel Listato 1, dove un certo un percorso prestabilito, anche perché
numero di nodi (quattro) riconosciuti per ciò assicura che la rete possa ospitare
uno specifico byte degli 8 che compongono nuovi nodi in maniera dinamica. Perciò
l’indirizzo, vengono impostati affinché il procedimento illustrato va inteso come
possano comunicare soltanto con quelli con verifica della funzionalità e come un esercizio
cui è previsto che instaurino comunicazioni di programmazione.
Notate che i codici riportati in queste pagine
sono parte di un lavoro basato sul modulo
TI CC2420, una board TelosB e un sistema
operativo open source chiamato OpenWSN e
li abbiamo utilizzati perché compatibili con la
scrittura di firmware SimpleLink Sensor Tag.
Con quest’ultima nota si conclude questa
puntata; a partire dalla prossima “metteremo
Fig. 11 le mani” sui software per gestire i SensorTag e
g
inizieremo a lavorare sui nostri progetti.
di PIERO BOCCADORO
SENSOR TAG:
istruzioni per l’uso 2
N ella prima puntata di questo corso abbiamo
gettato le basi per utilizzare la tecnologia
conoscessero questa architettura, sappiate
che consente un’elevatissima potenza
Sensor Tag di TI, riproponendoci di affrontare computazionale, la quale si deve a un sistema
e “mettere mano”, in questa sede, ai software di definito dalle seguenti specifiche:
gestione. Prima di andare avanti vogliamo però • architettura ARM Cortex-M3 32-bit;
analizzare meglio e comprendere tutto ciò che • set di istruzioni ARM Thumb®-2 da 16 e 32-bit;
riguarda la dotazione hardware della scheda, • interrupt handling deterministico ad alte
dell’antenna, nonché l’architettura interna. prestazioni per la gestione di applicazioni
Diamo innanzitutto uno sguardo alla Fig. 1: ”time-critical”;
nello schema concettuale rappresentato in essa • sistema di debug migliorato dotato di
sono evidenti alcuni blocchi funzionali che breakpoint e trace capability;
schematizzano il modo in cui l’antenna funziona. • serial wire trace, che riduce il numero di pin
La CPU, che è basata su Cortex-M3, rappresenta necessari per le operazioni di debugging e di
il nucleo fondamentale del funzionamento e tracing;
le sue specifiche tecniche suggeriscono l’idea • modalità di consumo ultralow-power in sleep
che si tratti di un processore estremamente mode;
performante. Per tutti coloro che non • potenza di calcolo di 1,25 DMIPS per MHz.
Tabella 1
blocchi (da 4 e da 6 kB) sappiamo di avere a parlando di un sistema che di base funziona
disposizione una buona quantità di spazio da multiplexer e che consente a una serie di
per la memorizzazione di contenuti anche periferiche di essere assegnate a pin di I/O
in modalità standby. Tra le altre cose, se la in maniera flessibile. Tutti i pin, infatti, sono
cache Flash è disabilitata, anche gli 8 kB di dotati di interrupt che possono essere abilitati
cache possono essere utilizzati come RAM. con funzionalità di pull-up e pull-down in
Nell’ambito della compilazione e quindi maniera programmabile con configurazioni
della gestione delle interfacce, delle positive o negative-edge. Quando un’uscita
periferiche ma soprattutto del core, c’è da è configurata come negative-edge, il pin
tener presente che la memoria di sola lettura corrispondente può funzionare sia da pull-up
contiene, pre-programmato, il kernel Ti sia da open-drain.
RTOS, comprensivo quindi di librerie e stack, Per quanto riguarda l’interfaccia I²C,
in uno con il bootloader (quest’ultimo può essa viene utilizzata per comunicare con
essere programmato sfruttando le classiche dispositivi compatibili con questo standard ed
interfacce SPI e UART). è possibile lavorare con frequenze operative
E a proposito di modalità di funzionamento da 100 o 400 kHz, in modalità sia master, sia
del processore e di consumo di potenza e di slave.
ottimizzazione dello stesso, vi rimandiamo Tra i device inclusi c’è anche un controllore
alla Tabella 1, che riassume tutte le modalità Direct Memory Access (μDMA), che permette
di configurazione e dei consumi al fine di di trasferire i dati rendendo l’utilizzo del
inquadrare l’effettiva efficienza energetica di processore più efficiente, soprattutto nel
cui è capace. trasferimento di dati dalla memoria alle
Come tutti i componenti integrati dalle grandi periferiche. In verità esistono diverse modalità
prestazioni, anche questo è dotato di una serie di trasmissione che prevedono lo scambio
di interfacce e tra esse, naturalmente, ci sono tra memoria e periferica oppure all’interno
quelle che gestiscono le periferiche, come per della memoria stessa oppure direttamente tra
esempio I²C e UART. periferiche.
Per quanto riguarda le periferiche e i moduli Alcune delle caratteristiche più interessanti
che possono essere connessi al CC2650, stiamo sono riportate qui di seguito:
Fig. 5
Fig. 4
Link o altra soluzione già pronta per l’uso, come un’applicazione di tipo stand-alone
e dobbiate progettarne una da zero, questo oppure insieme alla documentazione del kit di
software vi fornirà un valido supporto. sviluppo proprio per verificare e comprendere
Ciò, non solo perché, siccome stiamo al meglio ciascun aspetto dell’hardware in
analizzando proprio il dispositivo basato proprio possesso. Potreste anche avviarlo
su CC2650, questo software può tornare soltanto per curiosità, dal momento che tutte
utile, ma anche perché controllando la le informazioni tecniche su tutte le varianti e
documentazione di tale componente si può su tutti gli esponenti della serie CC26XX sono
imparare come creare un nuovo dispositivo completamente documentate e disponibili
personalizzato partendo da un caso a partire dalle note tecniche fino alla
applicativo. documentazione completa. E questo non vale
In qualche modo, seguendo uno di questi certamente soltanto per i quattro esponenti
due approcci, complementari e duali, della famiglia di cui ci stiamo occupando in
SmartRF Studio 7 vi aiuterà a prendere queste pagine, ma si applica, in verità, anche
subito dimestichezza con i circuiti integrati a a integrati più “datati” o semplicemente
radiofrequenza, con il loro sviluppo, le loro meno performanti, che fanno parte o meno
caratteristiche, le relative specifiche e le loro di diversi kit di sviluppo. Le famiglie in
peculiarità. È intuitivo, quindi, che l’utilizzo questione sono: CC11X, CC11XX, CC11XL,
di SmartRF Studio possa essere pensato o CC112X, CC12XX, CC25XX, CC24XX.
di PIERO BOCCADORO
TUTORIAL
SENSOR TAG 3
D opo aver analizzato la tecnologia e i
dispositivi Sensor Tag di Texas Instruments
attivi, ma anche il consumo energetico e una serie
di altri parametri che non possono essere ignorati.
ed aver conosciuto le caratteristiche e le L’analisi delle caratteristiche dello stack
potenzialità della suite software Smart RF protocollare è indispensabile ed il software
Studio, utilizzata per progettare le applicazioni, BLE-Stack 2.1.0 di Texas Instruments vi servirà
proseguiamo l’analisi dei tool a nostra proprio a questo. L’adattamento per la gestione di
disposizione incontrando per primi BLE-Stack SimpleLink si è reso indispensabile dal momento
e BLE Device Monitor, quindi passando a Code che esistono diverse versioni di questo software
Composer Studio. che si riferiscono, com’è facile immaginare, a
schede basate su altri chip e su altre antenne. Lo
BLE STACK E BLE DEVICE MONITOR stack è reso disponibile dalla Texas Instruments in
Come abbiamo già scritto nelle precedenti puntate forma royalty-free per tutti coloro che intendono
di questo corso, lavorare con un protocollo di sviluppare sui dispositivi CC2640 e CC2650 e
comunicazione significa conoscerlo nel dettaglio, pertanto potrete avervi facile accesso se intendete
saper identificare il modo in cui in esso vengono lavorare con il CC2650DK.
organizzati i dati e, nel caso di un sistema radio È importante sottolineare che del BLE-Stack esiste
come Sensor Tag, le frequenze di lavoro, i canali anche una versione precedente, la 1.4.1, che però
Fig. 3
apre un’interfaccia piuttosto semplice dove, Prendetevi del tempo per esplorare tutti i
peraltro, all’utente sono richieste davvero valori restituiti e l’organizzazione dei dati
poche interazioni; infatti dopo aver scelto la che, oltre ai valori, restituiscono una serie
corretta porta seriale da “ascoltare”, il monitor di informazioni utili per effettuare un log
proporrà una schermata come quella in Fig. 1. completo (Fig. 4).
Nel caso dei nostri sensori, i CC2650, una Nella sezione in cui vengono elencati tutti
volta inserita la batteria ed attivato tramite i mote, sono disponibili le letture dei valori
l’utilizzo del pulsante per l’advertising, il LED dei sensori, ovvero qui non ci sono valori
D1 inizierà a lampeggiare; questa funzione in formato esadecimale ma valori numerici.
è programmata per indicare che è avviata Esiste una modalità Test piuttosto utile che
l’interfaccia Bluetooth e che il dispositivo è consente di verificare sensori e periferiche
pronto. connessi, per controllare il funzionamento
A questo punto ricordiamo che una delle
funzioni più interessanti, che garantisce
proprio il basso consumo energetico
nell’esercizio ordinario da parte della scheda,
riguarda il fatto che se non vengono stabilite
connessioni entro non oltre 30 secondi, il tag
entra in modalità sleep, proprio per garantire
il basso consumo; naturalmente anche il LED
smetterà di funzionare. Tenete conto che,
quando parliamo di dispositivi alimentati a
batteria, anche il lampeggio di un LED implica
un consumo di potenza e un assorbimento di
corrente non trascurabili (~5 mA) e pertanto Fig. 4
va effettuata una programmazione intelligente anche dei LED. Le funzioni a disposizione
che preveda proprio lo spegnimento tra le sono tutte estremamente intuitive, soprattutto
funzioni principali. perché l’interfaccia è minimale, ma se avete
A questo punto vediamo di “trovare” il nostro difficoltà potete sempre far riferimento alla
tag utilizzando la funzione Scan (Fig. 2) e documentazione completa disponibile nella
selezionando le voci che sono comparse e che guida accessibile dal sito Internet http://
hanno popolato la lista: sarà facile esaminare processors.wiki.ti.com/index.php/BLE_Device_
tutti i dettagli del singolo dispositivo Monitor User_Guide.
individuato. In particolare, questo software
gestisce due finestre principali, una relativa ai CODE COMPOSER STUDIO
servizi e l’altra relativa al tag, ovvero a tutti i Code Composer Studio (o CCS, se preferite)
mote connessi. è un software che non ha bisogno di
L’indicazione complessiva sul fatto che tutte presentazioni: si tratta di un intero ambiente
le connessioni siano andate a buon fine potete di sviluppo integrato e di altissimo livello che
trovarla nella barra in basso (Fig. 3). consente di scrivere codici in maniera semplice
L’utilizzo della prima sezione è abbastanza ed efficace per tantissime piattaforme diverse
semplice, dal momento che espandendo la tra loro.
struttura ad albero vengono evidenziate le Con questo IDE, lo sviluppatore potrà
caratteristiche del servizio, quindi l’eventuale produrre il proprio firmware ottimizzandolo
presenza, per esempio, di temperature con grazie al supporto di diversi microcontrollori
annessi valori restituiti per registri di memoria e microprocessori. L’ottimizzazione sarà
di riferimento. Le notifiche sono abilitate a possibile per i compilatori C e C++ e tutte le
valle della connessione, ma alcuni sensori, operazioni necessarie per portare a termine il
come accade nel caso specifico del SensorTag, proprio progetto sono facilmente raggiungibili
sono disattivati per impostazione predefinita. grazie a un’interfaccia in cui i comandi sono
Fig. 7
Fig. 6
Fig. 9
/*******************************************************************************
* LOCAL VARIABLES
*/
// Task configuration
static Task_Struct sensorTagTask;
static Char sensorTagTaskStack[ST_TASK_STACK_SIZE];
// Tx power level
0x02, // length of this data
GAP_ADTYPE_POWER_LEVEL,
0 // 0dBm
};
// GAP - Advertisement data (max size = 31 bytes, though this is best kept short to conserve
//power while advertising)
static uint8_t advertData[] =
{
// Flags; this sets the device to use limited discoverable
// mode (advertises for 30 seconds at a time) instead of general
// discoverable mode (advertises indefinitely)
0x02, // length of this data
GAP_ADTYPE_FLAGS,
DEFAULT_DISCOVERABLE_MODE | GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED,
(Continua)
#if FEATURE_OAD
// Event data from OAD profile.
static Queue_Struct oadQ;
static Queue_Handle hOadQ;
#endif //FEATURE_OAD
PIN_TERMINATE
};
/*******************************************************************************
* LOCAL FUNCTIONS
*/
#ifdef FACTORY_IMAGE
static bool SensorTag_saveFactoryImage(void);
#endif
#ifdef FEATURE_OAD
static void SensorTag_processOadWriteCB(uint8_t event, uint16_t connHandle,
uint8_t *pData);
#endif //FEATURE_OAD
Listato 2
/**
*/
#include <xdc/runtime/Error.h>
#include <ti/sysbios/family/arm/cc26xx/Power.h>
#include <ti/sysbios/BIOS.h>
#include “ICall.h”
#include “bcomdef.h”
#include “peripheral.h”
#include “glucose.h”
#ifndef USE_DEFAULT_USER_CFG
#include “bleUserConfig.h”
#endif // USE_DEFAULT_USER_CFG
/**
* Exception handler
*/
void exceptionHandler()
{
(Continua)
/*
* ======== main ========
*/
int main()
{
PIN_init(BoardGpioInitTable);
#ifndef POWER_SAVING
/* Set constraints for Standby, powerdown and idle mode */
Power_setConstraint (Power_SB_DISALLOW);
Power_setConstraint (Power_IDLE_PD_DISALLOW);
#endif //POWER_SAVING
return 0;
}
/**
* Error handled to be hooked into TI-RTOS
*/
Void smallErrorHook(Error_Block *eb)
{
for (;;);
}
/**
* HAL assert handler required by OSAL memory module.
*/
void halAssertHandler(void)
{
for (;;);
}
glucosio main.c. Il codice del main lo trovate deve fare nel dettaglio, da quando si avvia a
nel Listato 2. L’importanza di questo codice quando termina la sua esecuzione. In questo
sta nel fatto che vi permette di notare una modo il vostro programma sarà stabile,
cosa tutt’altro che trascurabile: è brevissimo, e perfettamente modificabile, se dovesse
se rapportato a ciò che permette di fare! rendersi necessario.
Infatti, come tutti i bravi programmatori
sanno, è buona norma che il main si è tenuto CONCLUSIONI
il più libero possibile, con minor numero di Ebbene, anche per questa puntata abbiamo
operazioni richiamate. Questo garantisce terminato. Ora che conosciamo i tool software
sempre un’ottima modularità e scalabilità del utilizzati per lo sviluppo possiamo spostarci
codice, che diventa espandibile in maniera sul piano fisico e vedere come programmare
semplice, nonché un ottimo controllo delle il Tag; ne riparleremo nella prossima
funzionalità aggiunte. Quando, invece, non puntata, dove faremo uso di SmartRF Flash
siete ancora sicuri di aver perfezionato il Programmer v2, cogliendo l’occasione per
tutto, vi consigliamo di partire con un unico presentarvi questo indispensabile strumento
file dal quale iniziare a scorporare le funzioni e descrivervi in che modo utilizzarlo per
g
solo una volta che avrete definito che cosa caricare il codice nei dispositivi.
di PIERO BOCCADORO
TUTORIAL
SENSOR TAG 4
G iunti a questo punto dello sviluppo
del progetto, avete finito di scrivere il
Texas Instruments basati su microcontrollore
ad architettura ARM. Per effettuare la
vostro codice e siete pronti per effettuarne programmazione vengono utilizzate la funzionalità
l’upload sul Tag. E a questo scopo, come vi di debug e l’interfaccia seriale.
avevamo annunciato, vi serve un sistema di Il software può essere utilizzato per lavorare
programmazione con tutto ciò che lo correda. su dispositivi basati sulla serie 8051 e su altri
In questa puntata conclusiva del corso vi microcontrollori a basso consumo e viene, infatti,
proponiamo di utilizzare lo SmartRF Flash impiegato con dispositivi MSP430-compliant, come
Programmer, che è la soluzione elettiva per il ad esempio il dongle eZ430.
compito che dovete svolgere. Tra le caratteristiche principali della soluzione
Giunta alla sua seconda versione (anche software qui proposta ci sono:
se per questa puntata del corso abbiamo • programmazione di immagini del software su
catturato le schermate dalla versione 1.7.1, microcontrollore low-power per RF;
che è quella che al momento della stesura • programmazione di immagini del software su
avevamo a disposizione), questa utility dispositivi MSP430;
può essere impiegata per programmare la • programmazione e aggiornamento del firmware
memoria Flash di programma nei dispositivi e del bootloader su evaluation board ad
interfaccia USB basate su microcontrollore; Tramite queste ed altre funzioni (visibili nella
• aggiornamento dell’immagine del firmware schermata iniziale di Fig. 1), come la lettura
sulla MCU; dell’Information Page del dispositivo, avrete
• lettura dell’immagine e creazione di un file la possibilità di controllare ogni singolo
hex; aspetto della programmazione.
• confronto di un file hex con l’immagine già Il software SmartRF Flash Programmer può
scritta su dispositivo; essere scaricato gratuitamente da Internet
• lettura e scrittura di MAC address nei accedendo alla pagina web www.ti.com/tool/
dispositivi che devono accedere alla rete. flash-programmer del sito di Texas Instruments.
Fig. 2 - Facendo clic sul pulsante Show del riquadro cerchiato in rosso, si apre la sezione Flash Utilities.
Dopo averlo scaricato e installato, è possibile delle funzionalità e questa azione utilizza i
effettivamente iniziare a lavorare; la prima comandi di debug per leggere la memoria,
cosa che dobbiamo chiederci è che tipo di il che implica che se i comandi sul chip
immagine vogliamo caricare: single o multiple? sono bloccati non sarà possibile eseguire
Tali termini sono autoesplicativi, per cui tutto l’azione.
ciò che dovete fare sarà decidere, cercare • Verify: come il nome stesso suggerisce,
nei vari percorsi la posizione della (o delle) indica molto semplicemente una verifica
immagine(i) e poi sarete quasi pronti; quasi, dell’immagine che viene scritta nella
perché manca una fase operativa: decidere memoria Flash. La funzione verifica
quali sono le cosiddette “Actions” da soltanto il file presente e non controlla se
intraprendere. qualche dato viene aggiunto alla memoria.
In totale possiamo individuare sei azioni
differenti che è possibile eseguire con i SoC Volete scrivere solo su alcune pagine di
di cui stiamo parlando; per farlo, ci basta memoria e quindi cancellarne selettivamente?
selezionare, nel software, quella desiderata. Oppure volete che il vostro codice sia l’intero
Le nostre Actions sono di seguito descritte. sorgente, o magari solo una porzione? E che
• Erase: grazie a questa cancelleremo la dire della possibilità di verificare che tutto
memoria Flash del dispositivo selezionato. sia andato a buon fine? Potrete scegliere
• Erase & Program: cancellerà la memoria fra le due modalità indicate per fare questo
Flash come nel passaggio precedente, controllo, ammesso che vi serva ....è chiaro!
ma scriverà anche il file .hex che avremo Tra le Actions ci sono alcune opzioni dedicate
indicato. anche nella sezione Image Overrides, dalla
• Erase, Program & Verify: azione combinata quale potrete scegliere, per esempio, di
che effettua gli stessi passaggi del processo disabilitare il Bootloader.
precedente, ma che nel contempo rileva gli A seconda del tipo di progetto sul quale
errori durante la programmazione oppure starete lavorando, le istruzioni potranno
quelli causati da un’area di memoria risultare più o meno utili ma in questa fase è
danneggiata. assolutamente poco influente parlare di casi
• Append and Verify: prevede la scrittura applicativi.
dell’immagine sul dispositivo senza Tra le tab presenti nella visualizzazione che
eliminare quella precedentemente esistente abbiamo appena descritto c’è la sezione “Edit”
in Flash. In pratica stiamo aggiungendo (è visualizzata nella Fig. 2); anche in questo
caso si tratta di una funzione abbastanza diverse modalità, come abbiamo detto più
intuitiva, che serve a lavorare sulle aree volte finora: selezionando specifiche aree di
di memoria in maniera selettiva andando memoria, accedendo alla memoria di massa
a leggere, per esempio, specifici indirizzi per intero oppure forzando la riscrittura
oppure intere pagine, sempre che non si anche delle aree protette. Tale scelta può
voglia avere una visione completa e lavorare essere effettuata tramite il menu contestuale
sull’intera memoria disponibile. Ma ciò può mostrato nella Fig. 4 e grazie alla selezione
non essere semplice da gestire. dell’azione più opportuna.
In questa sezione sarà anche possibile Qualunque sia l’operazione che intendete
modificare i valori leggendoli e scrivendoli, svolgere sul vostro chip, o qualsiasi sia
ed eventualmente salvando il contenuto della l’impostazione o il caricamento che avete
memoria Flash anche su un file creato ad hoc, effettuato, dare uno sguardo alle pagine di
come mostrato nella Fig. 3. memoria e ai valori scritti al loro interno
In alto a destra nella schermata mostrata in risulterà fondamentale, per cui una volta che
Fig. 2, all’interno della sezione Flash Utilities avrete letto il vostro dispositivo ed avrete
si trova il pulsante Show; facendo clic su di avuto accesso alla sezione Info Page, tutto ciò
esso si apre la sezione omonima che rende che sarà scritto sul vostro tag sarà disponibile
accessibili alcune importanti opzioni che a video (Fig. 5).
possono risultare piuttosto utili se si intende, Potrete scegliere anche una visualizzazione
per esempio, scrivere su aree di memoria differente con un diverso numero di
protette. colonne, ma noterete che si tratta soltanto
Anche in questo caso vi consigliamo un di un espediente grafico, talvolta comunque
attento approfondimento delle singole comodo. I valori che avrete letto potranno
funzioni, analizzate singolarmente, allo scopo essere salvati ed esportati per una
di individuare, caso per caso, l’operazione più consultazione successiva o un eventuale
appropriata. elaborazione. Unica pecca di questo
Come abbiamo detto all’inizio di questa programma è il fatto che al momento della
puntata, una delle funzioni più interessanti è pubblicazione di questo corso non esiste in
quella che consente di cancellare la memoria, versione per sistemi operativi Linux o MAC
anche soltanto al fine di poterla riscrivere. OS. Se volete lavorare con questi sistemi
Ricordiamo che ciò può essere fatto in operativi, vi consigliamo, quindi, di utilizzare
dovremo provvedere all’operazione di debug, Questo significa che è possibile, per esempio,
utile a risolvere quei problemi e ovviare a programmare l’ADC per effettuare un
quelle dimenticanze che affliggono un po’ campionamento periodico ed un buffering dei
tutte le versioni “beta” dei progetti. dati rendendo il sistema più performante dal
Il software Sensor Controller Studio è punto di vista energetico ed ottimizzando la
un’applicazione che viene utilizzata per durata e l’efficacia delle trasmissioni. Tra le
sviluppare e verificare, in fase di debug, altre cose, le interfacce gestite sono tantissime
il funzionamento dei Sensor Controller e si può quindi comunicare tramite I²C, SPI,
CC26xx/CC13xx e vi consentirà di creare, in oppure UART.
maniera estremamente efficiente, applicazioni Tra le caratteristiche più interessanti ci sono:
che lavorino indipendentemente dal sistema • possibilità di programmare implementando
centrale di gestione, svolgendo operazioni un linguaggio simile al C;
semplici in background. • gestione di sistemi multi-CPU tramite
Fig. 9 - Un grafico che illustra l’andamento dei dati acquisiti dai sensori.
POTENZIALI APPLICAZIONI
Ciò detto, le problematiche di cui abbiamo
parlato non influiscono negativamente
Fig. 11 - L’interfaccia utente di Packet Sniffer.