Hallo Zusammen,
ich möchte für eine Applikation den E-LAB FlashDownloader nutzen.
Ich flashe hierzu die bootApp (abgeandelt von den Demos).
Im nächsten Schritt flashe ich mein Programm über den FlashDownloader.
Soweit so gut, die Applikation ist aufgespielt und ich bin glückliche...
Zumindest bis ich eine andere Version der Applikation aufspielen möchte.
Nach Hardwarereset kann ich über den FlashDownloader wieder flashen (er zeigt entsprechend den Fortschritsbalken eine angemessene Zeit an). Nur leider ist immer noch die erste Version drauf.
Neu laden des Projektes, Erase usw bringen nichts. Flashe ich den Bootloader wieder neu auf, siehe da, ich kann genau einmal wieder eine Applikation mit dem Flash Downloader Flashen.
Nun weiß ich irgendwie auch nicht weiter.
Anbei die BootApp und der relevante Teil aus der Applikation
Vielen Dank für die Hilfe!
Markus
Applikation
Const
DownLoaderID : word = $1234; // mandatory constant
BootApp:
ich möchte für eine Applikation den E-LAB FlashDownloader nutzen.
Ich flashe hierzu die bootApp (abgeandelt von den Demos).
Im nächsten Schritt flashe ich mein Programm über den FlashDownloader.
Soweit so gut, die Applikation ist aufgespielt und ich bin glückliche...
Zumindest bis ich eine andere Version der Applikation aufspielen möchte.
Nach Hardwarereset kann ich über den FlashDownloader wieder flashen (er zeigt entsprechend den Fortschritsbalken eine angemessene Zeit an). Nur leider ist immer noch die erste Version drauf.
Neu laden des Projektes, Erase usw bringen nichts. Flashe ich den Bootloader wieder neu auf, siehe da, ich kann genau einmal wieder eine Applikation mit dem Flash Downloader Flashen.
Nun weiß ich irgendwie auch nicht weiter.
Anbei die BootApp und der relevante Teil aus der Applikation
Vielen Dank für die Hilfe!
Markus
Applikation
Code
Const
DownLoaderID : word = $1234; // mandatory constant
BootApp:
Code
(**********************************************)
(* Sample how to use a BootApp to program the *)
(* Main application via an UART *)
(* This application is the bootloader and *)
(* runs in the boot area *)
(**********************************************)
program XMega_BootAppSer;
{$NOSHADOW}
{ $WG} {global Warnings off}
Device = xmega128A3U, VCC=3.3;
{$BootApplication} // $20000
Define_Fuses
Override_Fuses;
// NoteBook = A;
COMport = USB;
ProgMode = PDI;
LockBits0 = [BLBB0, BLBB1, LB0, LB1]; // protect boot and app against read back
FuseBits0 = [];
FuseBits1 = [];
FuseBits2 = [BootRst]; // mandatory !!
FuseBits5 = [BODACT0, BodLevel0, BodLevel1, BodLevel2];
Import SysTick, SerPortD1, FlashLoader, SysLEDblink, BeepPort;
From System Import Traps;
Define
OSCtype = int2MHz, PLLmul=8;
//OSCtype = int32Mhz,
// PLLmul=4,
// prescB=1, // PeripherX4=32MHz
// prescC=1;
// OSCtype = ext16MHz, PLLmul=8;
//OSCtype =extXTAL=16000000, PLLmul=8, prescA=1, prescB=2, prescC=1;
StackSize = $0300, iData;
FrameSize = $0300, iData;
SysTick = 10;
IDATA1 = $1ff0;
SerPortD1 = 9600, parNone; // Download device
RxBufferD1 = 255, iData;
TxBufferD1 = 255, iData;
BeepPort = PortR, 0;
SysLEDblink = mSec300; // 10..1000 msec
SysLEDBlink0 = PortR, 1, high;
Implementation
{$IDATA}
{--------------------------------------------------------------}
{ Type Declarations }
{--------------------------------------------------------------}
{ Const Declarations }
const
// this constant must be the same as in the Main app
DownLoaderID : word = $1234; // mandatory constant
cStr : string = 'ABCD';
{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA1}
var
bo : boolean;
bb : byte;
{$IDATA}
var
st1 : string[16];
{--------------------------------------------------------------}
{ functions }
procedure FlashLoaderInit; // mandatory
begin
end;
function FlashLoaderRecv : byte; // mandatory
begin
return(SerInpD1);
end;
procedure FlashLoaderTransm(arg : byte); // mandatory
begin
SerOutD1(arg);
end;
// mandatory
procedure FlashLoaderExit;
begin
if Application_Valid then
EEprom[EEpromEnd]:= $00; // validate application for Boot usage
endif;
BeepChirpH(3);
mDelay(1000);
HardwareReset; // restart with a jump into the Boot
end;
// These procedures/functions can be called from the main application
function BootFunction : boolean; Trap;
begin
nop; // do anything
nop;
nop;
return(bo);
end;
procedure BootProc(x : byte); Trap;
begin
bb:= x;
end;
{--------------------------------------------------------------}
{ Main Program }
{$IDATA}
begin
// optional a port pin can be checked for a forced download
// if Pin.x = false then ...
// ...
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;
EnableInts($87);
SysLEDflashAllOn;
BeepChirpL(2);
loop
FlashDownLoader;
// Downloader does an exit to the main app if
// a valid main has been downloaded
endloop;
end XMega_BootAppSer.
(* Sample how to use a BootApp to program the *)
(* Main application via an UART *)
(* This application is the bootloader and *)
(* runs in the boot area *)
(**********************************************)
program XMega_BootAppSer;
{$NOSHADOW}
{ $WG} {global Warnings off}
Device = xmega128A3U, VCC=3.3;
{$BootApplication} // $20000
Define_Fuses
Override_Fuses;
// NoteBook = A;
COMport = USB;
ProgMode = PDI;
LockBits0 = [BLBB0, BLBB1, LB0, LB1]; // protect boot and app against read back
FuseBits0 = [];
FuseBits1 = [];
FuseBits2 = [BootRst]; // mandatory !!
FuseBits5 = [BODACT0, BodLevel0, BodLevel1, BodLevel2];
Import SysTick, SerPortD1, FlashLoader, SysLEDblink, BeepPort;
From System Import Traps;
Define
OSCtype = int2MHz, PLLmul=8;
//OSCtype = int32Mhz,
// PLLmul=4,
// prescB=1, // PeripherX4=32MHz
// prescC=1;
// OSCtype = ext16MHz, PLLmul=8;
//OSCtype =extXTAL=16000000, PLLmul=8, prescA=1, prescB=2, prescC=1;
StackSize = $0300, iData;
FrameSize = $0300, iData;
SysTick = 10;
IDATA1 = $1ff0;
SerPortD1 = 9600, parNone; // Download device
RxBufferD1 = 255, iData;
TxBufferD1 = 255, iData;
BeepPort = PortR, 0;
SysLEDblink = mSec300; // 10..1000 msec
SysLEDBlink0 = PortR, 1, high;
Implementation
{$IDATA}
{--------------------------------------------------------------}
{ Type Declarations }
{--------------------------------------------------------------}
{ Const Declarations }
const
// this constant must be the same as in the Main app
DownLoaderID : word = $1234; // mandatory constant
cStr : string = 'ABCD';
{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA1}
var
bo : boolean;
bb : byte;
{$IDATA}
var
st1 : string[16];
{--------------------------------------------------------------}
{ functions }
procedure FlashLoaderInit; // mandatory
begin
end;
function FlashLoaderRecv : byte; // mandatory
begin
return(SerInpD1);
end;
procedure FlashLoaderTransm(arg : byte); // mandatory
begin
SerOutD1(arg);
end;
// mandatory
procedure FlashLoaderExit;
begin
if Application_Valid then
EEprom[EEpromEnd]:= $00; // validate application for Boot usage
endif;
BeepChirpH(3);
mDelay(1000);
HardwareReset; // restart with a jump into the Boot
end;
// These procedures/functions can be called from the main application
function BootFunction : boolean; Trap;
begin
nop; // do anything
nop;
nop;
return(bo);
end;
procedure BootProc(x : byte); Trap;
begin
bb:= x;
end;
{--------------------------------------------------------------}
{ Main Program }
{$IDATA}
begin
// optional a port pin can be checked for a forced download
// if Pin.x = false then ...
// ...
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;
EnableInts($87);
SysLEDflashAllOn;
BeepChirpL(2);
loop
FlashDownLoader;
// Downloader does an exit to the main app if
// a valid main has been downloaded
endloop;
end XMega_BootAppSer.