当通过 FTDI USB 串行电缆向 PC 发送少量数据时,您必须等待以下条件之一发生,然后才能根据 FTDI 的规定获取数据AN232B-04,数据延迟流程:
- 缓冲区已满
- 其中一条 RS232 状态线已更改
- 事件字符已启用并在传入数据流中被检测到
- 芯片内置的计时器已超时。
我想使用选项 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
成员。