DownLoaderID

Lschreyer
Schreiberling
Avatar
Gender: n/a
Posts: 527
Registered: 02 / 2007
Subject:

DownLoaderID

 · 
Posted: 17.01.2019 - 10:23  ·  #1
Ich habe eine Frage zur DownLoaderID beim Flashloader oder BootID beim FAT Bootloader.

Beim Flashloader heißt es:
Die Konstante DownLoaderID muss vorhanden sein und muss in der BootApplication und in der
downloadbaren Main identisch sein.


In der Doku zum Flashloader steht, dass man im Programm ein
"const
// this constant must be the same as in the Main app
DownLoaderID : word = $1234; // mandatory constant
"
stehen haben muss.


Beim FAT Bootloader gibt es die DownloadID nicht, da gibt es stattdessen die
function UpdateFirmware(BootID : word) : boolean;

Ich gehe davon aus, das hier BootID = DownloaderID ist?

Wie definiere ich die "BootID" im zu ladenden Programm für den FAT Loader?

Was passiert wenn er nicht identisch ist? Bricht der Loader dann ab?

Ist es möglich vom FAT Bootloader her die ID des zu ladenden DLD auszulesen und ggf. eine Fehlermeldung (Sowas wie: "Ungültige Programmversion") auszugeben?
Lschreyer
Schreiberling
Avatar
Gender: n/a
Posts: 527
Registered: 02 / 2007
Subject:

Re: DownLoaderID

 · 
Posted: 17.01.2019 - 10:38  ·  #2
Noch eine Frage mehr:

Beim FAT-Treiber kann ich die SD-Card im SDIO Mode betreiben:
Define FAT16 = SDIO, PortE.4, PortB.5, PortB.6, iData; // 4xDATA, CMD, CLK

Geht das auch bein FAT Bootloader?
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: DownLoaderID

 · 
Posted: 17.01.2019 - 18:28  ·  #3
Quote by Lschreyer

Ich habe eine Frage zur DownLoaderID beim Flashloader oder BootID beim FAT Bootloader.

Beim Flashloader heißt es:
Die Konstante DownLoaderID muss vorhanden sein und muss in der BootApplication und in der
downloadbaren Main identisch sein.


In der Doku zum Flashloader steht, dass man im Programm ein
"const
// this constant must be the same as in the Main app
DownLoaderID : word = $1234; // mandatory constant
"
stehen haben muss.


Beim FAT Bootloader gibt es die DownloadID nicht, da gibt es stattdessen die
function UpdateFirmware(BootID : word) : boolean;

Ich gehe davon aus, das hier BootID = DownloaderID ist?

Wie definiere ich die "BootID" im zu ladenden Programm für den FAT Loader?

Was passiert wenn er nicht identisch ist? Bricht der Loader dann ab?

Ist es möglich vom FAT Bootloader her die ID des zu ladenden DLD auszulesen und ggf. eine Fehlermeldung (Sowas wie: "Ungültige Programmversion") auszugeben?


Hallo Lschreyer,

hast Du Dir schon mal die Demos dazu angeschaut?
Die meisten Antworten Deiner Fragen sind in den Demos enthalten.

Schau Dir die Demo-Projekte mal an, das ist recht gut erklärt.

Mein SD-Bootloader ist etws umfangreicher, da ich noch mein LCD-Display in der BootApp ansteuere.

Hier mal ein paar Schnippsel zur Fehlerabfrage:
Code
...
procedure CheckError;
begin
      if    BootErr = bootNoErr           then OutStr:= '00 no Error';         // Keine Fehler alles OK
      elsif BootErr = bootInvCardType     then OutStr:= '01 inv.Card Type';    // Falscher SD-Card Typ
      elsif BootErr = bootInvBootType     then OutStr:= '02 inv. Boot Type';
      elsif BootErr = bootReadFail        then OutStr:= '03 read Fail';        // Lesefehler
      elsif BootErr = bootClusterNotfound then OutStr:= '04 Cluster not Found';// Cluster Fehler evtl. defekte Firmwaredatei oder SDCard
      elsif BootErr = bootFalseID         then OutStr:= '05 wrong ID';         // Falsche LoaderID
      elsif BootErr = bootFalseCPU        then OutStr:= '06 wrong CPU';        // Firmware nicht für diese CPU geeignet
      elsif BootErr = bootAESerr          then OutStr:= '07 AES Error';        // AES entschlüsselungsfehler
      endif;
      PrintString('ERR:'+OutStr,4,1); // LCD-Ausgabe Fehler
    loop
      // gehe in Wartestellung und mache nichts weiter
    endloop;
end CheckError;



Code

...
{--------------------------------------------------------------}
{ Main Program }
{$IDATA}
begin
  // Optional a port pin can be checked for a forced download
  // If Pin.x = false then skip the EEprom checks
  //  ...
Debug_Break;
  if EEprom[EEpromEnd] = $00 then
    // If a Download failed or the app was never programmed then there is no $00
    // If the main app forces a download then the last byte in the EEprom must be $FF
    Application_Startup;
  endif;
Debug_Break;
// Nur Init, wenn der Flash gemacht werden soll..
// InitPort
  WDOff; // Schalte Hardware WatchDog AUSF !!!

//HxDispData Define für Data-Pin LCD-Display
  DDRE.2:= 1;  // 0=EINGANG  1=Ausgang
   I2CInit; // Init für LCD-Beleuchtung EIIN und Tastenabfrage 

// Ziehe Pointer für LCD-CHARS
 ptrLoadChars := @gLoadChars;

// LCD aktivieren
 LCDInit;

//Start-Meldung
PrintString('Mein XYZ-Bootloader V1.01',1,1);
// mDelay(10000);

  // at first check the Card detect switch, if present!
  // if ...

  // Initialize the MMC and check for a valid FAT16 file system
  if not FATInit then
    // big problem !!
     CheckError;
  endif;

{$IfDef FAT_bootModeAES}
  AES_Init(@DecryptKey);  // necessary if AES encryption is used
{$endif}

  // Firmwareupdate einleiten
     PrintString('Flash Firmware...',3,1);  // Ausgabe LCD-Display

  // This reads the UpdateFile and flashes it into the application area.
  // If selected then also EEprom and UserRow are reprogrammed.
  // The filename can have upto 8 chars, the extension must be ".dld"!
  // The extension must not be included and is always ".dld"
  if not UpdateFirmware($1234) then          // BootLoader ID
  // es gab einen Fehler
    CheckError;  // Fehlerabfrage 
  endif;
  ...
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: DownLoaderID

 · 
Posted: 18.01.2019 - 12:18  ·  #4
Wenn Du willst kann ich Dir auch gerne meinen BootloaderCode abspecken (LCD und I2C Funktionen raus) und zusenden.
Sag einfach bescheid.

Thorsten
Lschreyer
Schreiberling
Avatar
Gender: n/a
Posts: 527
Registered: 02 / 2007
Subject:

Re: DownLoaderID

 · 
Posted: 19.01.2019 - 11:13  ·  #5
Hallo, danke für die Infos! Code wird immer gern genommen, das würde mich freuen, dann kann ich es mir da abschauen.

Leider ist mir immer noch nicht klar wie ich im eigentlichen Programm die "BootID" angebe.
Ich rufe im Loader "UpdateFirmware(BOOTID);" auf.
Setze ich im Programm die BootID mit
Const bootid: Word= 123; ??
Oder muss hier wie beim Flashdownloader die Konstante "DownloaderID" genutzt werden?

Ich habe beides Probiert, der Loader endet immer mit Error 05: Wrong ID.

Das ist leider nirgends beschrieben, es gibt zwar eine Demo für den Loader, aber nicht für das eigentliche zu ladende Programm.


PS: Die Demo für den Flashdownloader (Xmega_Fatboot) ist übrigens nicht in der Liste der Avrco Samples aufgeführt.
Lschreyer
Schreiberling
Avatar
Gender: n/a
Posts: 527
Registered: 02 / 2007
Subject:

Re: DownLoaderID

 · 
Posted: 19.01.2019 - 11:58  ·  #6
Argh..ich habe es gefunden. Man muss die Konstante exakt so schreiben: DownLoaderID, also mit "L" in der Mitte, kein kleines l.
Ich hatte DownloaderID. Offenbar wird das mit genauer Groß-Kleinschreibung abgefragt.
Schade um die Zeit..wirklich sehr schade.

Jetzt läuft es endlich.
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 8 · Cache Hits: 14   112   126 · Page-Gen-Time: 0.026045s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI