2012-09-06 18 views
6

Quiero comunicarme con el teléfono a través del puerto serie. Después de escribir algún comando al teléfono, utilicé ser.read(ser.inWaiting()) para obtener su valor de retorno, pero siempre obtuve un total de 1020 bytes de caracteres, y en realidad, se espera que las devoluciones sean superiores a 50KB.Cómo expandir el tamaño del búfer de entrada de pyserial

He intentado configurar ser.read(50000), pero el intérprete esperará.

¿Cómo ampliaría el búfer de entrada para obtener todas las devoluciones a la vez?

+0

Posiblemente una [configuración del sistema operativo] (http://stackoverflow.com/a/10130825/673991)? –

Respuesta

1

Supongo que está leyendo 1020 bytes porque eso es todo lo que hay en el búfer, que es lo que devuelve ser.inWaiting(). Dependiendo de la velocidad en baudios, 50 KB puede tomar un tiempo para transferir, o el teléfono está esperando algo diferente de usted. Apretón de manos?

Inspeccione el valor de ser.inWaiting, y luego el contenido de lo que está recibiendo para obtener consejos.

3

He tenido exactamente el mismo problema, incluido el tamaño del búfer de 1020 bytes y no he encontrado una forma de cambiar esto. Mi solución ha sido implementar un bucle como:

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 

Yo estaría muy contento si alguien puede llegar a una solución tampón-cambio de tamaño!

0

pySerial utiliza los controladores de sistema operativo nativos para la recepción en serie. En el caso de Windows, el tamaño del controlador de entrada se basa en el controlador del dispositivo.

Puede aumentar el tamaño en la configuración de su Administrador de dispositivos si es posible, pero en última instancia, solo necesita leer los datos lo suficientemente rápido.

Cuestiones relacionadas