DPM Serial Protocol


Protocollo di comunicazione seriale DPM

(Dilbertian Protocol Modified)

Nota sul nome del protocollo
Il nome “Dilbertiano” proviene dalla prima versione di questo protocollo, che chiamammo “IDP – Inverted Dilbertian Protocol” (2010), nella quale gli zeri erano rappresentati con una cella “stretta” e gli uni con una cella “larga” (“0″ magro e “1″ grasso – come da vignetta seguente tratta da “Dilbert” di Scott Adams – www.dilbert.com).

ENGLISH

ITALIAN
dilbertian_one


Un nuovo protocollo ?

Il sistema Theremino si propone di fornire un sistema di Input-Output per PC semplice, poco costoso e facile da usare. Per renderlo facile da usare sono necessari l’auto-numerazione dei dispositivi e il riconoscimento del tipo di ognuno di essi, per semplificare e ridurre al minimo il costo dei collegamenti è necessaria la comunicazione su un filo solo.

Non esistendo un protocollo con le caratteristiche necessarie abbiamo dovuto scriverlo, la versione attuale raccoglie il meglio di molti anni di sperimentazioni e ricerche.


Caratteristiche

  • Comunicazione seriale bidirezionale su un solo filo
  • Auto-configurazione
  • Auto-riconoscimento dei dispositivi collegati.
  • Numero di dispositivi variabile da 1 a 200
  • Numero di byte trasmessi e ricevuti variabile a seconda del tipo di dispositivo
  • Velocità di trasmissione fino a 4 MegaBit/sec per trasmettere molti dati con cavi corti
  • Velocità di trasmissione fino a 100 KiloBit/sec per cavi molto lunghi (fino a 10 Km)
  • Alta efficienza di comunicazione (da 10 a 20 volte maggiore rispetto al CAN)


Aspetti elettrici

La trasmissione avviene su un solo filo, ma è necessaria una massa di riferimento e una tensione di alimentazione, per cui i fili sono normalmente 3.

Ogni dispositivo che supporta il protocollo DPM deve avere un connettore di ingresso (verso il Master) e uno di uscita verso i dispositivi a valle (Slaves)

I connettori normalmente usati sono da 3 pin, distanti 2.54 mm, femmina dal lato che fornisce alimentazione e maschio dal lato del dispositivo che riceve alimentazione.

Sulla catena di comunicazione deve essere presente un Master (che fornisce sincronismo e alimentazione) e un certo numero di dispositivi collegati in cascata (chiamati Slave).

La tensione che il Master fornisce sulla linea è di 5 V, con la stessa tolleranza e con la stessa corrente massima dei 5 V che si prelevano dal connettore USB.

La corrente massima che il Master può fornire rappresenta un limite al numero e al tipo di dispositivi collegabili. Questa corrente, che è normalmente di 250 mA, potrebbe essere aumentata fino a 500 mA, andando oltre si supererebbe la capacità dell’ USB e si imporrebbero caratteristiche inusuali ai connettori.

Il numero massimo di dispositivi collegabili è limitato dai fattori seguenti:
- la corrente massima che il “master” può fornire
- il numero massimo di byte che la linea sopporta nel tempo di ciclo

Sia il “Master” che gli “Slave” sono collegati alla linea con un resistore di smorzamento che agisce anche come passa basso contro i disturbi radio e come protezione contro le sovratensioni. Il valore di questo resistore è normalmente da 33 a 330 ohm


Formato di trasmissione

Si usa un formato Non-Return-to-Zero (NRZ) standard.

Default format =  8, N, 1
- 1 start bit
- 8 data bits
- no-parity
- 1 stop bit


Livelli della linea dati “Com.Line”

La linea a riposo è a livello alto (3.3 V)
Il segnale “1″ è indicato con 3.3 V
Il segnale “0″ è indicato con 0 Vdilbertian two


Tempi di ripetizione e velocità di trasmissione

Velocità di trasmissione
Si usano velocità basse quando la lunghezza, e quindi la capacità dei cavi di collegamento, sono alte. Quando invece le distanze sono brevi si possono usare velocità alte e comunicare con un gran numero di dispositivi (o comunicare con dispositivi che richiedono un gran numero di byte) Sono stabilite le velocità denominate da “1″ (1 k bit/Sec) fino a “12″ (4 mega bit/Sec)

Numero massimo di byte
A seconda della velocità di trasmissione il numero massimo di byte che si possono trasmettere è elencato nella tabella seguente.


Tempi, distanze e numero di byte

Tutti i dispositivi devono implementare per lo meno la velocità “7″ che è considerata la velocità di default.  Se si desidera impostare una velocità diversa dalla “7″ tutti i dispositivi della catena devono supportarla.

La “massima distanza” dipende dalle caratteristiche dei cavi, i valori della tabella sono calcolati per un cavo schermato RG58 da 50 ohm con capacità di 100pF per metro.

Alle velocità basse il numero di “slaves” è limitato dal numero massimo di byte che si possono trasmettere in 30 millisecondi. (ogni slave usa almeno un byte e si pretende una ripetizione abbastanza veloce da rendere i movimenti fluidi)

Alle velocità alte il numero di “slaves” è limitato dalla capacità massima, ogni “slave” aggiunge una capacità di circa 40..60 pF e riduce la massima distanza di circa 50 cm.

La capacità è stata calcolata sulla base di 30pF per ogni “slave” cui si aggiungono altri 20pF per un cavo di collegamento da 20 centimetri e altri 10pF per tenere conto della resistenza aggiuntiva provocata dal “bilateral switch” (totale: 60pF)


Massima lunghezza del cavo di comunicazione rispetto alla corrente di alimentazione e alla resistenza per metro

dilbertian tre

Nel calcolo della distanza si tiene conto che la caduta di tensione sul polo di massa, non superi i 200mV. La caduta di tensione sul filo di alimentazione, non provocando errori di trasmissione, può essere anche molto maggiore (i 5 V possono scendere fino a 3.3 V senza creare problemi) In caso di cavi schermati il polo di massa è lo schermo, che normalmente ha una resistenza minore di quella dichiarata, quindi la distanza sarà maggiore.


Capacità dei cavi di collegamento

I valori di “massima lunghezza” indicati nella tabella precedente sono validi solo per cavi di collegamento con capacità di circa 100 pF per metro. La tabella seguente mostra le correzioni da applicare per i cavi di uso più comune.

appendix two


Tipi di dispositivi

I dispositivi sono identificati con un numero da 0 a 199 che identifica il suo “Type”.
Nella fase di riconoscimento e numerazione ogni dispositivo si identifica con questo “Type”.

Attualmente sono definiti i dispositivi seguenti:

Numero massimo di dispositivi
Il numero massimo di dispositivi collegabili è limitato da:
- il numero massimo di byte che possono essere trasmessi a seconda della velocità selezionata.
- la corrente massima che il “master” può fornire (normalmente 500 mA)
- il massimo numero di dispositivi supportato dal protocollo che è 200 (da 0 a 199)


Tipi di pin

I pin sono identificati con un numero da 0 a 255 che identifica il suo “PinType”.

OUTPUT Pin Typedilbertian fiv

INPUT Pin Type
dilbertian six


Comunicazione Master – Slave  (linea seriale)

(*1) Comandi di servizio.
(*2) Il comando Recog viene usato solo dal master e dagli slaves durante il riconoscimento.
(*3) Comunicazione veloce – il master scambia i valori con tutti gli slaves usando un solo scambio USB
(*4) Comandi di comunicazione sicura verso il singolo slave
(*5) Comandi speciali

Tutti i comandi hanno codici da 200 a 255, per evitare che, in caso di errori, gli ID e i tipi degli slave (da 0 a 199) possano venir interpretati come comando. (SetSpeed non conta perché non viene mai inviato lungo la linea seriale ma solo dall’HAL, verso il Master, via USB)


Comunicazione Host – Master  (USB)

Comandi da “Host” verso “Master”

Command name        ID            PARAMETERS
                    USB_TxData[0] USB_TxData[1 to n]
--------------------------------------------------------------
RecogStart          CommandID,    Nbytes
FastDataExchange    CommandID,    from 0 to 60 data bytes
SetupSlavePins      CommandID,    SlaveId, Nbytes
SetMasterName       CommandID,    MasterName (zero terminated)
GetMasterName       CommandID     -
SendValuesToSlave   CommandID,    SlaveId, Nbytes, Byte1....ByteN
GetValuesFromSlave  CommandID,    SlaveId, Nbytes
SendBytesToSlave    CommandID,    SlaveId, Nbytes, Byte1....ByteN
GetBytesFromSlave   CommandID,    SlaveId, Nbytes
SetSpeed            CommandID,    CommSpeed

Risposte da “Master” verso “Host”

Command name        RESPONSE      RETURN VALUES
                    USB_RxData[0] USB_RxData[1 to n]
-----------------------------------------------------------------
RecogStart          0 = OK        Nslaves, SlaveType1...SlaveTypeN
FastDataExchange    0 = OK        from 0 to 63 data bytes
SetupSlavePins      0 = OK        -
SetMasterName       0 = OK        -
GetMasterName       0 = OK        MasterName (zero terminated)
SendValuesToSlave   0 = OK        -
GetValuesFromSlave  0 = OK        Byte1....ByteN
SendBytesToSlave    0 = OK        -
GetBytesFromSlave   0 = OK        Byte1....ByteN
SetSpeed            0 = OK        -

La posizione zero del Buffer USB indica se il comando è stato eseguito dal “Master” con successo.


Calcolo dei CRC

Tutti i CRC usati sono calcolati su un certo numero di byte consecutivi e il CRC risultante è un byte. Per il calcolo del CRC si usa un algoritmo basato sul “Longitudinal redundancy check”.

Longitudinal redundancy check

 Dim CRC as Byte
 CRC = 0
 For each byte b
     CRC = CRC Xor b
 Next

Per evitare “collisioni” tra sequenze banali ( ad esempio 0000 = 1111 o 123 = 321 ) e  sequenze semplici che producono CRC validi ( ad esempio 0000 con CRC = 0 ) il metodo precedente viene modificato con una permutazione.

Il calcolo del CRC risultante è efficiente ed estremamente semplice.

Calcolo del CRC usato in questo protocollo

Dim CRC as Byte
CRC = 0
For each byte b
    CRC = CRC Xor b
    CRC = CRC + 1
Next


Impostazione della velocità di trasmissione

Se si decide di usare una velocità di trasmissione diversa da quella di default, allora il “master” deve comunicare a tutti i dispositivi della catena la nuova velocità da usare.

Questa impostazione deve essere possibile anche prima di aver effettuato un ciclo di riconoscimento dei dispositivi e deve essere possibile anche con linee di trasmissione molto lunghe. Pertanto esiste il comando speciale che viene ora illustrato.

1 – Il Master mantiene la linea alta per 50 mS
2 – Tutti gli Slave sono sicuramente posizionati in attesa di un carattere
3 – Il Master genera un BREAK (linea a livello basso per 12 bit alla minima velocità
4 – Il Master emette un carattere 55h (01010101) al baud rate desiderato
5 – Tutti gli Slave deducono il baud rate da questo byte (auto-baud)
6 – Il Master invia un byte che specifica la “Speed” (da 1 a 12)
7 – Il Master invia un byte di CRC calcolato su due byte (cmd/speed)
8 – Se lo Slave riscontra un errore non cambia la sua velocità

dilbertian eig

Verifica della velocità di trasmissione

Se imposta una velocità troppo alta per la linea di trasmissione in uso è possibile che alcuni dispositivi della catena non siano in grado di sostenere la velocità impostata e che si verifichino errori durante la trasmissione dei dati.

Se gli errori di trasmissione sono pari a zero o minori dello 0.1% allora la velocità impostata è valida.


Riconoscimento e numerazione

1 – Il Master emette verso gli Slave tutta la sequenza di impostazione “Speed” per assicurarsi che tutti comunichino alla stessa velocità.
2 – Il Master non trasmette comandi per 50 millisecondi.
3 – A questo punto tutti gli Slave dovrebbero essere in attesa di un comando.
4 – Il Master emette un codice “254″ (RecogStart).
5 – Tutti gli Slave mettono il weak-pull-up (100-400 uA) sul filo di input-output e aprono il collegamento di uscita verso i dispositivi a valle. Inoltre essi non rispondono più a nessun comando tranne il “253″ (Recog).
6 – Il Master” emette un codice “253″ (richiesta del tipo) e poi un byte con il numero “0″, il primo dispositivo della catena risponde un byte con il suo tipo, toglie il pull-up, collega l’uscita verso gli Slave a valle e non risponde più a nessun comando.
7 – Il Master emette un codice “253″ (richiesta del tipo) e poi un byte con il numero “1″, il secondo dispositivo della catena risponde un byte con il suo tipo, toglie il pull-up, collega l’uscita verso gli Slave a valle e non risponde più a nessun comando.
8 – Il Master emette un codice “253″ (richiesta del tipo) e poi un byte con il numero “2″,

           …. il “253″ (richiesta del tipo) viene ripetuto fino ad un massimo di 200 volte
 
Quando nessun dispositivo risponde più per una durata maggiore di 10 bit alla velocità di trasmissione attuale, significa che la catena è finita. Per evitare questo calcolo, si può usare un time-out di 12mS che funziona sempre, anche alla velocità più bassa.
 

9 – Il Master emette verso gli Slave tutta la sequenza di impostazione “Speed”, che riporta tutti gli Slave nella modalità di normale comunicazione.
10 – Il Master comunica all’Host (PC) tramite USB il numero di Slave riconosciuti e il tipo di ciascuno di essi.

 Roberto_Cena & Livio_Cicala – 2012


Ottenere i moduli del sistema

Il team del sistema Theremino si occupa solo di ricerca e non vende hardware. Il sistema è completamente “Freeware”, “Open Source”, “No Profit” e “DIY”, ma esistono produttori che possono fornire i moduli assemblati e collaudati a un ottimo prezzo. Difficilmente si potrebbe auto-costruirli spendendo meno. Un elenco dei produttori in questa pagina: www.theremino.com/contacts/producers


Donazioni
 

Il codice sorgente dei nostri programmi non contiene note sul copyright, nomi degli autori e link al nostro sito, per cui potete farne ogni uso, senza limitazioni di alcun genere. Non chiediamo di specificare la fonte originale o il nostro sito ma se sarete contenti del nostro software ricordatevi di noi e fate conoscere questo sito ai vostri amici. Eventuali donazioni, anche piccole, sono molto gradite e possono aiutarci a mantenere il software “free” ed a produrne sempre di nuovo.

Comments are closed.