Il protocollo IrDA con MCP2150

La comunicazione UART è molto utilizzata in tutte le applicazioni basate su microcontrollori. Tra gli svantaggi di tale soluzione ci sono sicuramente le interferenze elettromagnetiche e la presenza di cavi di interconnessione. Ecco come superare questi limiti mediante una connessione di tipo wireless IrDA, mantenendo la stessa semplicità di gestione.

La tendenza attuale nella trasmissione dati tra dispositivi elettronici è ormai diventata quella di eliminare i cavi di collegamento, sostituendoli con protocolli di tipo wireless. Negli ultimi anni si è assistito ad una proliferazione di standard wireless: dallo ZigBee al Wi-Fi. Spesso la difficoltà che si incontra è nell'implementazione di questi protocolli. Un altro metodo di comunicazione senza fili, che ha avuto molto successo negli anni passati, ma che continua ad essere utilizzato per le trasmissioni a corto raggio è IrDA (Infrared Device Application). Si può considerare come la versione wireless della trasmissione seriale wired. Tra i vantaggi offerti, si possono citare:

1-nessun tipo di cablaggio filare tra il trasmettitore ed il ricevitore;

2-i trasmettitori  IR hanno dimensioni ridotte rispetto al classico connettore seriale;

3-immunità totale alle interferenze elettromagnetiche ed al rumore di alimentazione;

4-Trasmissione dati affidabile, grazie alla presenta di un controllo errori tramite algoritmo CRC a 16-bit;

5-molti dispositivi sono dotati di interfaccia IR (palmari, notebook e telefoni cellulari).

Inizialmente lo standard IrDA non si è molto diffuso in applicazioni embedded per la difficoltà di gestirne il relativo protocollo, ma grazie allo sviluppo di chip come MCP2150 di Microchip, il programmatore è stato esonerato dal compito di gestirlo. Si tratta di un integrato dal costo e numero di pin (18-pin) ridotto, semplice da utilizzare poiché è sufficiente interfacciarlo con la porta UART di un qualunque microcontrollore ad 8-bit. MCP2150 ha il compito di codificare un flusso dati asincrono, convertendo ciascun byte nel corrispondente impulso infrarosso. Analogamente, gli impulsi IR ricevuti, sono decodificati e gestiti dalla logica di controllo; infine, dal pacchetto ricevuto sarà estratto il payload  e trasmesso all’host controller nel formato dati UART. Le funzionalità di codifica e decodifica di MCP2150 sono progettate per essere compatibili con i componenti fisici (LED infrarossi) dello standard IrDA. Questo layer dello standard è noto con il  nome di IrPHY. Per ulteriori dettagli sul protocollo IrDA fare riferimento al sito web www.IrDA.org. La presenza del chip MCP2150 all’interno di un’applicazione embedded consente di interfacciarsi con un sistema come Microsoft PocketPC, Palm PDA e Psion PDA.

Figura 1: diagramma a blocchi in cui è utilizzato il chip MCP2150 che consente di implementare il protocollo IrDA a partire da un porta UART di un microcontrollore.

Figura 1: diagramma a blocchi in cui è utilizzato il chip MCP2150 che consente di implementare il protocollo IrDA a
partire da un porta UART di un microcontrollore.

Concetti di comunicazione IR

L’invio di dati tramite raggi infrarossi richiede un hardware particolare e l’utilizzo di protocolli di comunicazioni specializzati. Tali requisiti sono descritti in dettaglio dallo standard IrDA. Nella fattispecie si esamineranno alcuni concetti base che permetteranno di comprendere meglio   il   funzionamento   dell’integrato MCP2150. La figura 2 riporta i layer che costituiscono il protocollo IrDA.

Figura 2: tutti i layer necessari per implementare il protocollo IrDA.

Figura 2: tutti i layer necessari per implementare il protocollo IrDA.

Come si nota il microcontrollore  (host) si trova al livello più alto. Questo indica, appunto, il fatto che esso non deve preoccuparsi di tutti i compiti dei layer inferiori: deve esclusivamente passare le informazioni che vuole trasmettere e gli stati più bassi si occuperanno del resto.

Il layer  IrLAP

Lo strato IrLAP (Link Access Protocol) for nisce la struttura dei pacchetti dati (frame). La figura 3 mostra i campi del pacchetto dati costruito dal layer IrLAP.

Figura 3: struttura del frame inviato secondo lo standard IrDA.

Figura 3: struttura del frame inviato secondo lo
standard IrDA.

Il primo campo rappresenta l’inizio del frame (BOF – Begin Of Frame) che consente al ricevitore di essere avvertito che ci sono dati in arrivo. Il valore di BOF è generalmente 0xC0, ma può anche essere utilizzato 0xFF se l’ultimo carattere BOF è 0xC0. Successivamente, è trasmesso un byte di indirizzo (campo “A”), quindi il byte di controllo (campo “C”). Quest’ultimo è impiegato per differenziare  i tipi di frame oppure per contarli. I frame possono, infatti, trasportare uno stato, dei dati o dei comandi. Infine, c’è il campo payload in cui è inserita l’informazione vera e propria (campo “I”). L’integrità dei dati è assicurata dal campo FCS (Frame Check Sequence); questo è ottenuto tramite un controllo CRC a 16-bit. Il valore del CRC calcolato è trasmesso a partire dal bit meno significativo. La fine del frame è segnata dal campo EOF, il cui valore è sempre 0xC1. La struttura descritta è implementata nell’MCP2150 ed è valida per tutte le versioni di standard IrDA, con velocità fino a 115.2Kbaud. Questa categoria di IrDA è utilizzata per l’emulazione di una connessione seriale. Esistono altri standard come IrOBEX (InfraRed Object Exchange) che però non sono utilizzabile come emulazione della seriale. Oltre alla funzione di costruzione dei frame, il layer IrLAP fornisce la gestione delle funzioni di apertura e chiusura delle connessioni. Parte di questa gestione riguarda parametri critici che determinano le prestazioni del collegamento. Questi parametri controllano quanti BOF saranno utilizzati, la velocità di linea, etc...

Il layer IrLMP e IAS

Quando si stabilisce una connessione IrDA, generalmente, esiste un dispositivo che ha qualcosa da fare o da richiedere ed un altro che dispone di una risorsa da fornire. Per esempio un computer portatile deve stampare un file. Nella termino logia IrDA standard, il notebook è chiamato primary device e la stampante è detta secondary device. I dispositivi  con porta seriale si dividono in due categorie: DTE e DCE. Questi termini corrispondono ai termini dello standard IrDA primary device (DTE) e secondary device (DCE). Esempi di DTE sono i PC, i PDA o i terminali. La figura 4 chiarisce quanto appena esposto. Quando la connessione è stabilità, il  dispositivo primario deve accertarsi che il  secondario disponga delle risorse necessarie per svolgere il suo task.

Figura 4: i termini primary e secondary device corrispondo ai termini DTE e DCE propri della trasmissione seriale.

Figura 4: i termini primary e secondary device corrispondo ai termini DTE e DCE propri della trasmissione seriale.

Questo è realizzato mediante una serie di interrogazioni. In base alle risposte fornite, il primario  decide se eleggere l’altro dispositivo come secondario. Le interrogazioni suddette sono gestite a livello IrLMP. Le rispose a queste domande possono essere trovate nello IAS (Information Access Service) del secondary device. Le risposte sono così confrontate con le richieste del primary device per decidere se avviare o no la connessione. MCP2150 ha il ruolo di secondary device e si identifica a qualunque interrogazione da parte un primary device come un modem. Questo assicura che sia identificato come un dispositivo seriale con un limitata capacità di memoria. In questo modo si ottiene una porta seriale virtuale.

Il layer IrCOMM

Lo standard o il layer IrCOMM è semplicemente un modo per identificare  il chip come  un  dispositivo seriale. Il  chip MCP2150 supporta la classe di servizi cosiddetta 9 wire cooked di IrCOMM. La figura 5 evidenzia tutte le differenti classi di servizi che sono supportate dal protocollo IrCOMM.

Figura 5: classi di servizio del protocollo IrCOMM.

Figura 5: classi di servizio del protocollo IrCOMM.

Buffer e velocità

La massima velocità supportata dal MCP2150 è di 115.2kbaud. In realtà la velocità effettiva è inferiore e questo è dovuto a diversi fattori. Uno di questi è l’overhead associato al protocollo; ma non è il solo. Ecco come stimare  il throughput effettivo di una comunicazione IrDA. La trasmissione dei pacchetti a lunghezza fissa è pari a 64byte. Per trasmettere tale quantità di dati, l’MCP2150 invia in realtà 72byte (64 dati + 8 overhead). Quando il dispositivo primario riceve un frame, esso deve aspettare un certo tempo prima di inviare la sua risposta (questa latenza è dovuta al fatto che la trasmissione IrDA è di tipo half-duplex e non full-duplex). Tale tempo è fissato dal layer IrLAP durante la fase di negoziazione dei parametri di connessione. Si può stimare un valore tipico di 1ms, che corrisponde al tempo per inviare 12byte alla velocità massima di 115.2kbaud. La risposta del primary device è almeno di 6byte. Inoltre, ricevuta la risposta il secondary deve aspettare una latenza di 12byte prima di inviare  il successivo pacchetto. Quindi riassumendo per inviare 64 byte è necessario aggiungere:

➤  8byte di overhead

➤ 12byte di latenza del primary device

➤  6byte trasmissione primary device

➤ 12byte di latenza del secondary device per un totale di 38byte. Questo si traduce in una velocità effettiva pari al 63% (= 64 / 64+38) di quella teorica. Le stime fatte sono comunque valide nel caso migliore; le velocità effettive si attestano tra 38.4kbaud e 57.6kbaud. Un cosa importante da tener presente è che il calcolo appena fatto è valido se per ogni pacchetto si trasmettono tutti i 64byte disponibili. Se per ogni pacchetto si trasferisse, ad esempio, 1 solo byte la velocità effettiva scenderebbe drasticamente al 2.5% di quella teorica (= 1 / 1+38). Questa considerazione fornisce quindi anche un strategia per massimizzare  il throughput: cioè bisogna allineare la quantità di dati da trasmettere con la dimensione del pacchetto dell’MCP2150 (64byte).

Il chip MCP2150 è un dispositivo stand-alone che include tutti i layer richiesti per sviluppare i protocolli dello standard IrDA. All’interno di MCP2150 sono incluse le funzioni di encoder e decoder che precedentemente erano svolte dal chip MCP2120.

Caso pratico: interfaccia MCP2150 con un PICMicro

La figura 6 mostra un dettaglio della scheda. Un’altra possibilità è la MCP215X/40 Data Logger Demo Board offerta da Microchip, la quale è invece già dotata di micro oltre che del chip per la trasmissione IrDA.

Figura 6: la scheda di sviluppo di Mikroelektronika rappresenta un comodo strumento per aggiungere funzionalità IrDA alla propria applicazioni.

Figura 6: la scheda di sviluppo di Mikroelektronika rappresenta un comodo strumento per aggiungere funzionalità IrDA alla propria applicazioni.

 

Figura 7: il software pkHpc è un terminale client da utilizzare su PDA dotati di Windows CE. Tale software consente di interfacciare la propria applicazione embedded ad un palmare grazie al tramite del chip MCP2150.

Figura 7: il software pkHpc è un terminale client da utilizzare su PDA dotati di Windows CE. Tale software consente di interfacciare la propria applicazione embedded ad un palmare grazie al tramite del chip MCP2150.

Interfacciare l’MCP2150 ad un PDA

Un’applicazione pratica del chip descritto in questo articolo è quella che consente di interfacciare la propria applicazione embedded con un dispositivo PDA (Personal Digital Assistant). La maggior parte di questi dispositivi, infatti, è dotata di interfaccia IrDA. Windows CE non supporta di default un terminale client. Si tenga conto che questa è soltanto uno dei possibili terminali per palmari. L’utilizzo del software è concettualmente simile ad HyperTerminal, utilizzato spesso che comunicare tramite la porta seriale di un PC.

Conclusioni

Ormai la tendenza nei moderni computer è quella di eliminare la porta seriale sostituendola con quella USB. Questo è un problema per tutte quelle applicazioni embedded che ancora utilizzano la comunicazione seriale. Quindi spesso si deve ricorrere all’acquisto di un convertitore USBseriale. Un’alternativa più economica, soprattutto nei notebook, è rappresentata dall’utilizzo di un comunicazione ad infrarossi, che consente, tra l’altro, di eliminare l’ingombro dei cavi e ridurre eventuali interferenze E.M. Tutto ciò che è necessario è l’aggiunta del chip MCP2150 all’uscita della porta UART del microcontrollore.

 

 

 

Scrivi un commento

EOS-Academy