Ogni applicazione e ogni circuito che si va a realizzare non ha mai abbastanza segnali per poter controllare tutte le periferiche che si intende inserire. Attraverso questo articolo scopriamo come sia possibile controllare una periferica SPI attraverso il protocollo One-Wire composto da un solo segnale.
Il protocollo One-Wire è stato sviluppato dalla Dallas Semiconductor diventata poi Maxim IC. Il protocollo consente la comunicazione di più dispositivi con un host utilizzando il minimo numero di segnali possibile. Il protocollo viene infatti chiamato One-Wire proprio perché utilizza un solo conduttore per il trasferimento dei dati. L’architettura One-wire utilizza delle resistenze di pull-up per mantenere la linea alla tensione adeguata in prossimmità del master del comunicazione, ossia il lato host. I livelli utilizzati dal protocollo sono i classici delle logiche CMOS/TTL con una tensione operativa compresa tra 2.8V e 6V. Il protocollo è di tipo Single-Master/Multiple-Slave, ossia esiste un solo master della comunicazione che ha il compito di gestire il bus, dettare le temporizzazioni, verificare quanti e quali dispositivi sono collegati, interrogarli e ricevere le risposte. Generalmente il compito di master è assunto dal microcontrollore. Multiple-Slave in quanto più dispositivi possono essere connessi contemporaneamente. Il master della comunicazione e gli slave possono trasmettere e ricevere, ma a fasi alterne, mai contemporaneamente. Ogni slave ha l’obbligo di lasciare sempre libero il bus e di occuparlo solamente quando viene interrogato dal master. E’ possibile collegare al bus molti dispositivi contemporaneamente in quanto ognuno di essi dispone di un proprio indirizzo univoco che permette di distinguerlo dagli altri. Molti dispositivi 1-W ire hanno la peculiarità di sfruttare il “Parasite Power”, ovvero la possibilità di essere alimentati direttamente dal bus. A titolo di esempio, la sonda DS-1822 (sensore di temperatura con uscita digitale) rientra tra questi dispositivi e può essere collegata al microcontrollore, anche attraverso un collegamento estremamente lungo, con solo due fili: uno per alimentazione e dati e l’altro per la massa.
Comunicazione One Wire
La comunicazione sul bus One-W ire è suddivisa in slot ed i dati iniziano sempre con il LSB. Per trasferire un uno logico il master mantiene il bus al livello basso per massimo 15us. Per trasferire uno zero il bus è mantenuto al livello basso almeno 60us. Il clock non è necessario in quanto ogni dispositivo slave sul bus si sincronizza con i fronti di discesa del segnale prodotto dal master. In figura 1 è visibile un esempio di scrittura e lettura con un dispositivo One-Wire. All’inizio della comunicazione il master esegue il reset della rete mantenendo il bus al livello basso per almeno 480us e poi attendendo un impulso di risposta dagli slave.
Ogni dispositivo ha un indirizzo univoco di 64 bit, dove gli ultimi 8 bit sono il CRC dei precedenti. Il primo byte è poi un identificativo della tipologia di dispositivo. Spesso quando al bus è collegato più di uno slave, la rete viene anche chiamata MicroLAN e può tollerare fino ad un massimo di 20 slave senza problemi, con distanze anche di 200m. La semplice applicazione che si intende sviluppare controlla un display remoto a LED caratterizzato da una interfaccia SPI (Serial peripheral interface). Anziché utilizzare il protocollo seriale a quattro fili SPI, utilizziamo un protocollo chiamato One-Wire caratterizzato da un solo segnale. In realtà per la nostra applicazione la comunicazione SPI utilizza solo 3 segnali poiché non vi è segnale di ritorno dal display, in particolare si utilizza il MAX7221 come display controller. L’interfaccia SPI del controller è composta del segnale di chip select attivo basso, dal segnale dati (DIN) e dal segnale di clock. Per la generazione di questi tre segnali partendo dal segnale di One-Wire si utilizzano tre DS2405 come mostrato in figura 2.
I DS2405 non sono altro che degli switch con interfaccia 1-wire, il primo genera il segnale di chip select, il secondo il segnale di dati ed il terzo con l’utilizzo di tre porte logiche EX-OR produce il segnale di clock. La combinazione delle porte logiche è necessaria per produrre la trasmissione one-shot di un bit sulla SPI, infatti ogni trasmissione di un bit e scomposta in 3 operazioni in sequenza che sono: transizione del segnale dato, clock basso e clock alto. Queste tre operazioni sono ottenute con una sola transizione del segnale one-wire, proprio per questo motivo si è definita la trasmissione one-shot. Il compito base delle tre porte EX-OR è quello di individuare un fronte di salita o discesa per uno dei segnali presenti all’ingresso, infatti l’uscita della porta logica ha valore logico 1 solamente se i due ingressi hanno valori opposti.
Funzionamento del circuito
Andiamo ora a spiegare in dettaglio il funzionamento del circuito. Per trasmettere un dato sulla porta SPI del display controller, la prima operazione da compiere è portare bassa l’uscita del primo DS2405 che controlla il segnale di chip select. Questa operazione determina la partenza di una trasmissione SPI, e nel nostro caso l’inizio della ricezione per il display controller. Successivamente avviene la trasmissione dei bit di dati in base a quanti ne attende la periferica SPI in questione, le regole da seguire sono le seguenti:
» se il bit da trasmettere è diverso dal precedente, è necessario generare un segnale DATA1 del valore di tale bit;
» se il bit da trasmettere è identico al precedente sarà sufficiente invertire l’uscita DATA0.
Il circuito di figura 4 genererà automaticamente un fronte di clock ogni volta che verrà trasmesso un bit attraverso un singolo comando one-wire. Al termine della trasmissione l’ultimo comando one-wire riporta alto il segnale di chip select concludendo la trasmissione SPI. Questo applicazione consente dunque attraverso un rete one-wire di controllare un display per esempio per la visualizzazione della temperatura, nulla vieta di utilizzare però questa tecnica anche con altre periferiche dotate di interfaccia SPI come ADC e DAC. Con un meccanismo simile è facile ottenere un circuito analogo anche per comandare periferiche I2C sempre attraverso un solo segnale one-wire. Per le periferiche SPI più complesse che prevedono anche una trasmissione bidirezionale è sufficiente aggiungere un quarto DS2405. Ovviamente il troughput ottenuto utilizzando un circuito di questo tipo è inevitabilmente basso, infatti sono necessari ben dieci comandi one-wire per la trasmissione di un byte sulla porta SPI. Molte periferiche, tuttavia, non necessitano di un elevato scambio di dati ma al contrario l’aggiornamento avviene ad una frequenza molto bassa come per le applicazioni di controllo in remoto. Proprio per applicazioni come queste risulta adeguato il circuito presentato.