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
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.
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
Es gibt nichts ausserhalb des Bootloaders. Der bootloader kann nicht davon ausgehen, dass schon etwas geht. Denn wenn das kaputt ist ..
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 ...
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
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.
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.
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.
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. :-)
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.