Serialport não funciona corretamente após a atualização do ubuntu?

2

Eu tenho um problema estranho com a porta serial. Parece que o sth mudou depois das atualizações do ubuntu e reiniciou.

przem@przem:~/Pulpit/bat/scripts$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import serial
>>> ser = serial.Serial("/dev/ttyUSB0", 57600)
>>> ser.read()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/serial/serialposix.py", line 475, in read
    raise SerialException('device reports readiness to read but returned no data (device disconnected or multiple access on port?)')
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?)
>>> 

Eu sei que deveria ter "(sinal vazio) resultado do meu dispositivo, mas em vez disso eu recebo exceção:

'device reports readiness to read but returned no data (device disconnected or multiple access on port?)'

Esta pergunta é uma introdução ao meu problema: link

Por favor me ajude.

    
por pb. 29.09.2015 / 17:04

3 respostas

1

Eu tenho o mesmo problema. Não parece estar limitado ao hardware de porta serial. Você pode criar dois pseudo terminais usando socat:

$ socat -d -d pty,raw,echo=0 pty,raw,echo=0
2015/09/30 09:46:18 socat[6296] N PTY is /dev/pts/17
2015/09/30 09:46:18 socat[6296] N PTY is /dev/pts/18
2015/09/30 09:46:18 socat[6296] N starting data transfer loop with FDs [3,3] and [5,5]

Você pode se conectar com ambos os dispositivos, por exemplo, usando cu

cu -l /dev/pts/17 -s 115200

e

cu -l /dev/pts/18 -s 115200

e enviar dados em ambas as direções, sem problemas.

Mas a conexão com o Python 2.7 falha com a mensagem de erro que você mencionou

$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import serial
>>> ser = serial.Serial("/dev/pts/17", 230400, timeout=0.2)
>>> ser.read()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 460, in read
    raise SerialException('device reports readiness to read but returned no data (device disconnected?)')
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected?)

Este código funcionou antes de instalar as atualizações para o Ubuntu 14.04 ontem.

Alguma idéia?

    
por 30.09.2015 / 10:07
1

Eu não endosso isso, mas parei de ver esses erros depois de fazer essa alteração:

--- serialposix.py.stock    2015-10-03 06:53:45.241261071 -0700 
+++ serialposix.py  2015-10-03 06:55:07.481262475 -0700
@@ -457,7 +457,11 @@
             # Disconnected devices, at least on Linux, show the
             # behavior that they are always ready to read immediately
             # but reading returns nothing.
-                raise SerialException('device reports readiness to read but returned no data (device disconnected?)')
+                # retrying the read seems to get me past this error:
+                # [ERROR] Can't read from printer (disconnected?)     (SerialException): device reports readiness to read but returned no data (device disconnected?)
+
+                #raise SerialException('device reports readiness to read but returned no data (device disconnected?)')
+                pass
         read.extend(buf)
     return bytes(read)
    
por 03.10.2015 / 15:55
1

Isso pode ser um bug do kernel. Veja aqui: link

A solução parece ser usar o kernel 3.13.0-63-generic .

Você pode alterar o kernel para uma inicialização única mantendo o deslocamento durante a inicialização. Para tornar a mudança persistente, você precisa editar /etc/default/grub : link

    
por 24.10.2015 / 01:21