Progetto INDOLE

annuncio pubblicitario
Progetto INDOLE
Pagina 1 di 30
Innovative Domotics for Living and Entertainment
Descrizione delle attività svolte
CUBIT-PSM-AIDILAB
Deliverable – D 3.2
Firmware/Software di controllo e gestione
Revisione
Data
Modifica
Redatta
Verificata
001
22-10-2013
Primo rilascio
CUBIT-PSM-AIDILAB
PSM
002
10-12-2013
Revisione e approvazione
CUBIT-PSM-AIDILAB
PSM
Rilascio Report finale – Revisione e
approvazione
CUBIT-PSM-AIDLAB
PSM
003
28-02-2014
Progetto INDOLE
Innovative Domotics for Living and Entertainment
Pagina 2 di 30
Sommario
1 - Introduzione ................................................................................................................................................. 3
1 - Test hardware e firmware della ciabatta intelligente .................................................................................. 4
1.1 Componenti utilizzati............................................................................................................................... 4
1.2 Verifiche hardware effettuate ................................................................................................................. 4
1.3 Verifica corto circuiti ............................................................................................................................... 5
1.4 Verifica alimentazioni .............................................................................................................................. 6
1.5 Verifiche software effettuate .................................................................................................................. 7
1.6 Risultato dei test .................................................................................................................................... 12
2 - Software applicativo per Ciabatta .............................................................................................................. 13
2.1 Metrology Engine .................................................................................................................................. 14
2.2 Diagramma stati logici ........................................................................................................................... 16
2.3 Descrizione del firmware ....................................................................................................................... 17
3- Software applicativo per scheda Sensori INDOLE ....................................................................................... 21
3.1 Diagramma stati logici ........................................................................................................................... 22
3.2 Descrizione del firmware ....................................................................................................................... 23
4 – Sistema operativo: Android 4.2.2 kernel Linux 3.2.0................................................................................. 27
Progetto INDOLE
Innovative Domotics for Living and Entertainment
Pagina 3 di 30
1 - Introduzione
Il presente Deliverable è il risultato della conclusione dell’Attività 3.2 - Realizzazione del software di controllo
e gestione comprendente anche i risultati dell’Attività 2.5 Progettazione del Firmware e Software di gestione
e integrazione delle componenti Hardware.
La prima parte fornisce la descrizione del Firmware di controllo e gestione, inclusi i test effettuati per ottenere
i requisiti per l’integrazione delle componenti Hardware e Firmware e i componenti utilizzati. Si forniscono
inoltre le descrizioni del software applicativo per la Ciabatta intelligente e del software applicativo per la
Scheda dei sensori INDOLE.
La seconda parte del Deliverable descrive il porting del kernek di Android su CPU Sitara che controlla la scheda
Engine.
Il presente Deliverable è stato realizzato dal personale dell’azienda CUBIT, PSM e AIDILAB.
Progetto INDOLE
Innovative Domotics for Living and Entertainment
Pagina 4 di 30
1 - Test hardware e firmware della ciabatta intelligente
1.1 Componenti utilizzati
I dispostivi HW utilizzati per effettuare i test necessari sono descritti di seguito.
1. Oscilloscopio
L'Oscilloscopio utilizzato per effettuare le varie misurazioni è il LeCroy 24Xs-A 200MHz 2.5Gs/s
2. Alimentazione
Alimentazione da rete elettrica 220V AC
3. Multimetro
Il Multimetro utilizzato per misurare le varie tensioni è: il Fluke 87V
I dispositivi SW utilizzati per effettuare i test necessari sono descritti di seguito.
4. Power Line Modem ST7540 demostration Kit
Per i test di scambio dati abbiamo utilizzato il sw della evaluation board di ST.
1.2 Verifiche hardware effettuate
Errori sugli schemi elettrici e PCB
Nello schema elettrico 71023100_3 non è presente il nodo di collegamento tra C31-R23-pin3 di D9. Nei
prototipi abbiamo saldato tramite un filo i due punti.
FIGURA 1 - NODO DI PAOUT
Progetto INDOLE
Innovative Domotics for Living and Entertainment
Pagina 5 di 30
Durante i test della board abbiamo visto che per scrivere nel control register del componente ST7540 è
necessario collegare anche il segnale CLR/T presente sul pin 8. Questo segnale deve essere anche collegato
al micro EM783 tramite optoisolatore HCPL-260L.
FIGURA 2 - PIN 8 DI U1 CLR/T
Errato componente U3. Sui prototipi è stato sostituito con un TLV1117_3V3.
FIGURA 3 –TLV1117_3V3
1.3 Verifica corto circuiti
Non sono risultati corto circuiti tra le alimentazioni e altre net.
Progetto INDOLE
Innovative Domotics for Living and Entertainment
Pagina 6 di 30
1.4 Verifica alimentazioni
Verifica tensione 3V3H e VREF
Per eseguire un primo debug in sicurezza della ciabatta è stata staccata la parte in alta tensione della scheda.
Per alimentare il resto del circuito è stato utilizzato un alimentatore AC/DC esterno da 12V collegato tra il pin
3 di U3 e massa dissaldando R3 (figura 4).
Sono state verificate le seguenti alimentazioni:
 3V3H: alimentazione a 3.3V creata dal componente U3 TLV1117,
test
 VREF: tensione da 1.65V utilizzata per le letture ADC del micro EM783-MC3, test
--->3.308
--->1.664
Verifica tensione 12V e 5V
Le tensioni ISOLATE 12V e 5V utilizzate per le tre porte USB della ciabatta, sono state verificate dopo aver
dissaldato le resistenze R1(220VAC_LINE), R72(220VAC_NEUTRAL) e R13(VMON) e i condensatori C41, C46,
C50, C48, C59 e C54 dalla scheda. Anche queste modifiche sono state fatte per seguire un debug sicuro della
scheda, in quanto la tensione di rete 220V entra solo nell’alimentatore XP Power che genera il 12V.
Sono state verificate le seguenti alimentazioni:
 12V: alimentazione a 12V creata da XP Power (P1),
 5V: tensione a 5V creata da U1 a partire dal 12V,
test
test
FIGURA 4 –MODIFICHE PER VERICA TENSIONI
--->11.96
--->4.985
Progetto INDOLE
Innovative Domotics for Living and Entertainment
Pagina 7 di 30
Verifica tensione 12VH
Per verificare il funzionamento del componente TEA1721xT che crea la tensione 12VH a partire dalla tensione
di rete 220V è necessario risaldare sulla scheda le resistenze R1 e R72.
Le prove hanno verificato il corretto funzionamento del TEA1721, anche se sono stati cambiati alcuni
componenti del circuito al fine di ottimizzare il setup time del 12VH.
 12VH: alimentazione a 12V creata dal TEA1721,
test
--->11.96
Verificato il 12VH è stata risaldata sul circuito la resistenza R3 in modo da collegare il 12VH stesso al
regolatore di tensione U3 che genera il 3V3H necessario per alimentare il microcontrollore della ciabatta.

3V3H: tensione a 3.3V creata da U3 a partire dal 12VH,
test
--->3.305
Verifica funzionamento Relay
È stato verificato il corretto funzionamento dei relay bistabili RT314F12 K1, K2 e K3 sia con e senza carico.
1.5 Verifiche software effettuate
Microcontrollore EM783-MC3
La prima programmazione del micro EM783-MC3 deve essere fatta tramite comunicazione seriale utilizzando
il tool di sviluppo NXP Flash Magic. Per programmare la scheda è necessario:
 Filare dalla scheda un connettore a tre poli con GND, RX e TX. Nota: importante mantenere l’ordine
indicato del tre segnali.
 Chiudere il jumper di boot JP2 e alimentare la scheda. Questo fa si che il micro vada nella particolare
configurazione di boot HW via seriale.
 Utilizzare un convertitore USB/seriale TTL per collegare il PC al connettore seriale a tre poli della
ciabatta.
 Aprire Flash Magic Tool, caricare il file .hex del programma da flashare e impostare le caratteristiche
della seriale e di programmazione come da foto. L’ambiente di sviluppo utilizzato per compilare il
software per il micro EM783-MC3 è l’IDE Keil uVision5.
FIGURA 5 - PING SESSION
Progetto INDOLE
Innovative Domotics for Living and Entertainment

Pagina 8 di 30
Una volta caricato il software è possibile programmare la scheda utilizzando il debugger jlink2 tramite
header P5.
Per verificare il funzionamento delle periferiche del micro è stato realizzato un programma di test che utilizza
il tool VirtualLCD come terminale video+tastiera della ciabatta. La comunicazione tra scheda e PC è realizzata
con la stessa interfaccia seriale utilizzata per programmare il microcontrollore.
FIGURA 6 – PROGRAMMA DI TEST
Progetto INDOLE
Innovative Domotics for Living and Entertainment
Pagina 9 di 30
FIGURA 7 – PROGRAMMA DI TEST
Per simulare i segnali di consumo provenienti dalle tre utenze della ciabatta è stato utilizzato un generatore
di segnale sinusoidale a 50Hz. Il segnale prodotto è stato collegato sui condensatori di disaccoppiamento
(C41, C46, C50, C48, C59 e C54) messi prima degli amplificatori di segnale U12, U14 e U16.
FIGURA 8 – FRONT-END ANALOGICO
Progetto INDOLE
Innovative Domotics for Living and Entertainment
Pagina 10 di
30
Andando a modificare l’ampiezza picco-picco della sinusoide prodotta dal generatore si riesce a valutare il
comportamento dei segnali di HIGHGAIN e LOWGAIN utilizzati dal micro EM783 per stimare il consumo di
corrente delle utenze tramite la sua interfaccia di Metrology Engine.
Il Metrology Engine rappresenta l‘interfaccia analogica del microprocessore EM783 ed è in grado di eseguire
misurazioni di tensione e corrente periodiche a partire dagli ingressi analogici di I_HIGHGAIN, VOLTAGE e
I_LOWGAIN.
Per avere misure accurate si devono utilizzare entrambi i canali HIGH e LOWGAIN. Il metrology in questo caso
validerà la lettura eseguita sul pin di I_HIGHGAIN per gli assorbimenti più bassi (figura 9), mentre validerà
quella su I_LOWGAIN per i consumi più alti (figura 10). Le figure seguenti mostrano in blu e giallo
rispettivamente l’andamento dei segnali LOWGAIN e HIGHGAIN.
FIGURA 9 – VALORE CORRETTO DA HIGHGAIN
FIGURA 10 – VALORE CORRETTO DA LOWGAIN
Progetto INDOLE
Innovative Domotics for Living and Entertainment
Pagina 11 di
30
Power Line Modem
Per poter testare il collegamento del Power Line Modem abbiamo utilizzato il software della demo board di
STMicroelectronics, scambiando pacchetti tra l'evaluation board e la scheda della ciabatta intelligente.
I test effettuati sono stati di PING tra le due schede e TX/RX di pacchetti con risultati ottimi ( errore di perdita
del pacchetto intorno al 2% ).Nelle figure successive è possibile vedere i settaggi e i test effettuati.
FIGURA 11 - PING SESSION
FIGURA 12 - RECEIVING SESSION
Progetto INDOLE
Innovative Domotics for Living and Entertainment
Pagina 12 di
30
FIGURA 13 - TRANSIMISSION SESSION
1.6 Risultato dei test
I risultati dei test evidenziano il problema HW del pin 8 di U6 da modificare sulla release successiva del
progetto e un ottimizzazione da fare sul circuito del TEA1721 per velocizzare lo startup timer del 12VH.
Progetto INDOLE
Innovative Domotics for Living and Entertainment
Pagina 13 di
30
2 - Software applicativo per Ciabatta
In questo capitolo si fornisce la descrizione della filosofia di funzionamento del software applicativo realizzato
per il microprocessore EM783 utilizzato per il monitoraggio dei consumi delle utenze collegate alla ciabatta
intelligente.
La ciabatta intelligente è un dispositivo in grado di controllare i consumi di tre diverse utenze e di comunicarli
tramite Powerline modem all’unità principale composta dal terminale INDOLE. Le tre utenze possono essere
abilitate o disabilitate da comando remoto o secondo una logica locale, grazie alla presenza di tre relay
bistabili.
FIGURA 14 - SCHEMA LOGICO CIABATTA
Il controllo dei relay, la gestione del Powerline modem e il monitoraggio dei consumi viene realizzato dal
microprocessore EM783-MC3 prodotto da NXP. Parte della componentistica elettronica della ciabatta è
isolata e protetta da fusibile, varistore ed ESD, mentre il monitoraggio dei consumi e la tensione di
alimentazione della CPU EM783 è di tipo non isolato, per cui per poter programmare la ciabatta è necessario
utilizzare un’interfaccia isolante realizzata tramite opto-isolatori.
Progetto INDOLE
Innovative Domotics for Living and Entertainment
Pagina 14 di
30
2.1 Metrology Engine
Il Metrology Engine rappresenta l‘interfaccia analogica del microprocessore EM783 in grado di eseguire
misurazioni di tensione e di corrente periodiche a partire dagli ingressi analogici di I_HIGHGAIN, VOLTAGE e,
opzionalmente, I_LOWGAIN.

VOLTAGE: il metrology esegue la misura AC della tensione di rete su questo ingresso analogico.
Essendo un pin a bassa tensione del microprocessore, non è possibile collegarci direttamente la
tensione di rete (220V), ma è necessario un front-end analogico esterno che mantiene immutata la
caratteristica sinusoidale del segnale di rete, ma ne scala l’ampiezza massima. Quest’ultima infatti
non deve superare la tensione di alimentazione del micro VDD=3.3V.

I_HIGHGAIN: il metrology esegue la misura AC del consumo di corrente di un’utenza su questo
ingresso analogico. Il segnale che arriva a questo pin viene generato da una resistenza di shunt
collegata in serie alla tensione di alimentazione dell’utenza. Come per il pin di VOLTAGE, anche
I_HIGHGAIN necessita di un front-end analogico esterno che mantiene immutata la caratteristica
sinusoidale del segnale di assorbimento, ma ne amplifica l’ampiezza in base alla massima misura di
corrente che si intende collegare all’utenza. Tipicamente questo pin viene utilizzato per misurare i
bassi assorbimenti, per cui l’amplificazione da impostare sul front-end deve essere alta, ma
comunque di un valore tale da mantenere il segnale I_ HIGHGAIN inferiore alla tensione di
alimentazione del micro VDD=3.3V. Per gli alti consumi, la misurazione effettuata con I_HIGHGAIN
non è veritiera in quanto l’alto guadagno fa saturare l’amplificatore e quindi il metrology non è in
grado di discriminare le diverse correnti assorbite.

I_LOWGAIN(opzionale): il metrology esegue la misura AC del consumo di corrente di un’utenza su
questo ingresso analogico. Il segnale che arriva a questo pin viene generato da una resistenza di
shunt collegata in serie alla tensione di alimentazione dell’utenza. Come per il pin di VOLTAGE, anche
I_LOWGAIN necessita di un front-end analogico esterno che mantiene immutata la caratteristica
sinusoidale del segnale di assorbimento, ma ne amplifica l’ampiezza in base alla massima misura di
corrente che si intende collegare all’utenza. Tipicamente questo pin viene utilizzato per misurare gli
alti assorbimenti, per cui l’amplificazione da impostare sul front-end deve essere bassa, ma
comunque di un valore tale da mantenere il segnale I_LOWGAIN inferiore alla tensione di
alimentazione del micro VDD=3.3V. Per i bassi consumi, la misurazione effettuata con I_LOWGAIN
non è veritiera in quanto il basso guadagno dell’amplificazione non permette al metrology di
discriminare le correnti assorbite utilizzando segnali ad ampiezza quasi nulla.
E’ possibile utilizzare contemporaneamente entrambi i segnali I_HIGHGAIN e I_LOWGAIN per misurare il
consumo della stessa utenza. Questo consente di avere misure maggiormente accurate su un range più
esteso di assorbimenti (in ampere) rispetto al singolo utilizzo di I_HIGHGAIN o di I_LOWGAIN. Il metrology
infatti validerà la lettura eseguita sul pin di I_HIGHGAIN per gli assorbimenti più bassi, mentre validerà quella
su I_LOWGAIN per i consumi più alti.
Il metrology, grazie ai segnali campionati da questi tre pin analogici, riesce ad eseguire una serie di calcoli tra
cui: potenza Attiva (W), potenza reattiva (Var), potenza apparente (VA), power-factor etc.. E’ inoltre possibile
Progetto INDOLE
Innovative Domotics for Living and Entertainment
Pagina 15 di
30
compensare le misurazioni effettuate in base alle variazioni di temperatura e in base ai punti di calibrazione
programmabili via software.
Il micro EM783-MC3 prevede quindi 1 ingresso analogico di VOLTAGE valido per tutte e tre le utenza e 6
ingressi analogici che collegano i segnali HIGH_GAIN e LOW_GAIN di ciascuna utenza.
Progetto INDOLE
Innovative Domotics for Living and Entertainment
Pagina 16 di
30
2.2 Diagramma stati logici
Il software implementato segue la struttura logica evidenziata nello schema a blocchi sottostante.
FIGURA 15 - DIAGRAMMA STATI LOGICI
Progetto INDOLE
Innovative Domotics for Living and Entertainment
Pagina 17 di
30
2.3 Descrizione del firmware
La prima operazione che questo software implementa è quella di inizializzare le porte del micro EM783 e le
periferiche utilizzate.
In particolare, il blocco “CPU init” inizializza i clock utilizzati dal micro, abilita il SysTickTimer con il quale
vengono gestiti tutti i timer software necessari al monitoraggio dei consumi e configura tutti i pin di I/O
(ingresso/uscita) utilizzati dal micro.
Il blocco “POWERLINE init” inizializza la comunicazione seriale con la quale il micro EM783 scambia i dati con
la CPU ST7540 responsabile della trasmissione/ricezione dei dati sulla 220V. La comunicazione seriale è di
tipo sincrono per la scrittura e lettura dei registri del micro ST7540, mentre è di tipo asincrono per la
trasmissione e ricezione dei dati da inviare sulla 220V. L’interfaccia asincrona UART0 viene configurata con
le seguenti caratteristiche:
Baudrate
600/1200/2400/4800
Datasize
8
Parity mode
None
Flow control
None
Stop bits
1
TABELLA 1 - CARATTERISTICHE COMUNICAZIONE SERIALE
I pacchetti ricevuti sono considerati validi se rispettano il formato <STX><CMD><LEN><Data><CRC>
STX: 1 byte, carattere di inizio pacchetto (valore costante 0x02);
CMD: 1 byte, comando da eseguire;
LEN: 1 byte, lunghezza del campo <Data>;
<Data>: payload del pacchetto (dim max 255 byte);
CRC: 1 byte, contiene il valore 1 + somma su un byte dei campi STX, CMD, LEN e <Data>.
Il blocco “METROLOGY init” inizializza i pin VOLTAGE, I_HIGHGAIN e I_LOWGAIN (per le tre utenze) come
ingressi analogici e abilita la periferica ADC che campiona costantemente questi pin per ricostruire
l’andamento dei relativi segnali di tensione e corrente. In questa fase vengono infine settati i parametri di
calibrazione del metrology.
Il Blocco “TIMER load” inizializza un timer dedicato allo scadere del quale vengono letti i valori di
assorbimento restituiti dal metrology per le tre diverse utenza.
Progetto INDOLE
Innovative Domotics for Living and Entertainment
Pagina 18 di
30
Terminata la fase di inizializzazione, il software entra nello stato “MAIN loop”. In questa fase il micro EM783
esegue una serie di controlli per stabilire se sono arrivati comandi validi dal PowerLine modem o se è scaduto
il timer per la lettura del metrology.
Timer misurazioni: Allo scadere del timer viene richiamata la funzione di metrology read che restituisce i
valori relativi all’assorbimento misurato di ciascuna utenza. In particolare la funzione restituisce:
 V: valore quadratico medio della tensione di rete
 F: frequenza di lavoro
 T: temperatura di lavoro
 I: valore quadratico medio della correte assorbita in A
 P: potenza attiva in Watt
 S: potenza apparente in VA
 PF: power Factor 0.00-1.00
 Q: nonactive Power in var
Ricezione pacchetto PowerLine modem: Se viene ricevuto un pacchetto dal powerline modem, il software
ne esegue il parser, identifica il tipo comando, lo esegue e trasmette la risposta al comando richiesto. Di
seguito vengono descritti nel dettaglio i messaggi scambiati tra PowerLine e EM783. Con Rx e Tx vengono
rappresentati rispettivamente i pacchetti ricevuti e i pacchetti di risposta trasmessi dal micro EM783.
Versione SW EM783 [CMD_INQUIRY= 0x00]: comando con cui viene richiesto al micro EM783 l’identificativo
della ciabatta, il codice software e la relativa versione.
RX
<STX><0x00><0x00><crc>
TX
<STX><0x00><len><ID ciabatta|code_sw|version><crc>
ID ciabatta = es: 0xAABBCCDDEEFF
code_sw = 82023100
version = V0.1
'|' = separatore di campo
Chiusura Relay [CMD_RELAY_SET= 0x01]: comando per chiusura del relay selezionato. In questo caso l’utenza
riceve la tensione di rete 220V.
RX
<0x02><0x01><0x01><mask><crc>
(mask & 0x01) = 1 chiude relay 1 (utenza accesa)
Progetto INDOLE
Innovative Domotics for Living and Entertainment
Pagina 19 di
30
(mask & 0x02) = 1 chiude relay 2 (utenza accesa)
(mask & 0x04) = 1 chiude relay 3 (utenza accesa)
TX
<0x02><0x01><0x00><0x04>
Apertura Relay [CMD_RELAY_RESET= 0x02]: comando per apertura del relay selezionato. In questo caso
l’utenza non riceve la tensione di rete 220V.
RX
<STX><0x02><0x01><mask><crc>
(mask & 0x01) = 0 apre relay 1 (utenza spenta)
(mask & 0x02) = 0 apre relay 2 (utenza spenta)
(mask & 0x04) = 0 apre relay 3 (utenza spenta)
TX
<STX><0x02><0x00><0x05>
Lettura assorbimento [CMD_READ_CHANNEL= 0x03]: viene richiesto l’ultimo dato acquisito del metrology
dell’utenza selesionata.
RX
<STX><0x03><0x01><mask><crc>
(mask & 0x01) = 1 lettuta utenza 1
(mask & 0x02) = 1 lettuta utenza 2
(mask & 0x04) = 1 lettuta utenza 3
(mask & 0x08) = 1 lettuta utenza 1,2,3
TX
<STX><0x03><len><Data><crc>
Dove il campo Data rappresenta una combinazione dei seguenti valori:
ID ciabatta
Identificativo della ciabatta
Voltage
Tensione misurata in V*100 (220.36 -> 22036)
Frequency
Frequenza di lavoro in Hz*100 (50.23 -> 5023)
Temperature
Temperatura in °C*10 (26.9 -> 269)
K1_Status
Stato relay K1 aperto o chiuso
K1_I
Corrente consumata utenza K1 in mA
Progetto INDOLE
Innovative Domotics for Living and Entertainment
K1_P
Potenza attiva utenza K1 in Watt
K1_PF
Power factor utenza K1
K2_Status
Stato relay K2 aperto o chiuso
K2_I
Corrente consumata utenza K2 in mA
K2_P
Potenza attiva utenza K2 in Watt
K2_PF
Power factor utenza K2
K3_Status
Stato relay K3 aperto o chiuso
K3_I
Corrente consumata utenza K3 in mA
K3_P
Potenza attiva utenza K3 in Watt
K3_PF
Power factor utenza K3
Pagina 20 di
30
Progetto INDOLE
Innovative Domotics for Living and Entertainment
Pagina 21 di
30
3- Software applicativo per scheda Sensori INDOLE
In questo capitolo si fornisce la descrizione della filosofia di funzionamento del software applicativo realizzato
per il microprocessore CC1110 utilizzato per la gestione dei sensori della scheda Engine di INDOLE.
Le specifiche del terminale INDOLE prevedono il controllo di una serie di sensori e un led di emergenza da
attivare in caso di mancanza di alimentazione di rete. Queste periferiche non vengono gestite direttamente
dal sistema operativo installato sulla CPU Sitara, ma dal microcontrollore della Texas Instruments CC1110
anch’esso presente sul terminale.
FIGURA 16 - SCHEMA LOGICO CC1110
Il CC1110 deve quindi:

Raccogliere le letture del sensore di temperatura ambientale LM60

Raccogliere le letture del sensore di prossimità e intensità luminosa VCNL4000

Trasferire le informazioni raccolte al Sitara tramite comunicazione seriale

Gestire la procedura di “Emergenza”. Questa procedura permette al CC1110 di poter accendere il
Led di emergenza (MXM8-PW50) in caso di mancanza di tensione di rete all’interno di un’abitazione,
tenendo conto della luminosità ambientale presente al momento del blackout. Il Led può essere
acceso grazie al circuito di power management che permette di alimentare il CC1110 da due diverse
sorgenti: dalla tensione 3.3V prodotta a partire dalla tensione di rete o dalla batteria ricaricabile a
3.7V prevista sul terminale.

Gestire la procedura di “Notifica Presenza”. Questa procedura permette al CC1110 di notificare al
sistema operativo la presenza di una persona nei pressi del terminale. La notifica viene eseguita per
mezzo del segnale digitale CCOUT1 che collega i due microprocessori.
Progetto INDOLE
Innovative Domotics for Living and Entertainment
Pagina 22 di
30
3.1 Diagramma stati logici
Il software implementato segue la struttura logica evidenziata nello schema a blocchi sottostante.
FIGURA 17 - DIAGRAMMA STATI LOGICI
Progetto INDOLE
Innovative Domotics for Living and Entertainment
Pagina 23 di
30
3.2 Descrizione del firmware
La prima operazione che questo software implementa è quella di inizializzare le porte del micro CC1110 e le
periferiche utilizzate.
In particolare, il blocco “CPU init” inizializza i clock utilizzati dal micro, abilitata il SysTickTimer con il quale
vengono gestiti tutti i timer software necessari alla gestione dei sensori e configura tutti i pin di I/O
(ingresso/uscita) utilizzati dal micro.
Il blocco “UART init” inizializza la comunicazione seriale con la quale il CC1110 scambia i dati con la CPU
Sitara. In questa fase viene configurata la porta UART1 con le seguenti caratteristiche:
Baudrate
9600
Datasize
8
Parity mode
none
Flow control
none
Stop bits
1
TABELLA 2 - CARATTERISTICHE COMUNICAZIONE SERIALE
I pacchetti ricevuti, mediante
<STX><CMD><LEN><Data><CRC>
interrupt,
sono
considerati
validi
se
rispettano
il
formato
STX: 1 byte, carattere di inizio pacchetto (valore costante 0x02);
CMD: 1 byte, comando da eseguire;
LEN: 1 byte, lunghezza del campo <Data>;
<Data>: payload del pacchetto (dim max 255 byte);
CRC: 1 byte, contiene il valore 1 + somma su un byte dei campi STX, CMD, LEN e <Data>.
Il blocco “SENSOR init” inizializza le periferiche necessarie per la gestione ed il controllo dei sensori di
temperatura e di prossimità e luce ambientale. In particolare per poter leggere il sensore di temperatura
LM60 viene configurata la porta ADC del micro, mentre per la lettura del sensore di prossimità e luce
ambientale VCNL4000 viene abilitata l’interfaccia i2c bus del micro.
Il Blocco “TIMER load” inizializza un timer dedicato (SensTout) allo scadere del quale vengono letti i sensori
di temperatura, prossimità e luce ambientale.
Terminata la fase di inizializzazione, il software entra nello stato “MAIN loop”. In questa fase il micro CC1110
esegue una serie di controlli per stabilire se sono arrivati comandi validi dal Sitara tramite protocollo seriale
o se è scaduto il timer per la lettura dei sensori.
Progetto INDOLE
Innovative Domotics for Living and Entertainment
Pagina 24 di
30
Ricezione pacchetto seriale: Se viene ricevuto un pacchetto sulla seriale, il software ne esegue il parser,
identifica il tipo comando, lo esegue e trasmette al Sitara la risposta al comando richiesto. Di seguito vengono
descritti nel dettaglio i messaggi scambiati tra Sitara e CC1110. Con Rx e Tx vengono rappresentati
rispettivamente i pacchetti ricevuti e i pacchetti di risposta trasmessi dal micro CC1110.
Versione SW CC1110 [PROT_CMD_VER= 0x00]: comando con cui viene richiesto al CC1110 il codice software
e la relativa versione.
RX
<STX><0x00><0x00><crc>
TX
<STX><0x00><15><code_sw|version><crc>
code_sw = 82023500
version = V0.1
'|' = separatore di campo
Reset [PROT_CMD_RESET= 0x01]: comando per eseguire un reset software del micro CC1110.
RX
<STX><0x01><0x00><crc>
TX
<STX><0x01><0x00><crc>
Il micro resetta solo dopo aver terminato la trasmissione della risposta.
ON/OFF LED di emergenza [PROT_CMD_LED= 0x02]: commando per accensione o spegnimento del led di
emergenza.
RX
<STX><0x02><0x01><status><crc>
status: 1 ON, 0 OFF
TX
<STX><0x02><0x00><crc>
Lettura sensore di temperatura LM60 [PROT_CMD_READ_TEMP= 0x03]: viene richiesto l’ultimo dato
acquisito della temperatura ambientale. Il valore viene restituito su due byte e rappresenta il valore della
temperatura in °C*10 (esempio 257 equivale a 25.7 °C)
RX
<STX><0x03><0x00><crc>
Progetto INDOLE
Innovative Domotics for Living and Entertainment
TX
Pagina 25 di
30
<STX><0x03><0x02><TEMP_H><TEMP_L><crc>
TEMP_H: byte più significativo della temperatura con segno
TEMP_L: byte più significativo della temperatura
Lettura sensore prossimità e luce ambientale [PROT_CMD_READ_PROX= 0x04]: viene richiesto l’ultimo dato
acquisito dal sensore di prossimità e luce ambientale.
RX
<STX><0x04><0x00><crc>
TX
<STX><0x04><0x04><PROX_H><PROX_L><LIGHT_H><LIGHT_L><crc>
PROX_H: byte più significativo sensore prossimità
PROX_L: byte più significativo sensore prossimità
LIGHT_H: byte più significativo luminosità amb
LIGHT_L: byte più significativo luminosità amb
Attivazione emergenza [PROT_CMD_EMERGENCY= 0x05]: comando per attivazione della procedura di
emergenza in caso di mancanza di alimentazione. Attivandola il CC1110 stabilisce se accendere la luce di
emergenza in caso di mancanza di alimentazione in base alla soglia di luminosità ambientale impostata con
questo comando
RX
<STX><0x05><0x03><ENABLE><LIGHT_THRE_H><LIGHT_THRE_L><crc>
ENABLE: 1 abilita emergenza, 0 non abilita emergenza
LIGHT_THRES_H: byte più significativo della soglia luminosità amb
LIGHT_THRES_L: byte più significativo della soglia luminosità amb
TX
<STX><0x05><0x00><crc>
Attivazione notifica presenza [PROT_CMD_PRESENCE = 0x05]: comando per attivazione della procedura di
notifica al Sitara della presenza di persone vicino al terminale. Attivandola il CC1110 muove il segnale CCOUT1
che lo collega al Sitara in base alla soglia di prossimità impostata con questo comando. Livello del segnale
pari a 1 presenza, 0 no.
RX
<STX><0x06><0x01><ENABLE><PROX_THRE_H><PROX_THRE_L><crc>
ENABLE: 1 abilita notifica presenza, 0 non abilita notifica
PROX_THRE_H: byte più significativo della soglia prossimità
Progetto INDOLE
Innovative Domotics for Living and Entertainment
Pagina 26 di
30
PROX_THRE_L: byte più significativo della soglia prossimità
TX
<STX><0x06><0x00><crc>
Timer sensori: Allo scadere del timer SensTout vengono letti i sensori di temperatura, prossimità e luce
ambientale. In questa fase inoltre vengono controllate le flag per la gestione delle procedure di “Emergenza”
e “Notifica Presenza“.
 “Emergenza”: se questa procedura viene attivata, il software controlla se il micro è alimentato
tramite batteria e se il valore letto di intensità luminosa è inferiore ad un determinata soglia. Se
entrambe le condizioni sono vere il software accende il Led di emergenza e lo mantiene acceso fin
quando non viene ristabilita la tensione di rete o fin quando l’intensità luminosa ritorna sopra soglia.
Per evitare false accensioni/spegnimenti del led, la procedura di “Emergenza” viene eseguita
utilizzando un tempo di debounce di 400msec.
 “Notifica Presenza”: se questa procedura viene attivata, il software controlla se il valore di prossimità
letto supera un determinata soglia. Se questa condizione è vera il CC1110 notifica al Sitara la presenza
di una persona vicina al terminale INDOLE andando a settare a livello logico alto il segnale CCOUT1
che collega i due microprocessori. Quando invece la persona si allontana dal terminale il segnale
viene riportato basso.
Per evitare false notifiche verso il Sitara, la procedura di “Notifica Presenza” viene eseguita
utilizzando un tempo di debounce di 400msec.
Progetto INDOLE
Innovative Domotics for Living and Entertainment
Pagina 27 di
30
4 – Sistema operativo: Android 4.2.2 kernel Linux 3.2.0
Il sistema operativo adottato a supporto della piattaforma è un sistema Android Kitkat 4.4.2, derivato dal BSP
che Texas Instrument distribuisce a corredo dei sistemi Sitara, ovvero quello prelevato dal repository
denominato “rowboat”.
Il kernel associato è un Kernel Linux 3.2.0.
Nello specifico non sono state apportate modifiche nel codice alla parte di sistema (framework ed applicativi)
Android, e per quel che riguarda quella componente ci si è limitati ad una opportuna configurazione per
adattarsi alle peculiarità del prodotto. In particolare: presenza di scheda di rete wireless Wilink8, e processore
AM3357, ovvero senza GPU.
Poichè la piattaforma di riferimento era la beaglebone Black. l'istruzione di comando utilizzata è stata:
make TARGET_PRODUCT=beaglebone droid kernel_build wl12xx_compat -j4
Va segnalato che, come da indicazioni presenti sul wiki Texas Instrument, la app per gestire la galleria
immagini, ed altre app che utilizzano le accelerazione SGX, non funzioneranno correttamente su questa
piattaforma:
Applications which depends on OpenGLES 2.0 APIs (e.g. Gallery) would not work correctly without
SGX libraries
Live Wallpapers depends on OPENGLES2.0 APIs and will not load if SGX is not enabled. Change to
Static wallpaper after booting. Or disable Live wallpaper from device/ti/<product-name>/overlay
Per il resto si tratta di un sistema Android completo, con possibilità di debug via seriale, oppure tramite usb
o wifi, con lo strumento software adb contenuto nel sistema Android standard.
Per la compilazione di tale sistema sono state seguite le istruzioni riportate sul wiki di Texas Instrument della
Developer Guide:
http://processors.wiki.ti.com/index.php/TI-Android-JB-4.2.2-DevKit-4.1.1_DeveloperGuide
La compilazione di Android richiede uno dei seguenti ambienti software sul computer di compilazione:
- Ubuntu 10.04 – 64bit con i seguenti pacchetti:
git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev libgl1-mesa-dev g++-multilib
mingw32 tofrodos python-markdown libxml2-utils xsltproc minicom tftpd uboot-mkimage expect
- Ubuntu 12.04 – 64bit con i seguenti pacchetti:
Progetto INDOLE
Innovative Domotics for Living and Entertainment
Pagina 28 di
30
git-core gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-coredev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32
openjdk-6-jdk tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 minicom tftpd
uboot-mkimage expect libgl1-mesa-dri
L'SDK Java richiesto è il: jdk-6uXX-linux-x64.bin where XX is the JDK 6 update version.
Per quanto riguarda il kernel, sono state apportate solo leggeri aggiustamenti sulla piattaforma:
1 - è stato agganciato il display LCD 24 linee. Questo ha richiesto la riorganizzazione del muxing nel seguente
modo:
{"lcd_data0.lcd_data0",
OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA},
{"lcd_data1.lcd_data1",
OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA},
{"lcd_data2.lcd_data2",
OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA},
{"lcd_data3.lcd_data3",
OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA},
{"lcd_data4.lcd_data4",
OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA},
{"lcd_data5.lcd_data5",
OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA},
{"lcd_data6.lcd_data6",
OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA},
{"lcd_data7.lcd_data7",
OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA},
{"lcd_data8.lcd_data8",
OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA},
{"lcd_data9.lcd_data9",
OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA},
{"lcd_data10.lcd_data10",
OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA},
{"lcd_data11.lcd_data11",
OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA},
{"lcd_data12.lcd_data12",
OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA},
{"lcd_data13.lcd_data13",
OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA},
{"lcd_data14.lcd_data14",
OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA},
{"lcd_data15.lcd_data15",
OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA},
{"gpmc_ad8.lcd_data16",
OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
{"gpmc_ad9.lcd_data17",
OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
{"gpmc_ad10.lcd_data18",
OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
{"gpmc_ad11.lcd_data19",
OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
{"gpmc_ad12.lcd_data20",
OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
Progetto INDOLE
Innovative Domotics for Living and Entertainment
{"gpmc_ad13.lcd_data21",
OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
{"gpmc_ad14.lcd_data22",
OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
{"gpmc_ad15.lcd_data23",
OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
{"lcd_vsync.lcd_vsync",
OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
{"lcd_hsync.lcd_hsync",
OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
{"lcd_pclk.lcd_pclk",
Pagina 29 di
30
OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
{"lcd_ac_bias_en.lcd_ac_bias_en", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
{"gpmc_clk.gpio2_1",
OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT},
2 - è stato previsto lo sviluppo del driver per la comunicazione verso il microcontrollore.
Il kernel a cui ci si è appoggiati è quello rilasciato da Texas assieme al suo bsp per la piattaforma SItara: Linux
kernel versione 3.2.0.
Per la compilazione di tale kernel è stato usato il crosscompilatore disponibile all'interno dell'ambiente
Android SDK: arm-eabi-4.6-gcc e gli altri strumenti del tool.
La configurazione prescelta per generare il menuconfig è stata quella denominata:
am335x_evm_android_defconfig, per cui la sequenza di comandi da adottare per preparare l'immagina
binaria del kernel è stata:
$ cd <android source path>/kernel
$ make ARCH=arm CROSS_COMPILE=arm-eabi- distclean
$ make ARCH=arm CROSS_COMPILE=arm-eabi- am335x_evm_android_defconfig
$ make ARCH=arm CROSS_COMPILE=arm-eabi- uImage
L'immagine ottenuta andrà poi copiata nella partizione di boot della scheda uSD da preparare, assieme al
bootloader (che non è stato alterato dal nostro sviluppo).
Le operazioni da compiere sono pertanto:
$ mkdir image_folder
$ cp uEnv.txt image_folder
$ cp kernel/arch/arm/boot/uImage image_folder
$ cp u-boot/u-boot.img image_folder
$ cp u-boot/MLO image_folder
Progetto INDOLE
Innovative Domotics for Living and Entertainment
Pagina 30 di
30
$ cp out/target/product/<product-name>/rootfs.tar.bz2 image_folder
$ cp Media_Clips image_folder
$
cp
<android-sources>/external/ti_android_utilities/am335x/mk-mmc/mkmmc-android.sh
image_folder
$ cd image_folder
$ sudo ./mkmmc-android.sh /dev/sd<sd card mount-point> MLO u-boot.img uImage uEnv.txt
rootfs.tar.bz2 Media_Clips
Da quel momento in poi la scheda uSD è pronta per essere inserita nella scheda ed avviata.
Scarica