Forum: Mikrocontroller und Digitale Elektronik AVR bin-datei via bluetooth senden


von Peter (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

Wobei sollen wir denn helfen? Du solltest vorzeigen, was du gemacht 
hast.

von Peter (Gast)


Lesenswert?

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?

von Stefan F. (Gast)


Lesenswert?

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/sz 
http://textfiles.com/programming/ymodem.txt), das ist einfach 
umzusetzen. Habe ich damals sogar als Teenager auf einem C64 
hinbekommen.

von Peter (Gast)


Lesenswert?

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?

von Peter (Gast)


Lesenswert?

Also ist die Frage wohl mehr, kann ich meine "firmware.bin" einfach über 
uart senden um diese dann als update zu speichern?

von Stefan F. (Gast)


Lesenswert?

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.

von Peter (Gast)


Lesenswert?

Ja von welchemd er beiden Programme möchtest Du denn den Queltext?

von Heinz B. (Firma: Privat) (hbrill)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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.

von Peter (Gast)


Lesenswert?

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.

von Peter (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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?

von Diopter  . (diopter)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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.

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
Noch kein Account? Hier anmelden.