Hallo !
Gibt es irgendwelche Einschränkungen, wenn ich JPEG Bilder über die
serielle Schnittstelle übertrage? Ich möchte von meinem Rechner, Bilder
an meinen ARM9 µC übertragen, diese dort auf einer externen
Speicherkarte ablegen und auf einem 4" TFT Farbdisplay darstellen.
Wie sind Eure Erfahrungen damit ?
Gibt es solch ein Projekt vielleicht schon?
Freundliche Grüsse
macke_a
Über serielle Schnittstellen lassen sich jedwede Art von Daten
übertragen, ob das nun JPEG-, GIF-, TIFF- oder sonstwas-Daten sind, das
ist der Schnittstelle vollkommen egal. Du musst nur nacheinander jedes
einzelne Byte übertragen.
Gut, Du solltest Dir noch ein Rahmenprotokoll drumherum ausdenken, damit
der Empfänger der Daten weiß, wann die Nutzdaten anfangen und wann sie
aufhören, aber auch das ist vollkommen unabhängig von der Art der
versendeten Daten.
Google mal nach den Protokollen X-MODEM, Y-MODEM, Z-MODEM und KERMIT.
Die Protokolle X-MODEM, Y-MODEM, Z-MODEM (und ev. KERMIT) kennen keinen
Text-Modus, sie übertragen alles mit 8 Bit.
(Bei FTP kann man zwischen ASCII und Binary wählen.)
Severino
Probleme gibt es nur, wenn die Gegenstelle ASCII Zeichen aus dem
Steuerzeichenbereich als Steuerzeichen interpretiert.
Ein X-Modem geht nicht, da die ASCII Zeichen 0x01, 0x04, 0x06, und 0x15
als "Steuerzeichen" interpretiert werden.
Du kannst Dir aber auch eine eigene Implementierung schreiben.
Dabei musst Du dann sogenannte Zeichenstopfen verwenden.
Wenn z.B. ein Zeichen 0x01 im Datenstrom vorkommt, dann musst Du
"0x01 0x01" senden. Und auf der anderen Seite wieder ein 0x01 entfernen.
Dann werden nur einzelne Vorkommen von z.B. 0x01 als Steuerzeichen
interpretiert und im Doppelpack als ein Zeichen des Datenstroms.
Ansonsten müsstest Du Dir ein eigenes Protokoll überlegen.
Z-Modem ist soweit ich weiss etwas komplizierter. Kann aber auch mit
"Binärdaten" umgehen (wird wahrscheinlich mit Zeichenstopfen arbeiten).
@ Matthias
X-Modem geht sehr wohl für Binärdaten, da jeder Block eine definierte
Länge hat und der Empfänger somit klar feststellen kann, was
Steuerzeichen und was Blockinhalt ist.
Wenn die Leitung eine gute Qualität hat, ist X-Modem absolut genügend.
Will man aber Dateinamen und Änderungsdatum und -zeit mit übertragen,
ist mindestens Y-Modem nötig.
Über eine schlechte Telefonleitung hat X-Modem jedoch tatsächlich den
Nachteil, dass bei verlorener Synchronisation durch Störungen ein
Nutzdatenbyte als Steuerzeichen interpretiert werden könnte, was aber
meistens "nur" zum Abbruch führt, kaum jedoch zu einer fehlerhaft
empfangenen Datei.
Dafür ist X-Modem sehr einfach zu implementieren.
Severino
Im Zusammenhang mit dem Übertragen von Dateien auf ein System, das
ebenfalls etwas mit Dateien anfangen kann, ist das Z-Modem-Protokoll das
reizvollste, da dieses auch Dateinameninformationen übermitteln kann.
Alle von mir genannten Protokolle werden von üblichen
Terminalprogrammen* wie Hyperterminal unterstützt, so daß auf PC-Seite
kein spezielles Programm entwickelt werden muss.
*) nein, weder "Bray" noch "HTerm" sind Terminalprogramme, diese sind
Analyse- und Testprogramme für serielle Übertragung.
Terminalprogramme aber emulieren serielle Terminals, werten also
übertragene Steuerzeichen zur Bildschirmsteuerung aus, wie es VT100,
TVI950 etc. alle auch taten.
Hallo ! Erstmal Danke für Eure Beiträge.
Nun soweit ich das verstanden habe, bin ich in der Lage mit dem Y-Modem
ein JPEG Bild über meine serielle Schnittstelle zu übertragen.
Was mir etwas mehr Sorgen bereitet ist, dass die Datei ja in 8Bit
Schritten übertragen wird, auch wieder vollständig und in der richtigen
Reihenfolge zusammengesetzt wird! Nun, die Daten werden unmittelbar auf
einer SD-Karte abgespeichert. Mmmh, da stellt sich für mich nur die
Frage, ob ich einen Puffer für das JPEG Bild erstellen soll und dann die
vollständigen Daten an die SD-Karte transportiere.
Was wird eigentlich passieren, wenn ich für mein 4" Zoll Display, eine
JPEG von einer anderen Größe 480x640 übertragen. Irgendwo wird es dann
wohl Probleme geben. Fehlt ein Stück vom Bild, oder wie kann sich so
etwas auswirken?
Freundliche Grüsse
macke_a
macke_a wrote:
> Was mir etwas mehr Sorgen bereitet ist, dass die Datei ja in 8Bit> Schritten übertragen wird, auch wieder vollständig und in der richtigen> Reihenfolge zusammengesetzt wird!
Das ist dein geringstes Problem.
Da implementierst du einfach ein Hardware-Handshake, also
die RS232 Leitungen RTS/CTS und schon kann der µC dem PC
mitteilen: "Warte mal, ich muss das bis jetzt gesendete
erst mal verarbeiten. - So, ich bin jetzt soweit fertig, es
kann weitergehen"
> Nun, die Daten werden unmittelbar auf> einer SD-Karte abgespeichert. Mmmh, da stellt sich für mich nur die> Frage, ob ich einen Puffer für das JPEG Bild erstellen soll und dann die> vollständigen Daten an die SD-Karte transportiere.
Wie du willst. Der Puffer belegt halt eine Menge SRAM-Speicher
und der ist auf einem µC sowieso notorisch knapp.
> Was wird eigentlich passieren, wenn ich für mein 4" Zoll Display, eine> JPEG von einer anderen Größe 480x640 übertragen. Irgendwo wird es dann> wohl Probleme geben. Fehlt ein Stück vom Bild, oder wie kann sich so> etwas auswirken?
Kommt auf deine Anzeige Funktionen an: Es kann ein Stück
fehlen, die Zeilen können rundum wrappen, das Programm hängt
sich auf, weil es damit nicht umgehen kann, ...
Das ist aber auch noch nicht wirklich dein Problem. Dein
Hauptproblem ist: Wo krieg ich eine JPEG Dekodierung her,
die auf meinem µC noch vernünftig läuft.
Hallo !
Ok besten Dank an alle...
Ich denke ich werde mit euren Informationen weiterkommen und hoffentlich
morgen gegen Abend ne Antwort bzw. ein lauffähiges Programm haben !
Ich melde mich !!
Freundliche Grüsse
macke_a