如何扩大pyserial的输入缓冲区的大小(How to expand input buffer s

2019-07-31 10:09发布

我想通过串口与手机进行通信。 写一些命令来电话后,我用ser.read(ser.inWaiting())来获得它的返回值,但我总是得到总共1020 bytes的字符,而实际上,期望的回报率应该是超过50KB

我曾试图设置ser.read(50000)但解释会坚持下去。

我将如何扩大输入缓冲区获得所有收益的一次?

Answer 1:

我有完全相同的问题,其中包括1020字节的缓冲区大小,并没有找到一种方法来改变这种状况。 我的解决方案已经实现像一个循环:

in_buff=''
while mbed.inWaiting():
    in_buff+=mbed.read(mbed.inWaiting())    #read the contents of the buffer
    time.sleep(0.11)     #depending on your hardware, it can take time to refill the buffer

我会很高兴,如果有人能拿出一个缓冲调整大小的解决方案!



Answer 2:

如果您在Windows平台上运行的代码,你只需要在代码中添加一行。

ser.set_buffer_size(rx_size = 12800, tx_size = 12800)

其中12800是我选择了一个任意数字。 可以使接收(RX)和发送(TX)缓冲器一样大2147483647(等于2 ^ 31 - 1)

这将允许你扩大输入缓冲区获得所有收益的一次。

请注意,这只会有一些司机,因为它是一个推荐工作。 驱动程序可能无法把你的建议,并将其原始缓冲区大小坚持。



Answer 3:

我猜你正在读1020个字节,因为这是所有有在缓冲区,这是ser.inWaiting()将返回。 根据波特率50 KB可能需要一段时间来转移,或手机期待的东西与你不同。 握手?

检查ser.inWaiting的收到什么提示的值,然后将内容。



Answer 4:

pySerial采用串行接收本地操作系统的驱动程序。 在Windows的情况下,输入驱动器的大小是根据设备驱动程序。

您可以增加大小的设备管理器设置,如果有可能,但最终你只需要在快速读取数据就够了。



文章来源: How to expand input buffer size of pyserial