PySerial Problem

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
JonasR
User
Beiträge: 251
Registriert: Mittwoch 12. Mai 2010, 13:59

Hi,

ich arbeite im Moment an einem Projekt wo ich ein Marvel Board mit U-Boot über die Serielle Konsole ansteuere.

Das Problem beginnt damit die Einstellungen im U-Boot zu ändern da mir dort auf einmal stücke meines Commands fehlen.

Code: Alles auswählen

import serial

ser = serial.Serial()
ser.baudrate = 115200
ser.port = 3
ser.timeout = 2
ser.parity = serial.PARITY_NONE
ser.stopbits = serial.STOPBITS_ONE
ser.bytesize = serial.EIGHTBITS
ser.open()
ser.write("setenv install_options 'backup= url=Image kernel=uImage rootfs=rootfs.tar.gz modules=modules.tar.gz apptype= access=c2hlZXZhOnBsdWcK'")
ser.write("\r")
ser.write("setenv bootargs_console 'console=ttyS0,115200'")
ser.write("\r")
ser.write("setenv bootcmd 'run recover1'")
ser.write("\r")
ser.write("setenv recover1 'setenv mainlineLinux yes; setenv arcNumber 2097; setenv bootcmd run recover2; saveenv; reset'")
ser.write("\r")
ser.write("setenv recover2 'run recover3; setenv bootcmd $(real_bootcmd); saveenv; run rec33'")
print ser.readlines()
Zurück kommt dann
setenv install_options 'backup= url=Image kernel=uImage rootfs=rootfs.tar.gz modules=modules.tar.gz apptype= access=c2hlZXZhOnBsdWcK'


Marvell>> setenv bootargs_console 'console=ttyS0,115200'


Marvell>> setenv bootcmd 'un recover1'


Marvell>> setenv recover1 arcNumber 2097; setenv bootcmd run recover2; saveenv; reset'


Saving Environment to NAND...

Erasing Nand...Writing to Nand... done

þ

__ __ _ _

| \/ | __ _ _ ____ _____| | |

| |\/| |/ _` | '__\ \ / / _ \ | |

| | | | (_| | | \ V / __/ | |

|_| |_|\__,_|_| \_/ \___|_|_|
Er führt den vorletzten befehl aus und in diesem fehlt ein Teil. Wie es kommt kann ich mir nicht erklären... Wenn ich es über das HyperTerminal eingebe funktioniert alles. Wäre nett wenn mir das wer erklären könnte =)

€dit: Ich sehe gerade die Ausgabe ist mit readline in jeder Zeile gemacht und nicht wie oben mit readlines. Kommt aber das gleiche zurück nur in einem Array :D

MfG
Benutzeravatar
DaMutz
User
Beiträge: 202
Registriert: Freitag 31. Oktober 2008, 17:25

warum sendest du jeweils ein \r und nicht ein \n?

Auch in diesem Aufruf:

Code: Alles auswählen

ser.write("setenv bootcmd 'run recover1'")
fehlt das 'r', ich würde einmal einen Versuch machen, wo du nach jedem ser.write Aufruf jeweils mit time.sleep ein paar Millisekunden oder gar Sekunden eine Pause machst.
JonasR
User
Beiträge: 251
Registriert: Mittwoch 12. Mai 2010, 13:59

Ich hatte am Anfang immer \n genommen :D Dann kam ich mal auf die Idee \r zu probieren und habe es seit dem nicht mehr getauscht.

Habe gerade mal probiert ein sleep zu benutzen. Funktioniert soweit ich das sehe =)

Denn mal vielen Dank
Antworten