C#- und CCS-Dateiübertragung

Ich muss Dateien von/zu SerialPort und MSP430F5438A senden/empfangen, indem ich auf eine Schaltfläche zum Durchsuchen in der C#-Oberfläche klicke, eine Datei (wie Text, Notizblock usw.) auswähle und im Fall des Empfangs die Datei, die gesendet wurde, speichern soll CCS auf PC!

Bei Google oder anderswo konnte ich wirklich nichts passendes finden. Kann mich jemand wenigstens orientieren?

Sie sollten sich Modemübertragungsprotokolle wie ZModem usw. ansehen.
@Majenko-Modem? Ich benutze UART!
Und? Was denkst du, wo ein Modem eingesteckt wird? Nur weil sie für die Verwendung mit seriellen Verbindungen mit Modems entwickelt wurden, sind sie für serielle Verbindungen ohne Modems von unschätzbarem Wert.
@ Majenko tut mir leid, aber ich verstehe nicht, was du sagen willst.
Was ich sagen will, ist, dass es für den Computer und den Mikrocontroller keinen Unterschied zwischen einem Modem und einer UART-Verbindung gibt - Sie müssen sie nur nicht wählen. Es gibt viele Dateiübertragungsprotokolle, die bereits für den Betrieb über asynchrone serielle Verbindungen wie Modems, UART usw. entwickelt wurden, und sie werden zusammenfassend als Modemübertragungsprotokolle bezeichnet, da sie dafür ursprünglich verwendet wurden.
@Majenko Jetzt verstehe ich ehrlich ... Ich weiß, wofür UART steht, und ich kann Zeichenfolgen / Zeichen zwischen dem Computer und dem Mikrocontroller übertragen, aber ich habe einfach keine Ahnung, "wie" das Auswählen, Öffnen, Senden, Empfangen und Speichern einer Datei implementiert wird Verfahren. Ich glaube, ein Hinweis, Link, ... würde helfen!
Nun, bei dieser Seite (der C#-Seite) können wir Ihnen nicht helfen. Wir sind Elektroniker, keine Programmierer. Fragen Sie auf StackOverflow.com danach. Wir können Ihnen nur bei der Übertragung der Daten über die UART-Verbindung und der Implementierung auf dem Mikrocontroller helfen.
Wenn Sie die Route des Modemprotokolls verfolgen möchten, beginnen Sie nicht mit Ihrer eigenen C#-App, sondern beginnen Sie mit dem seriellen Terminalprogramm eines anderen, das von diesen gebaut wurde, bringen Sie Ihren eingebetteten Code zum Laufen, indem Sie dagegen testen, und dann, wenn das ist bekanntermaßen gut entwickeln Sie Ihren C#-Code. Der Punkt ist, dass es immer besser ist, ungetesteten Code gegen getesteten Code laufen zu lassen, als anderen ungetesteten Code. Sie können auch ein Paket für virtuelle serielle Ports verwenden, um Ihr C# gegen einen Build Ihres MSP-C-Codes zu testen, der stattdessen für die Ausführung auf Ihrem PC erstellt wurde.

Antworten (1)

Ich würde die Datei in eine Art Puffer auf Ihrer Benutzeroberfläche einlesen, in kleine Pakete zerlegen und senden.

Beispielsweise erlaube ich dem Benutzer auf meiner Benutzeroberfläche, ein neues Firmware-Image auf mein Gerät hochzuladen. Also sende ich diese Firmware-Datei zeilenweise über den UART. Mein MSP430 liest diese Zeile in einen Puffer, der X Zeichen lang ist, validiert sie, speichert sie an einem Ort auf einem externen Flash-Speicher und empfängt dann die nächste Zeile. Sobald er alle Daten erhalten hat, verzweigt der MSP430 in seinen Bootloader-Code.

Sie müssen nur entscheiden, wie Sie die Daten aufteilen und Ihre Puffer entsprechend dimensionieren.

Ich muss kein spezielles serielles Protokoll definieren, da meine Dateien bereits auf eine bestimmte Weise formatiert sind und ich die Datei Zeile für Zeile senden und am anderen Ende analysieren kann. http://en.wikipedia.org/wiki/SREC_(Dateiformat)

Aber für eine generische Anwendung sollten Sie vielleicht ein leichtes Protokoll definieren. Jede Zeile beginnt mit einem bestimmten Zeichen, einer Sequenznummer, einer Nutzdatenlänge und möglicherweise einem Endbyte. Etwas in diese Richtung:

| Byte 0               | Byte 1          | Byte 2                              | Byte 3         | Bytes 4 to (p+4) | Byte 5+p           |
|----------------------|-----------------|-------------------------------------|----------------|------------------|--------------------|
| Arbitrary Start Byte | Sequence        | Total number of packets - up to 255 | Payload Length | The data         | Arbitrary End Byte |
| 0x0A                 | Number x        | Of X                                | p < 256        |                  | 0xFF               |

Dann können Sie die gesamte Datei verwerfen, wenn ein Chunk fehlt. Sie könnten auch eine einfache Prüfsumme einfügen, um sicherzustellen, dass die Leitung nicht beschädigt wurde, als sie auf dem Draht war.

Der Parser für diese Art von Dingen wäre relativ einfach auf beiden Seiten zu schreiben.

BEARBEITEN: Zu Testzwecken empfehle ich die Verwendung von realterm. Es ist ein flexibles binäres Terminalprogramm, mit dem Sie beliebige Daten, Dateien usw. senden können. Sie können es auch verwenden, um serielle Ports zu überwachen.

Zunächst einmal „erlaube ich dem Benutzer auf meiner Benutzeroberfläche, ein neues Firmware-Image auf mein Gerät hochzuladen.“ genau das will ich wissen wie man das macht. Und was ist das für eine Nutzlastlänge?
Nutzlastlänge für diese bestimmte Leitung. Sie würden also eine Zeile aus der FW-Datei Zeile für Zeile und Zeichen für Zeichen ausstempeln. Wenn der MSP430 sein erstes Zeichen empfängt und es mit dem Startzeichen übereinstimmt, bereitet er den Speicher für das nächste Zeichen vor und so weiter. Wenn Sie schließlich das vierte Zeichen, die Länge der Nutzdaten, eingelesen haben, erfahren Sie, wie viel Platz Sie für diese bestimmte Datenzeile zuweisen müssen. Sie können jedes Paket immer aus 30 Zeichen oder so machen, wenn Sie möchten, oder Sie können die Paketlänge variabel machen. Es hilft Ihnen nur, das Paket zu validieren und Speicherplatz zuzuweisen.
Sie haben Recht, diese Verfahren müssen durchgeführt werden, nachdem ich die Benutzeroberfläche erstellt habe, sodass beispielsweise auf eine Schaltfläche zum Durchsuchen geklickt werden muss, um eine Datei vom PC zu öffnen und diese Verfahren dann zu implementieren. Das Erstellen der Benutzeroberfläche in C #, das möchte ich wirklich wissen!
Dann stimme ich dem Kommentar zum OP zu. Die Frage, wie man einen Dateisuchdialog erstellt, wäre am besten für den Stapelüberlauf geeignet. Aber ich glaube, Sie suchen Folgendes: msdn.microsoft.com/en-us/library/…
Hier ist ein Beitrag zum Stapelüberlauf zum Thema stackoverflow.com/questions/4999734/…