/ / pySerial não gosta de valores baixos - python, porta serial, microcontrolador, pyserial, uart

pySerial não gosta de valores baixos - python, serial-port, microcontrolador, pyserial, uart

Jogando com um MCU, estou tentando se comunicar através de um link RS232 para um desktop PC.

Eu fiz um programa de teste muito simples: enviar "Olá mundo! N" cada n Senhora.

Os parâmetros de conexão de link mais relevantes são:

  • Porta: / dev / ttyUSB0
  • Taxa de transmissão: 57600 bps
  • 8 bits de dados
  • 1 bit stop
  • Sem paridade e controle de hardware

Para verificar se recebo dados do MCU para o PC, configurei / dev / ttyUSB0 com:

%> stty -F /dev/ttyUSB0 57600 cooked

e depois,

%> cat /dev/ttyUSB0
Hello world!
Hello world!
Hello world!
...

Então, recebo os dados do MCU corretamente.

Mas, aqui o problema, quando eu quero usar o Python com o módulo pySerial, os dados estão absolutamente errados:

>>> s = serial.Serial("/dev/ttyUSB0", 57600)
>>> print s
Serial<id=0x195fed0, open=True>(
port="/dev/ttyUSB0", baudrate=57600,
bytesize=8, parity="N",
stopbits=1, timeout=None,
xonxoff=False, rtscts=False,
dsrdtr=False)

>>> s.read(14)
"xc8xe5xecxecxefxa0xf7xefxf2xecxe4xa1x8ax80"

Neste ponto, eu mudeiOlá mundo! N " string de saída (lado MCU) para esta string: 0xde, 0xad, 0xbe, 0xef. E o que eu recebo com pySerial é:

>>> s.read(4)
"xdexadxbexef"

Funciona! Eu mudei outra vez, agora para isto: 0x00, 0x01, 0x02, 0x03, 0x80, 0x81, 0x82, 0x83. Resultado:

>>> s.read(8)
"x80x81x82x83x80x81x82x83"

Conclusão: pySerial altera o valor de bytes menor que 128 para o mesmo valor mais 128.

Eu não sei porque isso está acontecendo. Eu usei o módulo pySerial em outras ocasiões (versão 2.4) e tudo funcionou bem. Eu tentei com 2.5 e 2.6 versões no Ubuntu 11.10 e Ubuntu 10.04, mas não funciona. Alguma pista?

PD: Seja simpático com a minha escrita em inglês. Eu não sou proficiente em inglês como deveria ser.

Respostas:

0 para resposta № 1

Ok, minha culpa! PySerial funciona perfeito. Revisando o código no MCU, descobri um erro ao desabilitar um bit que deveria ser definido (eu estava enviando um tamanho de caractere de 7 bits). Então, o quadro recebido estava, obviamente, parcialmente bem, parcialmente errado.

Agora, eu posso entender porque pySerial me mostra malresultados. No entanto, é um mistério para mim como meu PC reconstrói a partir de dados de 7 bits, caracteres de 8 bits de comprimento. Eu estava absolutamente convencido de que o código do MCU era bom porque os dados do terminal estavam corretos: S