我目前有一个嵌入式设备通过串口连接到PC。我在PC上接收数据时遇到问题。当我使用PCI串口卡时,我能够立即接收数据(没有延迟)。当我使用USB-To-Serial插头或内置串口的主板时,我必须延迟读取数据(32字节数据包为40毫秒)。
我可以在硬件之间找到的唯一区别是UART。 PCI卡使用16650,插头/主板使用标准16550A。 PCI卡设置为以28字节中断,插头设置为以14字节中断。
我以56700 Baud连接(如果这有帮助)。
延迟成为占空比的大部分,并且确实增加了传输时间。 (10分钟转移与1小时转移)。
有没有人解释为什么我必须使用插头/主板延迟?任何人都可以建议一种可能的解决方案来最小化或消除这种延迟吗?
答案 0 :(得分:3)
Linux为串行驱动程序提供了ASYNC_LOW_LATENCY标志,可能有所帮助。无论你使用什么驱动程序都可能有类似的东西。
但是,延迟不应对批量转移产生影响。它应该在传输的最初阶段添加40毫秒,就是这样,这就是为什么驱动程序首先不担心它。如果您在该波特率和延迟下执行32字节数据包,我建议重构您的传输协议以使用sliding window protocol,窗口大小约为100个数据包。换句话说,如果您没有收到100个数据包之前发送的数据包的ACK,您只想停止传输。
答案 1 :(得分:0)
您可能会发现不同的USB串行转换器会产生不同的结果。我们发现FTDI可以很好地与嵌入式设备通信。有些转换器似乎长时间缓冲数据和/或将其分段。
我从未见过主板连接有问题 - 不确定那里发生了什么!你能改变主板串口的中断点吗?
答案 2 :(得分:0)
我有一个串口到usb转换器。当我将它连接到我的分线盒并创建一个环回时,我能够以接近1Mbps的速度发送/接收而没有问题。串行端口发送可以转换为ascii数据的二进制数据。
使用.Net我将我的软件设置为在每个字节上触发事件(ReceivedBytesThreshold = 1),但这并不意味着它会。