虚拟USB串口接收0x3800字节后持续中断的问题求助
虚拟USB串口接收数据异常问题
问题描述
我有一台设备通过虚拟USB串口向PC持续发送数据,但使用C#程序读取时,接收完0x3800字节(14336字节/14KB)后便停止接收。串口监控工具可正常看到0x3800字节之后仍有数据传输,说明设备与PC的USB通信未中断。
环境信息
- 操作系统:Windows 10(Windows 7测试结果一致)
- 编译器:Visual Studio 2015
- 串口配置:COM3、9600/8/N/1,无握手
已尝试的排查手段
- 修改不同端口配置参数
- 调整设备端缓冲区大小
- 测试多个虚拟USB串口相关NuGet包(多数无法读取数据或在相同断点失败,仅一个可读取至0x4000字节)
- 编写C++版本程序(可连接但无法读取任何字节)
- 使用真实RS232端口,以另一PC作为数据源,无异常
疑问与求助
为何串口监控工具能正常读取,我的C#程序却不行?推测可能是代码配置有误(已尽力排查),或是两者访问虚拟USB串口的路径不同(若如此,还有哪些连接方式?)。已添加OnErrorReceived回调,但从未触发。目前陷入困境,恳请提供恢复通信的建议。
测试代码
using System; using System.Threading; namespace TestConsole { class Program { const string PORT_NAME = "COM3"; const int BAUD_RATE = 9600; static System.IO.Ports.SerialPort port; static void Main(string[] args) { Console.WriteLine($"] port connect {PORT_NAME}"); port = new System.IO.Ports.SerialPort(PORT_NAME, BAUD_RATE); port.DataReceived += OnRx; port.ErrorReceived += OnErrorReceived; port.DtrEnable = true; // required for communiation port.Open(); // and wait forever. while (true) Thread.Sleep(1000); } private static void OnErrorReceived(object sender, System.IO.Ports.SerialErrorReceivedEventArgs e) { Console.WriteLine(); Console.WriteLine($"] port error = {e.EventType}"); Console.WriteLine(); } static void OnRx(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { System.IO.Ports.SerialPort sp = (System.IO.Ports.SerialPort)sender; while (0 < sp.BytesToRead) { var b = sp.ReadByte(); if (-1 < b) ConsoleWriteByte((byte)b); else break; } } const int BYTES_PER_LINE = 16; static int count = 0; static int line = 0; static void ConsoleWriteByte(byte value) { if (count % BYTES_PER_LINE == 0) { Console.WriteLine(); Console.Write($"{line:x6}:"); count = 0; line += BYTES_PER_LINE; } Console.Write($" {value:x2}"); count++; } } }
内容的提问来源于stack exchange,提问作者PapaAtHome
相关产品推荐
相关产品推荐

