操作系统: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)
在发送端如果能够一次性推送整个字节,为什么不能一次性接收?
答案 0 :(得分:1)
串行通信需要时间来传输单个字节,具体取决于波特率。一旦收到,CPU处理字节的速度要快得多。
通过写入串行通信设备接口可以缓冲要发送的字节。然而,读取必须从其他设备接收字节,因此存在时滞。
这是wikipedia article on the RS-232 Serial Communications standard。
将串口与此wikipedia article on the Parallel port进行比较。
并行端口每位有一条线,因此所有位都在串行传输位的同时传输,一次一个。并行端口用于更高速的传输,例如在串行端口速度非常低的时候用于打印机。多年来串口速度已经大幅提升,但仍然没有接近USB速度。
答案 1 :(得分:0)
这是串口转USB转换器的一般特性,您必须处理以较小块接收的数据。我认为PL2303有一个64字节的缓冲区,但不管你在一次读取中尝试传输的情况如何。
同样是异步的,没有用于指定数据块的开始和结束的分隔符,因此芯片/驱动程序必须根据片上缓冲区大小和其他规则决定在何处中断数据流在将数据转发为USB数据包之前,他们可能会实施超时等。