Funk Boot-Loader mit sehr wenig Code

OP #1337075
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
Gast #1337212
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.
Gast #1338219
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
Gast #1338310
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 
...
OP #1338590
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
Gast #1338840
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.
#1339007
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.
OP #1343377
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.
#1475413
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. :-)
Gast #1476073
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren