• Non ci sono risultati.

4. Sviluppo del Firmware

4.1 Struttura del firmware

4.1.1 Comandi di controllo dell’ADSI

Il firmware scritto deve essere in grado di riconoscere i comandi dedicati alla CPU dell’ADSI in modo da eseguire correttamente le operazioni richieste dal software.

Si sono implementati i seguenti comandi: 1) Lettura di un registro SFR;

2) Scrittura in un registro SFR; 3) Lettura della memoria DPRAM; 4) Lettura della memoria SRAM.

Nell’analisi di questi comandi si trascureranno i primi due byte, che rappresentano il codice identificativo e la lunghezza del messaggio, e l’ultimo che contiene il valore del checksum.

Lettura registro SFR

La richiesta per la lettura di un registro SFR avviene attraverso il comando “Read SFR” che assume la struttura riportata nella tabella 4.2.

Tabella 4.2 Formato della richiesta di lettura di un registro SFR

Indice del byte 0 1

Il messaggio è composto da due byte dove il primo contiene l’istruzione “Read SFR” identificata dal codice esadecimale “FF”. Al secondo byte invece è associato l’indirizzo del registro che si vuole leggere.

Una volta che la CPU riconosce il comando ricevuto prepara la risposta che assume la forma rappresentata nella tabella 4.3.

Tabella 4.3 Formato della risposta di lettura di un registro SFR

Indice del byte 0 1 2

Nome del campo Read SFR Address Data

In questo caso i primi due byte sono la ripetizione del comando “Read SFR” e dell’indirizzo del registro. Nel terzo byte è contenuta invece l’informazione prelevata dal registro letto. La ripetizione dei primi due campi permette al software di identificare la risposta ricevuta in modo da associarla al comando trasmesso.

Scrittura registro SFR

Il comando di scrittura è rappresentato dal codice esadecimale “FE” ed è indicato con il nome di “Write SFR”.

La sua struttura è rappresentata nella tabella 4.4 qui di seguito riportata.

Tabella 4.4 Formato di richiesta di scrittura in un registro SFR

Indice del byte 0 1 2 3

Nome del campo Write SFR Address Data Write Mask

Il secondo byte riporta il valore dell’indirizzo del registro in cui scrivere il dato presente sul terzo byte del messaggio.

Il quarto campo, indicato con l’appellativo di “Mask”, rappresenta il valore della maschera da applicare al dato da scrivere.

La scrittura con maschera significa: 1) lettura del vecchio valore;

2) azzeramento della porzione da scrivere; 3) scrittura della porzione voluta.

Questo consente di registrare solo una porzione del registro in modo da non modificare necessariamente tutto il suo contenuto.

Poiché si è preferito far gestire queste operazioni alla CPU è stato necessario introdurre il campo “Mask”.

Tale operazione risulta essere importante in quanto si è visto che molti registri contengono diversi campi al loro interno e la modifica di uno di questi non comporta necessariamente la modifica degli altri.

La risposta processata assume la forma riportata nella tabella 4.5.

Tabella 4.5 Formato di risposta di scrittura di un registro SFR

Indice del byte 0

Nome del campo Write SFR

Il messaggio replica solo il comando eseguito.

Lettura nella DPRAM

Quando l’utente richiede via software di visualizzare sull’Oscilloscopio Virtuale le tracce selezionate viene inoltrato alla CPU un messaggio con lo scopo di accedere alla DPRAM e di prelevare i dati caricati al suo interno. Nella tabella 4.6 è riportata la struttura di questo messaggio:

Tabella 4.6 Formato di richiesta di lettura DPRAM

Indice del byte 0

Nome del campo Read DPRAM

Il comando “Read DPRAM” è rappresentato dal codice identificativo esadecimale “FD”.

Poiché il buffer implementato non è abbastanza grande da poter scaricare tutta l’intera memoria in una sola trasmissione si è scelto di trasferire 128 byte alla volta.

Questo implica che per poter visualizzare le quattro tracce sono necessarie: 1024 / 128 = 8

richieste di trasmissione consecutive30.

La trama di risposta inviata dalla CPU al PC è riportata nella tabella 4.7.

Tabella 4.7 Formato di risposta ad una lettura DPRAM

Indice del byte 0 1 2..129

Nome del campo Read DPRAM Block Num Data

Nel campo indicato con il nome “Block Num” è trasferita l’informazione associata al pacchetto di memoria che viene trasmesso nei 128 byte consecutivi.

E’ bene sottolineare che tale informazione ha il solo scopo di ricostruire correttamente le tracce sull’Oscilloscopio Virtuale e non viene sfruttata per chiedere una nuova trasmissione qualora il pacchetto ricevuto dal PC sia risultato corrotto. In tale circostanza infatti si è preferito perdere l’integrità dell’informazione anziché creare del rallentamento nella trasmissione poiché la modalità Oscilloscopio Virtuale deve essere Real Time.

Lettura nella SRAM

L’ultima istruzione dedicata all’ADSI è quella necessaria per la lettura della memoria SRAM il cui comando, “Read SRAM”, ha come identificativo l’esadecimale “FC”. Nella tabella a seguire è riportato il messaggio inviato dal software quando viene inoltrata una richiesta di lettura da SRAM.

Tabella 4.8 Formato di richiesta di lettura nella SRAM

Indice del byte 0 1-2

Nome del campo Read SRAM Block Num

Si osserva subito che, a differenza della lettura nella DPRAM, in questo caso è richiesta anche l’informazione associata al numero del blocco da trasmettere questo perché, nel caso di errore di trasmissione, il software avanza una nuova richiesta di lettura del blocco danneggiato. I dati salvati nella SRAM infatti sono usati per un’analisi post-processing in modo da poter mettere in evidenza eventuali anomalie e non devono per cui subire alterazioni durante il trasferimento dall’ADSI al PC.

Il numero di blocchi da trasmettere inoltre è variabile in quanto la finestra temporale e il numero di campioni memorizzati nella SRAM è configurabile dall’utente. Nel caso della SRAM si è deciso di trasmettere 240 byte alla volta sfruttando quasi completamente il buffer. Poiché non è detto che il numero di campioni da trasferire sia un multiplo di 240 l’ultimo blocco trasmesso conterrà più campioni di quelli voluti. Si è deciso quindi di effettuare la scrematura dei byte in eccesso una volta ricevuti sul PC attraverso il software realizzato. E’ evidente che il campo associato al “Block Num” necessita di due byte visto che può essere richiesto anche di scaricare l’intera memoria da 1 MByte con il seguente risultato:

La risposta preparata dalla CPU assume la stessa forma vista per il trasferimento dei dati presenti nella memoria DPRAM, con l’unica differenza dell’ampiezza dei campi “Block Num” (come già detto è composto da 2 byte) e “Data”. La struttura di tale messaggio è indicata nella tabella 4.9.

Tabella 4.9 Formato di risposta ad una lettura nella SRAM

Indice del byte 0 1-2 3..242

Nome del campo Read SRAM Block Num Data

Qualsiasi altro messaggio proveniente dal PC che contiene un comando differente da quelli sopra descritti non viene interpretato dalla CPU e viene girato sulla seconda UART che provvede alla sua trasmissione verso l’ASIC.

Documenti correlati