[pySerial] Embedded Computer ARM & RS485
Bonjour,
Je suis face à un problème et je ne trouve plus de piste pour le résoudre :(
Je possède deux ordinateurs embarqués (identiques) à base d'un processeur ARM et d'une distrib Debian, je dois faire communiquer ces machines via un port série de type RS485 (la puce est câblée directement aux sorties processeur et pilotable via le ttyS2).
J'utilise la librairie pySerial afin d'ouvrir le port, d'écrire et lire dessus.
Ce que j'écris passe bien par les câbles et arrive de l'autre côté (visualisation via oscilloscope...), cependant lorsque j'accède au buffer, aucun caractère n'est disponible. Ce n'est que lorsque j'écris sur le port que j'ai accès aux données précédentes...
Lorsque j'écris plus de 500 Bytes, un certain nombre apparaît (pas tous !) dans le buffer et y sont lisibles.
J'espère que quelqu'un pourra aura une idée !
Voici une partie du code source pour aider à la compréhension :
Partie commune
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
import serial,fcntl, struct
ser = serial.Serial(
port='/dev/ttyS2',
baudrate=115200,
timeout=10,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
rtscts=True
)
# Use system driver
fd=ser.fileno()
serial_rs485 = struct.pack('hhhhhhhh', 1, 0, 0, 0, 0, 0, 0, 0)
fcntl.ioctl(fd,0x542F,serial_rs485)
ser.flushInput()
ser.flushOutput() |
Peer 1 (écrit une requête et doit lire la réponse)
Code:
1 2 3 4 5 6 7 8 9 10
|
ser.write(request)
s = ser.read(len(request))
# Read char by char until /r/n (
complete=false
while not complete:
...
c = ser.read()
... |