www.mikrocontroller.net

Forum: HF, Funk und Felder Funk Boot-Loader mit sehr wenig Code


Autor: Gogi M. (entwickler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,
wir wollen auf einem System mit MSP430 und CC1101 die Software per Funk 
updaten (immer komplett).
Problem ist, dass wir dafür weniger als 1k Flash frei haben.

Hat jmd. eine Idee/Quelle für für eine knackige Routine in C oder 
Assembler?

Danke
Gogi

Autor: ::: (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ha. ja. Du musst dir eine bidirektionales Protokol ausdenken, das die 
Datensicherheit bietet. Dh Bloecke einzeln adressiert, daher einzeln 
sendbar, mit CRC, allenfalls mit einem Hamming drueber. Ob ueber Funk, 
oder ueber Kabel ist eigenlich nur noch einen Initialisierung eines 
Funkmodems. Dh zuerst muss es mal mit einem Kabel funktionieren.

Autor: Ulf K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

halte ich für sehr ambitioniert. Ein sicheres Funkprotokoll (ACK, evtl. 
Verify im Flash) mit dem CC1101 in 1k Flash unterbringen? Sicher 
sinnvoll sich auf 64k-Blöcke (FIFO) zu beschränken. Evtl. Kommandos um 
Segment im Flash zu löschen + Daten mit Verify zu schreiben, Quittung 
zurücksenden und natürlich so viel wie möglich Intelligenz in den Sender 
stecken. CC1101 ausserhalb des Boot-Loaders initialisieren, dann nur 
noch RX und TX-Strobes und GDOs pollen, Adressauswertung (evtl. noch 
Synch-Wort ändern?) vom CC1101 machen lassen. Wenn ich mir's so 
überlege: ist einen Versuch wert!

Gruß

Ulf

Autor: ::: (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt nichts ausserhalb des Bootloaders. Der bootloader kann nicht 
davon ausgehen, dass schon etwas geht. Denn wenn das kaputt ist ..

Autor: Denker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber vielleicht kann man dem späteren Code die Funkroutinen des 
Bootloaders zur Verfügung stellen, dann müssten die nicht mehr doppelt 
geflasht werden und man könnte den Flash mehr für den bootloader nehmen 
...

Autor: Gogi M. (entwickler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Denker schrieb:
> Aber vielleicht kann man dem späteren Code die Funkroutinen des
> Bootloaders zur Verfügung stellen, dann müssten die nicht mehr doppelt
> geflasht werden und man könnte den Flash mehr für den bootloader nehmen
> ...

Das ist vielleicht keine schlechte Idee; die Geräte funken ja schon, 
allerdings mit einem für 32k Flash Bootloader ungeeigneten Protokoll. 
Man sollte aber den Bootloader (derzeit ~2k) damit laden können und ihm 
dann den Rest überlassen ... werde ich mal checken...

Schönes WE ersteinmal!
Gogi

Autor: ::: (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab auch mal einen Bootloader geschrieben und heausgefunden, im 
Bootloader sollte man keine Interrupts brauchen. Daher kann man 
zumindest diesen Teil nicht doppelt benutzen. Ein Bootloader in einem 
32k Teil ist auf der knappen Seite. Seither bevorzuge ich die 64k Teile.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab sowas auch geschrieben. MSP430 Update über CC2420. Der 
Bootloader sitzt in einem extra Flash-Segment, was nicht gelöscht wird. 
Da wir eh 64k externen Speicher dran haben, ging das sehr einfach. Mit 
den ohnehin vorhandenen Funk-Routinen die Daten erst in den externen 
RAM, jedes Paket Byte für Byte an den PC zurück, damit der vergleichen 
kann, ob alles korrekt ist, und wenn alles fertig in den ext. RAM 
übertragen ist, startet das Update. Das fällt sehr klein aus, weil es 
nur die eigentliche Flash-Routine und die Funktion zum Lesen des 
externen RAMs beinhaltet. Klappt zuverlässig.

Autor: Gogi M. (entwickler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian R. schrieb:
> Ich hab sowas auch geschrieben. MSP430 Update über CC2420. Der
> Bootloader sitzt in einem extra Flash-Segment, was nicht gelöscht wird.
> Da wir eh 64k externen Speicher dran haben, ging das sehr einfach. Mit
> den ohnehin vorhandenen Funk-Routinen die Daten erst in den externen
> RAM, jedes Paket Byte für Byte an den PC zurück, damit der vergleichen
> kann, ob alles korrekt ist, und wenn alles fertig in den ext. RAM
> übertragen ist, startet das Update. Das fällt sehr klein aus, weil es
> nur die eigentliche Flash-Routine und die Funktion zum Lesen des
> externen RAMs beinhaltet. Klappt zuverlässig.

Hallo Christian,
wir versuchen mittlerweile einen ähnlichen Weg:
wir haben ein fettes E²Prom in das wir auch noch den Bootloader ablegen 
können; bei Bedarf wird er dann im RAM ausgeführt; bei 2k RAM brauchen 
wir nur noch etwas Platz für die empfangenen Daten ...

Melde mich, wenn es läuft.

Autor: Patrick L. (padu64)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Gogi M.
Bist du weitergekommen?
Ich habe unabhängig von dem Artikel hier (Damals nicht gelesen :-) ) 
einen Bootlader mit Hilfe des Internen Bootlader der MSP430 er 
geschrieben der via der UART und ein wenig "Hühnerfutter" Daten direkt 
aus einem TCP/IP Stream "rausbickt" und ins Flash rein schreibt 
(Bootlader TI sei Dank) der Code ist gerade mal 1,5 K Gross, hat aber 
gewisse Einschränkungen was das Ethernet Protokoll angeht. 1. 
Halfduplex! 2. Nur 10Mbit (Der MSP ist sonst zu langsam,
2 ein Fehlertolerantes Sendeprogramm, weil der MSP nicht alles 
Quittiert.
dies mit Hilfe des Internen DMA Kontroller's des MSPS.
Das Verzückte daran ist ES WIRD KEIN enc xy oder 9800er oä. IC benötigt, 
der MSP ist neben ein paar externen Transistoren das einzige aktive 
Element!
Läuft zur Zeit noch nicht stabil aber wenn's Läuft werde ich es 
Berichten.
Fehler liegt aber wahrscheinlich PC Seitig beim Sendeprogramm.
vielleicht nützt dann der Source was für dein Projekt. :-)

Autor: Gogi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Patrick,
danke für die Info!
Wir wollen ja über SRD-Funk Bootloadern, deshalb ist unser Code mit ~2k 
etwas größer.

Unsere Lösung ist derzeit sehr einfach: wir verwenden jetzt den IAR 
Compiler, der ist 10% effizienter und damit passt der Code rein.

Es schaut aber jetzt auch noch einmal jmd. "Frisches" auf den Code und 
vielleicht finden wir so ja noch eine relevante Optimierung.

die Idee, den internen Bootloader zu verwenden, hört sich reizvoll an - 
-allerdings kommen die Daten ja vom Funkchip, d.h. wir können kein 
Protokoll einhalten ... aber ich werrde bei TI mal anfragen, ob wir 
nicht die Kommandos für den Bootloader bekommen.

Bis später
Gogi

Autor: Patrick L. (padu64)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Gogi

um den bootlader zu benutzen habe ich ihn von hand "dissassembliert" und 
benutze lediglich rutienen davon.
aber falls du die Infos von TI bekommst wäre ich auch interessiert.

Gruss Padu

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.