Como ativar e definir caracteres de eventos para drivers FTDI?

4

Ao enviar apenas alguns bits de dados via cabo FTDI USB-Serial para o PC, você deve aguardar uma das seguintes condições antes de obter seus dados de acordo com os FTDI's AN232B-04, Fluxo de latência de dados :

  1. O buffer está cheio
  2. Uma das linhas de status do RS232 foi alterada
  3. Um caractere de evento foi ativado e foi detectado no fluxo de dados de entrada
  4. Um temporizador integral no chip expirou.

Eu quero usar a opção 3, ativar um caractere de evento e também defini-lo. Como faço isso no Windows 7? Não consigo encontrar nenhuma documentação sobre isso. Eu não quero ter que escrever código para fazer isso, eu só quero saber onde no meu sistema operacional (Windows 7) eu poderia alterar essas configurações.

    
por evsc 21.03.2012 / 14:47

2 respostas

3

Ele é especificado no Bloco de controle de dispositivos no Win32. Veja o membro EvtChar .

    
por 21.03.2012 / 14:56
2

Sei que a pergunta original era sobre o Windows, mas aqui estão as instruções para outros sistemas operacionais:

Mac OS-X

Para o cronômetro de latência - Após instalar o driver, faça uma cópia de backup e edite o arquivo /System/Library/Extensions/FTDIUSBSerialDriver.kext/Contents/Info.plist . Encontre a seção para o seu dispositivo, por exemplo,

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

E adicione o seguinte após o acima

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

Eu suspeito que isso também funcionaria para o caractere do evento, mas não tenho certeza do <key> correto a ser usado.

Linux

O kernel Linux que vem com o Ubuntu 14.04 (Linux 3.13.0-24-generic) já define o temporizador de latência como 1ms por padrão. No entanto, os parâmetros estão disponíveis para alteração via sysfs . Localize seu dispositivo em /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

Você pode definir o caractere do evento ecoando um valor para event_char . O valor é o valor ASCII do caractere do evento (por exemplo, 'A' é 65) mais 256 (define o 9º bit como 1, o que habilita o suporte ao caractere de evento) - assim, para 'A' o valor é 65 + 256 = 321:

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

Para usar 0x00 como o caractere do evento, simplesmente passe o valor 256, enquanto para desativar o caractere do evento, passe o valor 0.

Você também deve poder modificar o cronômetro de latência dessa maneira. Veja o que está definido agora:

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

Agora desative o sinalizador low_latency, caso contrário, a latência sempre será forçada para 1:

# setserial /dev/ttyUSB0 ^low_latency

Em seguida, defina o temporizador de latência para, por exemplo, 4 ms

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

Mas acho que isso não é grande coisa, já que o padrão é o mínimo de 1 ms.

    
por 07.05.2014 / 01:31