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.