-1

操作系统:Ubuntu

串行端口使用:USB->串行适配器(多产 PL2303)

我有一个示例串口读写程序。在运行应用程序时,我正在尝试发送 4100 字节,编写能够一次性完成的程序。

n = write (s_port,msg,4100);

在这里,我正在检查“n”值,它是 4100

I*强文本*n 接收端

n = read(s_port,msg,5000);

上面的行在一个循环中,我在一次读取尝试中获得的字节数不超过 32 个。因此超过 128 次读取尝试(32+32+32 等...)以获得完整字节(4100)

在发送端如果能够一次推送整个字节,为什么不能一次接收呢?

4

2 回答 2

2

串行通信需要时间来传输单个字节,具体取决于波特率。CPU 在处理收到的字节时要快得多。

通过写入,串行通信设备接口能够缓冲要发送的字节。然而,读取必须从其他设备接收字节,因此存在时间延迟。

这是关于 RS-232 串行通信标准的维基百科文章

将串行端口与这篇关于 Parallel port 的维基百科文章进行比较。

并行端口每个位有一根线,因此所有位都在同一时间传输,而串行端口一次一个串行地传输位。在串行端口速度非常低的时候,并行端口用于更高速度的传输,例如打印机。多年来,串行端口速度已显着提高,但仍远不及 USB 速度。

于 2012-12-11T12:48:58.397 回答
0

这是串行到 USB 转换器的一般性质,您必须处理以较小块接收的数据。我认为 PL2303 有一个 64 字节的缓冲区,但无论如何它都在你试图在单次读取中传输的内容之下。

同样是异步的,没有分隔符来指定数据块的开始和结束,因此芯片/驱动程序必须根据片上缓冲区大小和它们可能实现的其他规则来决定在哪里中断数据流例如在将数据作为 USB 数据包转发之前的超时。

于 2012-12-11T12:49:39.550 回答