Hallo,
ich möchte gerne meine MCU via Bluetooth updaten. Dazu möchte ich die
aus Atmel Studio generierte BIN Datei via Blueooth zur MCU senden und
mit ElmChan FatFS auf einer SD-Karte speichern, von der ich das Update
dann ausführe.
Das Update von der Karte funktioniert, wenn ich die BIN Datei am PC
drauf kopiere. Aber beim senden via Bluetooth geht das nicht. Die Datei
auf der Sd-Karte sieht dann auch anders aus wie das original. Ein
kleines Programm zum senden habe ich in Visual Studio geschrieben, wo
man direkt binary daten einlesen kann. Aber man muss noch ein Encoding
angeben, ich weiß jedoch nicht welches das sein könnte. mit UTF-8 und
UTF-32 hatte ich kein Erfolg.
Kann mir da jemand helfen oder geht das ganze so nicht, da FatFS oder
die USART des ATXMEGA256A3U (die MCU wird verwendet) mit den Zeichen
nicht klar kommt?
Hoffe es kann jemand Helfen.
Ich sende vom Visual Studio über den Serial Port an dem via BT die MCU
verbunden ist die binary file welche ich einlese und diese wird an der
MCU am UART empfangen und mit FatFS auf die SD-Karte gespeichert. Was
möchtest du da jetzt sehen?
Ich möchte deine Quelltexte sehen. Ist das so abwegig?
Wie kommt denn die Datei auf die Funkschnittstelle und wie kommt sie von
dort auf die SD Karte?
Was das Encoding (UTF-8, UTF-32) angeht: Das hat mit Zeichensätzen für
Text zu tun. Bei der Verarbeitung von Binärdateien darf das keine Rolle
spielen, da gibt es kein Encoding. Offenbar verwendest du die falschen
Datentypen.
Des Weiteren kann ich dir nur dringend raten, nicht zwei Programme
gleichzeitig zu entwickeln. Denn wie du siehst weißt du jetzt nicht,
welches davon das fehlerhafte ist. Verwende lieber ein
Übertragungsprotokoll, dass du mit bewährten Programmen an der
Kommandozeile testen kann. Zum Beispiel Y-Modem
(https://linux.die.net/man/1/szhttp://textfiles.com/programming/ymodem.txt), das ist einfach
umzusetzen. Habe ich damals sogar als Teenager auf einem C64
hinbekommen.
Also der Zugriff auf die SD Karte gerade beim Update, wenn die BIN-Datei
direkt am PC drauf kopiert wird geht ja. Auch die Kommunikation mit
Bluetooth geht, es wird die Datei anleget wie ich will usw.
Direkt m VisualStduio gibt es einen BinaryReader welchen ich dafür
verwenden wollte um die binary datei über die Serielleschnittstelle zu
senden. Dieser BinaryReader möchte aber ein Encoding haben. Vielleicht
ist das aber auch einfach nur türicht das so machen zu wollen?
Peter schrieb:> Auch die Kommunikation mit> Bluetooth geht, es wird die Datei anleget wie ich will usw.
Aber der Inhalt ist nicht Ok, sagst du.
> Dieser BinaryReader möchte aber ein Encoding haben.
Das ergibt für mich keinen Sinn. Text Reader haben ein Encoding.
Womöglich benutzt du einfach nur die falsche Read() Funktion. Ich habe
jetzt aber keine Lust hier unqualifiziert weiter zu raten, bloß weil du
deinen Quelltext nicht zeigen willst.
> Also ist die Frage wohl mehr, kann ich meine "firmware.bin"> einfach über uart senden um diese dann als update zu speichern?
Eben deswegen habe ich ein einfaches bewährtes Übertragungsprotokoll
(Y-Modem) empfohlen. Jedes ordentliche Terminalprogramm unterstützt es,
und für Linux (auch CygWin) gibt es ein entsprechendes
Kommandozeilen-Tool.
Ich denke, das hat eher was mit ANSI und ASCII zu tun.
Kopierst du vom PC einfach mit Explorer oder mit Konsole
mit Zusatz Binär (Copy test.bin /b SdKarte:) ?
Die ser. Schnittstelle kann nur ASCII.
Peter schrieb:> Ja von welchemd er beiden Programme möchtest Du denn den Queltext?
Ich komme mir langsam verarscht vor. Natürlich von beiden!
Außerdem möchte ich die Analyse der Daten sehen, die übertragen werden.
Irgendwie musst ja geprüft haben, welches der beiden Programme
fehlerhaft ist. Wenn du das versäumt hast, dann hole es jetzt nach,
bevor es peinlich wird.
Du musst liefern, sonst ist hier schon Ende im Gelände.
Stefan ⛄ F. schrieb:>> Auch die Kommunikation mit>> Bluetooth geht, es wird die Datei anleget wie ich will usw.>> Aber der Inhalt ist nicht Ok, sagst du.
Genau der ist auf der SD Fehlerhaft. Weiß aber nun nicht ob diese
richtig raus geht und falsch gespeichert wird oder bereits falschr aus
geht.
>>> Dieser BinaryReader möchte aber ein Encoding haben.>> Das ergibt für mich keinen Sinn. Text Reader haben ein Encoding.>> Womöglich benutzt du einfach nur die falsche Read() Funktion. Ich habe> jetzt aber keine Lust hier unqualifiziert weiter zu raten, bloß weil du> deinen Quelltext nicht zeigen willst.
Leider habe ich das Visual Studio nicht programmiert um du entscheiden
ob BinaryReader ein Encoding verlangen soll oder ob nicht.
Heinz B. schrieb:> Ich denke, das hat eher was mit ANSI und ASCII zu tun.> Kopierst du vom PC einfach mit Explorer oder mit Konsole> mit Zusatz Binär (Copy test.bin /b SdKarte:) ?>> Die ser. Schnittstelle kann nur ASCII.
Am PC arbeite ich einfach mit Copy und Paste.
Dass die ser. Schnittstelle nur ASCII kann ist mir klar, deshalb ja auch
meine Frage ob ich da überhaupt die binary empfangen kann.
Heinz B. schrieb:> Ich denke, das hat eher was mit ANSI und ASCII zu tun.> Kopierst du vom PC einfach mit Explorer oder mit Konsole> mit Zusatz Binär (Copy test.bin /b SdKarte:) ?
Er hat doch geschrieben, dass die Daten der SD Karte in ordnung sind,
wenn er sie direkt mit dem PC beschreibt.
> Die ser. Schnittstelle kann nur ASCII.
Das ist totaler Unsinn. Die Serielle Schnittstelle des PC überträgt
Binärdaten in 7, 8 oder 9 Bits. Der TO braucht 8 Bits.
Peter schrieb:> Leider habe ich das Visual Studio nicht programmiert
Aber du hast hoffentlich dein Programm selbst programmiert und kannst
die Dokumentation dieser Klasse lesen. Wenn nicht ist der Fall
hoffnungslos.
Willst du dich immer noch weigern, deine Quelltexte zu zeigen?
Stefan ⛄ F. schrieb:> Das ist totaler Unsinn. Die Serielle Schnittstelle des PC überträgt> Binärdaten in 7, 8 oder 9 Bits. Der TO braucht 8 Bits.
Richtig, aber man muss auch noch darauf achten, dass nicht XON/XOFF als
Handshaking eingestellt ist.
Diopter . schrieb:> Richtig, aber man muss auch noch darauf achten, dass nicht XON/XOFF als> Handshaking eingestellt ist.
Von alleine schaltet sich das nicht ein.