如何为 FTDI 驱动程序启用和设置事件字符?

如何为 FTDI 驱动程序启用和设置事件字符?

当通过 FTDI USB 串行电缆向 PC 发送少量数据时,您必须等待以下条件之一发生,然后才能根据 FTDI 的规定获取数据AN232B-04,数据延迟流程

  1. 缓冲区已满
  2. 其中一条 RS232 状态线已更改
  3. 事件字符已启用并在传入数据流中被检测到
  4. 芯片内置的计时器已超时。

我想使用选项 3,启用事件字符并定义它。如何在 Windows 7 中执行此操作?我找不到任何相关文档。我不想编写代码来执行此操作,我只想知道在我的操作系统(Windows 7)中我可以在哪里更改这些设置。

答案1

我意识到最初的问题是关于 Windows 的,但这里有针对其他操作系统的说明:

Mac OS X

对于延迟计时器 - 安装驱动程序后,制作备份并编辑文件/System/Library/Extensions/FTDIUSBSerialDriver.kext/Contents/Info.plist。找到您设备的部分,例如

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

并在上述内容后添加以下内容

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

我怀疑这也适用于事件角色,但我不确定正确的<key>用法。

Linux

有一段时间,Linux 内核默认将延迟计时器设置为 1ms,然而在内核 4.4 版本中又恢复到了 16ms。可通过 更改参数sysfs。在下方找到您的设备/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

您可以通过向 回显一个值来设置事件字符event_char。该值是事件字符的 ASCII 值(例如“A”为 65)加上 256(这会将第 9 位设置为 1,从而启用事件字符支持)- 因此对于“A”,该值为 65 + 256 = 321:

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

要使用 0x00 作为事件字符,只需传递值 256,而要禁用事件字符,则传递值 0。

您还可以通过这种方式修改延迟计时器。看看现在设置了什么:

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

现在禁用 low_latency 标志,否则延迟将始终被强制为 1:

# setserial /dev/ttyUSB0 ^low_latency

然后将延迟定时器设置为例如 4 毫秒

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

答案2

它在设备控制块在 Win32 上。请参阅EvtChar成员。

相关内容