Salta la barra di navigazione [1] - Vai alla barra di navigazione [3] - Scrivimi una mail [4]

L'integrato FT2232H e Linux

Sommario - Novità - Tutorial - Progetti - Risorse - Non solo elettronica

Iniziare ad usare questo integrato con Linux è semplice anche se i passaggi non sono sempre ben descritti né sul sito FTDI né nei file allegati al driver stesso; a volte la documentazione appare obsoleta (il riferimento è al kernel 2.4).

Innanzitutto la configurazione usata per i test:

Faccio notare che questa configurazione è ben diversa da quella "consigliata" da FTDI (Mandrake con kernel 2.4.25). L'unico problema potrebbe essere legato all'accesso ai dispositivi USB come utenti non privilegiati: in caso di problemi (per esempio con Debian), provate ad eseguire il programma come utente root. Da approfondire...

Installazione delle librerie

Ovviamente occorre avere un (piccola) dimestichezza con la console, anche se molte operazioni sono possibili anche operando da interfaccia grafica.

  1. Dopo aver scaricato il driver adatto al proprio kernel (nell'esempio libftd2xx0.4.16_x86_64.tar.gz, numeri che ovviamente cambiano a seconda della versione) occorre scompattarlo in una directory qualsiasi:
    user#: gunzip libftd2xx0.4.16_x86_64.tar.gz
    user#: tar -xvf libftd2xx0.4.16_x86_64.tar
  2. Come utente root (oppure con il comando sudo) occorre copiare la libreria nella cartella /usr/local/lib e creare una serie di link simbolici:
    root@#: cp libftd2xx.so.0.4.16 /usr/local/lib
    root@#: cd /usr/local/lib
    root@#: ln -s libftd2xx.so.0.4.16 libftd2xx.so
    root@#: ln -s libftd2xx.so.0.4.16 libftd2xx.so.0
    root@#: cd /usr/lib
    root@#: ln -s /usr/local/lib/libftd2xx.so.0.4.16 libftd2xx.so
    root@#: ln -s /usr/local/lib/libftd2xx.so.0.4.16 libftd2xx.so.0
    Rispetto a quanto presente in README.dat ci sono un paio di link simbolici in più perché alcuni degli esempi sembrano usare nomi diversi. Anche questo da approfondire...
  3. Non servono modifiche a /etc/fstb

Il primo programma: helloREALworld

La versione "reale" del classico "hello world": far lampeggiare due LED.

Prima di cominciare occorre aver sottomano sia la D2XX Programmer's Guide sia i fogli tecnici del componente FT2232H Dual High Speed USB to Multipurpose UART/FIFO IC, entrambi disponibili sul sito FTDI. E magari leggerli prima, velocemente...

L'hardware

Due LED collegati attraverso una resistenza alle uscite dell'integrato FT2232H ADBUS5 e ADBUS6 (i pin 9 e 10 del connettore a 40 pin della mia scheda; usando altre schede la numerazione sarà ovviamente diversa ma i nomi uguali). Il valore delle resistenze non è critico: valori compresi tra 330 e 470 Ω sono adeguati. Ovviamente è possibile utilizzare altri pin, modificando conseguentemente il codice di seguito mostrato.

Lo schema di collegamento di due LED alla porta USB

Ovviamente un LED sarà acceso quando il pin corrispondente del FT2232H sarà configurato come uscita ed avrà valore logico 1(3,3 V).

Per il collegamento fisico potete, in alternativa:

Sul connettore a 40 poli sono presenti due pin di massa, comodi in questo caso semplice per evitare l'uso di una breadboard o collegamenti volanti.

Scrivere il programma

Innanzitutto occorre scrivere il codice sorgente con il proprio programma preferito. A fondo pagina potete scaricare il codice completo, pronto per essere copiaincollato. Qualche nota:

 FT_HANDLE ftHandle;
 ftStatus = FT_Open(0, &ftHandle); // Open FT2232H and assign to "handle"

Tutti gli accessi al FT2232H sono effettuati con questa "maniglia", concettualmente simile agli handle usati per i file.

Dopo ogni chiamata alle funzioni FT_xxx() è buona norma verificare sempre la presenza di errori con il blocco:

 if(ftStatus != FT_OK)             // Error?
  {printf("Error code: %d \n", ftStatus);
   return(1);
  }

Non è strettamente necessario per la funzionalità del programma ma vi consiglio di farlo, nulla è peggio di un programma che si blocca "inspiegabilmente" a causa di un connettore USB scollegato...

 ftStatus = FT_SetBitMode(ftHandle, Mask, Mode); // Setup mode

Configuro il funzionamento dell'integrato: scrittura parallela di bit attraverso il buffer FIFO. FT2232H permette una discreta varietà di modi di funzionamento: quello presentato è il più semplice.

 for (;;)           // Infinite loop
 {TxBuffer[0]=0x40; //0100 0000 - LED1 ON (connected to ADBUS6)
  ftStatus = FT_Write(ftHandle, TxBuffer, 1, &BytesWritten);
  sleep(1);

  TxBuffer[0]=0x20; //0010 0000 - LED2 ON (connected to ADBUS5) - LED1 OFF
  ftStatus = FT_Write(ftHandle, TxBuffer, 1, &BytesWritten);
  sleep(1);
 }
}

Il cuore del programma è null'altro che un loop infinito che accende e spegne due LED ad intervalli di un secondo. Essendo un loop infinito non è mai invocata la funzione FT_Close() e ciò non è bello

Per chi se ne fosse dimenticato: on la tastiera italiana, la parentesi graffa {} si ottiene premendo in contemporanea AltGcr+7 e AltGr+0 (in pratica i tasti prima e dopo le parentesi tonde).

Compilare il programma

user#: gcc -o helloREALworld helloREALworld.c -L. -lftd2xx -Wl,-rpath /usr/local/lib

Il comando compila il sorgente helloREALworld.c, usando la libreria ftd2xx e crea il file eseguibile helloREALworld. Ovviamente se avete scelto altri nomi per i vostri file dovete modificare la riga opportunamente.

La directory corrente deve essere quella in cui si trova il codice sorgente. In essa verrà anche creato il file eseguibile.

Con alcune versioni o impostazioni di gcc appaiono alcuni  warning in corrispondenza delle printf(): non è bello ma è previsto e non crea problemi.

Eseguire il programma

A questo punto è possibile verificare il funzionamento del programma. Ovviamente occorre collegare la scheda al connettore USB del computer e digitare

user#: ./helloREALworld

I due LED dovrebbero lampeggiare con frequenza pari ad un secondo, fino all'interruzione manuale del programma (CTRL+C).

Scarica il codice sorgente

Usare l'USB: l'integrato FT2232H

Licenza "Creative Commons" - Attribuzione-Condividi allo stesso modo 3.0 Unported


EN - Pagina principale - Sommario - Accessibilità - Note legali e privacy policy - Posta elettronica

XHTML 1.0 Strict - CSS 3