Come abilitare e impostare i caratteri evento per i driver FTDI?


4

Quando si inviano solo pochi bit di dati tramite cavo USB-seriale FTDI al PC, è necessario attendere che si verifichi una delle seguenti condizioni prima di ottenere i dati secondo AN232B-04 di FTDI , Flusso di latenza dei dati :

  1. Il buffer è pieno
  2. Una delle righe di stato RS232 è cambiata
  3. Un carattere evento era stato abilitato ed è stato rilevato nel flusso di dati in entrata
  4. È scaduto un timer integrato nel chip.

Voglio usare l'opzione 3, abilitare un personaggio evento e anche definirlo. Come posso farlo in Windows 7? Non riesco a trovare alcuna documentazione su di esso. Non voglio scrivere codice per farlo, voglio solo sapere dove nel mio sistema operativo (Windows 7) potrei cambiare queste impostazioni.

Risposte:


3

È specificato nel Device Control Block su Win32. Vedi il EvtCharmembro


Non lo vedo come una domanda di codifica, poiché idealmente non voglio scrivere codice per impostare EvtChar. Voglio solo cambiare l'impostazione da qualche parte nel mio sistema operativo (Windows 7). Se possibile.

3
@evsc: le applicazioni possono scegliere di lasciare invariate le impostazioni, ma la maggior parte no. Non esiste un'impostazione globale, poiché questo valore può potenzialmente interrompere le applicazioni.
Ben Voigt,

3

Mi rendo conto che la domanda originale riguardava Windows, ma qui ci sono le istruzioni per altri sistemi operativi:

Mac OS-X

Per il timer di latenza: dopo aver installato il driver, eseguire una copia di backup e modificare il file /System/Library/Extensions/FTDIUSBSerialDriver.kext/Contents/Info.plist. Trova la sezione per il tuo dispositivo, ad es

    <key>FTDI2XXBM</key>
    <dict>
        <key>CFBundleIdentifier</key>
        <string>com.FTDI.driver.FTDIUSBSerialDriver</string>

E aggiungi quanto segue dopo quanto sopra

        <key>ConfigData</key>
        <dict>
            <key>LatencyTimer</key>
            <integer>1</integer>
        </dict>

Sospetto che funzionerebbe anche per il personaggio dell'evento, ma non sono sicuro del corretto <key>utilizzo.

Linux

Il kernel di Linux fornito con Ubuntu 14.04 (Linux 3.13.0-24-generico) imposta già il timer di latenza su 1 ms per impostazione predefinita. Tuttavia, i parametri sono disponibili per la modifica tramite sysfs. Individua il tuo dispositivo sotto/sys/bus/usb-serial/devices

$ ls /sys/bus/usb-serial/devices/
ttyUSB0
$ ls /sys/bus/usb-serial/devices/ttyUSB0
driver  event_char  latency_timer  port_number  power  subsystem  tty  uevent

È possibile impostare il carattere dell'evento facendo eco a un valore su event_char. Il valore è il valore ASCII del carattere evento (ad es. 'A' è 65) più 256 (imposta il 9 ° bit su 1 che abilita il supporto caratteri evento) - quindi per 'A' il valore è 65 + 256 = 321:

$ sudo -i
<authenticate>
# echo 321 > /sys/bus/usb-serial/devices/ttyUSB0/event_char

Per utilizzare 0x00 come carattere evento, passa semplicemente il valore 256, mentre per disabilitare il carattere evento, passa il valore 0.

Dovresti anche essere in grado di modificare il timer di latenza in questo modo. Guarda cosa è impostato ora:

# cat /sys/bus/usb-serial/devices/ttyUSB0/latency_timer
1

Ora disabilita il flag low_latency, altrimenti la latenza sarà sempre forzata a 1:

# setserial /dev/ttyUSB0 ^low_latency

Quindi impostare il timer di latenza su, ad esempio, 4 ms

# echo 4 > /sys/bus/usb-serial/devices/ttyUSB0/latency_timer
# cat /sys/bus/usb-serial/devices/ttyUSB0/latency_timer
1

Ma suppongo che questo non sia un grosso problema in quanto il valore predefinito è 1ms minimo.


Grazie per la modifica @MichaelZillich - sai se cat /sys/bus/usb-serial/devices/ttyUSB0/latency_timertornerà 4dopo questa correzione? In tal caso, aggiornerò la riga finale.
Peter Gibson,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.