Il protocollo [versione 1.0] stabilisce le regole di comunicazione tra il PC e i moduli picSID. Lo scopo del protocollo è inviare una stringa di comando al SID e ricevere, in alcune modalità, una risposta di conferma.
SIDCom è un protocollo asincrono Half-Duplex a 8 bit, senza parìtà, 1 bit di Start e 1 bit di Stop.
La velocità di trasmissione è di 9,600bps, con previsione di valutare la possibile estensione fino a 38,400bps o comunque alla velocità di comunicazione delle porte MIDI.
Ogni messaggio deve essere intervallato da minimo un ‘character time’ (1.04msec a 9600bps).
Nella Versione 1 (attuale) del protocollo, la comunicazione è tra il PC e 1 SID.
In versioni successive, potranno essere utilizzati fino a 4 moduli SID, utilizzando i bit riservati all'indirizzamento
La scelta di utilizzare solo 2 byte comporta qualche acrobazia nella costruzione e decodifica dei messaggi, però massimizza la velocità di comunicazione e quindi la latenza di risposta del SID.
Il PC trasmette un messaggio composto da 2 parole da 1 byte:
P0 = istruzione
P1 = dati
Sono previste 2 modalità operative:
REG |
Comando a Registro Il PC indirizza un registro SID e invia i dati da scrivere nel registro selezionato. L’operazione è di sola scrittura per cui vengono indirizzati solo i primi 25 registri dei 29 disponibili. |
CMD | Istruzione di Comando Il PC invia una tabella di comandi (fino a 32 diverse combinazioni) che viene interpretata dal SID. La parola P1 contiene eventuali istruzioni aggiuntive (parametri) per l'esecuzione del comando. |
B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
0 = REG | ADR1 | ADR0 | A4 | A3 | A2 | A1 | A0 |
1 = CMD | ADR1 | ADR0 | OP4 | OP3 | OP2 | OP1 | OP0 |
B7 = 0 | modalità di indirizzamento diretto del SID Il byte P1 contiene il dato da scrivere nel registro selezionato |
B6..B5 | Indirizzo del modulo picSID (riservati a future espansioni). |
B4..B0 | Indirizzo del registro da scrivere [A0..A25 = h00..h19] |
B7 = 1 | modalità di comando per funzioni speciali |
B6..B5 | Indirizzo del modulo picSID (riservati a future espansioni). |
B4..B0 | Selezione del comando da eseguire. |
CMD | OP4 | OP3 | OP2 | OP1 | OP0 | Descrizione |
NOP | 0 | 0 | 0 | 0 | 0 | nessuna azione |
INI | 0 | 0 | 0 | 0 | 1 | Inizializza il SID (nessuna uscita audio) |
TST | 0 | 0 | 0 | 1 | 0 | Test - il SID viene inizializzato e genera un'onda quadra a 440Hz sulla voce 1 |
MOD | 0 | 0 | 0 | 1 | 1 | Abilita/Disabilita la modulazione definita in P1 |
SVP | 0 | 0 | 1 | 0 | 0 | Salve nella EEPROM del PIC l'attuale configurazione [PRESET] indicata in P1 |
LDP | 0 | 0 | 1 | 0 | 1 | Carica nel SID da EEPROM la configurazione [PRESET] indicata in P1 |
ECH | 0 | 0 | 1 | 1 | 0 | Abilita/Disabilita l'eco del comando (toggle) - default=Echo On |
x | 0 | 0 | 1 | 1 | 1 | riservato |
ANA | 0 | 1 | 0 | 0 | 0 | Predispone il pin indicato in P1 come ingresso analogico |
DGI | 0 | 1 | 0 | 0 | 1 | Predispone il pin indicato in P1 come ingresso digitale |
DGO | 0 | 1 | 0 | 1 | 0 | Predispone il pin indicato in P1 come uscita digitale |
HGH | 0 | 1 | 0 | 1 | 1 | Attiva il pin indicato in P1 (se predisposto come uscita) |
LOW | 0 | 1 | 1 | 0 | 0 | Disattiva il pin indicato in P1 (se predisposto come uscita) |
DVL | 0 | 1 | 1 | 0 | 1 | Legge il valore digitale del pin indicato in P1 (se predisposto) |
AVL | 0 | 1 | 1 | 1 | 0 | Legge il valore analogico del pin indicato in P1 (se predisposto ) |
x | 0 | 1 | 1 | 1 | 1 | riservato |
B7..B0 | valore del dato da scrivere nel registro selezionato [valori da 0x00 a 0xFF] |
B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
x | PS6 | PS5 | PS4 | PS3 | PS2 | PS1 | PS0 |
PS6..PS0 | Indice del Preset da salvare o leggere da EEPROM. I possibili 128 Preset sono limitati dalla dimensione della memoria disponibile. Attualmente, il limite massimo è di 12 Preset (12 x 30 byte = 360 byte). Il formato dei Preset non è al momento definito. |
NOTA BENE: l'esecuzione di questi comandi richiede
tempo ed è soggetta a temporarizzazioni critiche.
E' a cura del programma di gestione attendere un periodo di tempo ragionevole prima di emettere nuovi comandi.
B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
DIV2 | DIV1 | DIV0 | SRC1 | SRC0 | DST2 | DST1 | DST0 |
DIV [B7..B5] |
Coefficiente di scalatura del valore letto dalla sorgente, espresso in forma di esponenti di 2.
Il valore minimo di 0, trasferisce inalterato il valore della sorgente alla destinazione. Il valore massimo è di 7, pari a una divisione per 128 del valore sorgente. |
||||||||||||||||||||||||||||||||||||
B4..B3 Selezione della sorgente |
|
||||||||||||||||||||||||||||||||||||
B2..B0 Selezione della destinazione |
|
B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
x | x | x | x | x | IO2 | IO1 | IO0 |
IO2..IO0 | Numero del pin di I/O selezionato |
I comandi non specificati nelle precedenti tabelle non utilizzano la Parola P1
Progetto Protocollo
in preparazione