Forum: Mikrocontroller und Digitale Elektronik DFU Programmer


von Peter (Gast)


Lesenswert?

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.

von Oliver J. (skriptkiddy)


Lesenswert?

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

von Peter (Gast)


Lesenswert?

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.

von Pit (Gast)


Lesenswert?

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.

von Peter (Gast)


Lesenswert?

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.

von Peter (Gast)


Lesenswert?

keiner ne Idee???

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
Noch kein Account? Hier anmelden.