我的设置:
- 使用 FTDI FT2232D 芯片的硬件设备使用 USB 连接到我的电脑。
- 我已经安装了 VCP(虚拟 COM 端口)驱动程序,它显示了通过 USB 连接的 FTDI 芯片作为 Windows 中的 COM 端口。
- 我正在使用一个简单的 VB.net 程序来读取 com 端口。
行为:
当我使用 realterm 通过 com 端口向我的设备发送数据时,设备总是成功回复。
当我使用我的 VB.net 测试程序然后使用 realterm 时,tx 工作,但 realterm 没有收到任何回复。
我可以通过拔下usb,重新插入然后重新发送命令来让realterm再次接收数据。
使用我的 vb.net 程序时,拔下和重新插入 USB 并不能解决问题。我的 vb.net 程序有时有效,但并非总是如此。
看起来我的程序中的某些东西导致 com 端口损坏,修复它的唯一方法是拔下 USB 电缆并重新插入。
我的代码看起来像这样:
Public Class SerialConnection
Private MSerialPort As SerialPort
Private Const StartByte As Byte = &H5B
Public Sub New(ByVal Port As String)
MSerialPort = New SerialPort()
MSerialPort.PortName = Port
MSerialPort.BaudRate = 9600
MSerialPort.ReadTimeout = 5000
MSerialPort.WriteTimeout = 5000
MSerialPort.Open()
End Sub
Public Function SerialPacketTransaction()
Dim SendPacketBytes = New List(Of Byte)
Dim ReceivePacketBytes As List(Of Byte)
MSerialPort.DiscardInBuffer()
MSerialPort.DiscardOutBuffer()
SendPacketBytes.Add(StartByte)
MSerialPort.Write(SendPacketBytes.ToArray, 0, SendPacketBytes.Count)
Dim TimeoutTime As DateTime = Now().AddMilliseconds(MSerialPort.ReadTimeout)
Dim readbyte As Byte
Do
If Now() > TimeoutTime Then Throw New TimeoutException("Timeout waiting for response")
Thread.Sleep(50)
readbyte = ReadSerialByte()
Loop Until (readbyte = StartByte)
End Sub
End Class