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.
Rufus hat Recht, allerdings müssen die Bilder als "binäre Daten" übertragen werden, nicht als Texte!
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
hast du dir schon überlegt wie du das jpeg-Bild decodierst? Ich denke nicht, denn sonst würdest du die Frage mit der Auflösung nicht stellen ...
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.
https://sourceforge.net/projects/mb-jpeg/ ach ja, muss es unbeding RS232 sein? das ist nämlich super langsam :(
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.