我最近遇到了这个问题。我公司开发的软件大量使用 System.IO.Ports.SerialPort 进行 COM 端口连接。我们现在有一台正在开发的新嵌入式 PC,当我尝试执行 SerialPort.Open() 时,它会抛出一个异常,提示“传递给系统调用的数据区域太小”。
经过各种测试,我发现其他软件(例如Terminal2,Hercules)可以成功打开具有相同配置(波特率,奇偶校验等)的所述COM端口,发送和接收数据,所以我认为.net有问题框架的 SerialPort 实现(在阳光下没有什么新鲜事)。
在设备管理器中,这些端口被列为“UartSub Device (COMX)”,位置是 Intel(R) Serial IO UART Host Controller。这是目前我能说的与以前系统(SerialPort 工作正常)的唯一区别。
有什么建议吗?
编辑 - 为清楚起见添加代码片段。
SerialPort SP = new SerialPort(CmbPorts.Text.ToString().Trim(),
115200, Parity.None, 8, StopBits.One);
SP.Handshake = Handshake.None;
SP.Open();
这是堆栈跟踪:
at System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str)
at System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace)
at System.IO.Ports.SerialPort.Open()
at TestUartCOMPort.Form1.BtnConnect_Click(Object sender, EventArgs e) in C:\Workspace\Projects\TestUartCOMPort\TestUartCOMPort\Form1.cs:line 49