Hallo, Kennt sich jemand mit dem dfuprog (Device Firmware update programmer) aus. Wird von Stellaris zur Verfügung gestellt. Ich bin dabei über die USB Schnittstelle einmal den Stellaris Microcontroller zu flashen, das habe ich soweit auch hinbekommen, als nächstes will ich dann das SPI Flash mit dem dfuprog updaten. Nur weiß ich nicht so ganz genau wie ich das realisieren soll. Die Hauptidee ist die, dass ich 2 binary files in einem USB Stick ablege und dann das USB Stick mit dem uC verbinde und das eine file updatet den uC und das 2te file das SPI Flash. Wenn sehr dankbar für ideen.
Peter schrieb: > Die Hauptidee ist die, dass ich 2 binary files in > einem USB Stick ablege und dann das USB Stick mit dem uC verbinde und > das eine file updatet den uC und das 2te file das SPI Flash. Dann brauchst du einen Bootloader, der das kann. Gruß Oliver
Ja genau, einen Boottloader habe ich auch schon hinzugefügt, ich kann zwar das Stellaris Flash updaten soweit bin ich schonj, nur verstehe ich nicht, wie soll das update für das SPI Flash funktionieren, was genau muss ich denn ändern damit auch das SPI Flash upgedatet wird.
Wenn das Stellaris nicht weiss, haben die das so vermutlich nicht vorgesehen. Eine Möglichkeit wäre, den Controller 'ganz normal' upzudaten und wenn dann Dein Programm erstmal läuft, eine Abfrage integrieren, die auf nen USB-Stick reagiert. Beim Anstöpseln wird dann nach der spi-update.bin gesucht. Ist die vorhanden, dann wird sie geschrieben.
Hallo, nun hab herausgefunden wie ich meine idee realisieren kann. Also hab in der bl_usb. c des bootloaders eieinbißchen was verändert, hab festgestellt, welche funktion dafür zuständig ist, dass über der commandzeile empfangene addresse abgelegt wird. soweit so gut. Hab meine SPI routine in den bootloader soweit implementiert, das ich in das SPI Flash flashen kann, jedoch funktioniert das binary file meines eclipse projektes, da dort ja eine App_Start _Addr definiert wird worauf dann reagiert wird. ich möchte ja das SPi Flash so flashen, dass ich einmal das .mcs file in .bin file umwandle dann dies über dfuprog mit einer bestimmten Addresse über der Kommandozeile sende, daraufhin soll ja dieselbe routine diese Addresse übernehmen und mit meiner Abfrage entweder in das externe oder interne Flash flashen. aber leider funktioniert das Grad nicht, weil die Addresse ja nicht so definiert ist wie bei App_Start_address und das umgewandelte .bin file hat ja auch keinen header davor. über dfuprog kommt dann auch die Fehlermeldung: DFU_ERR_INV_ADDR(-7) wie schaffe ich nun, dass er die rcihtige addresse übernimmt. Meine Modifikation des bootloader files bl_usb.c in der Funktion tBoolean ProcessDFUDnloadCommand(tDFUDownloadHeader *pcCmd, unsigned long ulSize)
1 | if((psHdr->usStartAddr) == 0x8000000) |
2 | {
|
3 | g_sNextDownload.pcStart = (unsigned char *)(psHdr->usStartAddr); |
4 | g_sNextDownload.ulLength = psHdr->ulLength; |
5 | |
6 | g_pcDFUWrite = (unsigned char *)(psHdr + 1); |
7 | g_usDFUBufferUsed = ulSize - sizeof(tDFUDownloadHeader); |
8 | |
9 | HWREGBITW(&g_ulCommandFlags, CMD_FLAG_WRITE) = 1; |
10 | ext_Flash = 1; |
11 | }
|
dann in der Funktion UpdaterUSB:
1 | if(ext_Flash == 1) |
2 | {
|
3 | SFlash_Init(); |
4 | SFlash_write(&ulStart , usUsed); |
5 | |
6 | }
|
also wenn ich jetzt die Kommandozeile eingebe: dfuprog -f Spi_flash.bin -a 0x8000000 -r -v dann sollte ja mein SPI Flash programmiert werden und wenn ich dfuprog -f Spi_flash.bin -a 0x1800 -r -v eingebe, soll dann das interne Flash programmiert werden. Hat jemand vielleicht ne Idee oder hat schon mit dfu gearbeitet? Danke.
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.