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 № 1Ok, 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