Signed-off-by: Stephan Baerwolf <stephan.baerwolf@tu-ilmenau.de>
updater: do_updater
do_firmware:
updater: do_updater
do_firmware:
+ $(ECHO) "."
+ $(ECHO) "."
+ $(ECHO) "======>BUILDING BOOTLOADER FIRMWARE"
+ $(ECHO) "."
$(MAKE) -C firmware all
do_updater:
$(MAKE) -C firmware all
do_updater:
+ $(ECHO) "."
+ $(ECHO) "."
+ $(ECHO) "======>BUILDING BOOTLOADER UPDATER (EXPERIMENTAL)"
+ $(ECHO) "."
$(MAKE) -C updater all
deepclean: clean
$(MAKE) -C updater all
deepclean: clean
# where the updating firmware should be located (starting address)
FLASHADDRESS = 0x0000
# where the updating firmware should be located (starting address)
FLASHADDRESS = 0x0000
+# some MCUs with small BLS (bootloader section) need to deactivate some
+# features in order to fit into BLS.
+# If this option is enabled, also essential features may become deactivated
+# Esp. you MUST ensure not to have watchdog initially enabled when using this!
+DANGEROUS=0
# PROGRAMMER contains AVRDUDE options to address your programmer
# PROGRAMMER = -c pony-stk200
# PROGRAMMER contains AVRDUDE options to address your programmer
# PROGRAMMER = -c pony-stk200
BOOTLOADER_ADDRESS_1284 = 0x1E000
BOOTLOADER_ADDRESS_1284 = 0x1E000
+
+ifeq ($(DANGEROUS), 1)
+ CHOOSEFLASHSAVE = -DCONFIG_NO__NEED_WATCHDOG
+else
+ CHOOSEFLASHSAVE = -DCONFIG_NO__BOOTLOADER_CAN_EXIT
+endif
+
+
+DEFINES = #-DDEBUG_LEVEL=2
ifeq ($(DEVICE), atmega8)
FUSEOPT = $(FUSEOPT_8)
BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_8)
ifeq ($(DEVICE), atmega8)
FUSEOPT = $(FUSEOPT_8)
BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_8)
else ifeq ($(DEVICE), atmega88)
FUSEOPT = $(FUSEOPT_88)
BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_88)
else ifeq ($(DEVICE), atmega88)
FUSEOPT = $(FUSEOPT_88)
BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_88)
+ DEFINES += -DCONFIG_NO__HAVE_READ_LOCK_FUSE
else ifeq ($(DEVICE), atmega88a)
FUSEOPT = $(FUSEOPT_88)
BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_88)
else ifeq ($(DEVICE), atmega88a)
FUSEOPT = $(FUSEOPT_88)
BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_88)
+ DEFINES += -DCONFIG_NO__HAVE_READ_LOCK_FUSE
else ifeq ($(DEVICE), atmega88p)
FUSEOPT = $(FUSEOPT_88)
BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_88)
else ifeq ($(DEVICE), atmega88p)
FUSEOPT = $(FUSEOPT_88)
BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_88)
+ DEFINES += -DCONFIG_NO__HAVE_READ_LOCK_FUSE
else ifeq ($(DEVICE), atmega88pa)
FUSEOPT = $(FUSEOPT_88)
BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_88)
else ifeq ($(DEVICE), atmega88pa)
FUSEOPT = $(FUSEOPT_88)
BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_88)
+ DEFINES += -DCONFIG_NO__HAVE_READ_LOCK_FUSE
else ifeq ($(DEVICE), atmega164a)
FUSEOPT = $(FUSEOPT_164)
BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_164)
else ifeq ($(DEVICE), atmega164a)
FUSEOPT = $(FUSEOPT_164)
BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_164)
+ DEFINES += -DCONFIG_NO__HAVE_READ_LOCK_FUSE -DCONFIG_NO__BOOTLOADER_CAN_EXIT
else ifeq ($(DEVICE), atmega164p)
FUSEOPT = $(FUSEOPT_164)
BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_164)
else ifeq ($(DEVICE), atmega164p)
FUSEOPT = $(FUSEOPT_164)
BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_164)
+ DEFINES += -DCONFIG_NO__HAVE_READ_LOCK_FUSE -DCONFIG_NO__BOOTLOADER_CAN_EXIT
else ifeq ($(DEVICE), atmega164pa)
FUSEOPT = $(FUSEOPT_164)
BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_164)
else ifeq ($(DEVICE), atmega164pa)
FUSEOPT = $(FUSEOPT_164)
BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_164)
+ DEFINES += -DCONFIG_NO__HAVE_READ_LOCK_FUSE -DCONFIG_NO__BOOTLOADER_CAN_EXIT
else ifeq ($(DEVICE), atmega168)
FUSEOPT = $(FUSEOPT_168)
BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_168)
else ifeq ($(DEVICE), atmega168)
FUSEOPT = $(FUSEOPT_168)
BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_168)
+ DEFINES += -DCONFIG_NO__HAVE_READ_LOCK_FUSE $(CHOOSEFLASHSAVE)
else ifeq ($(DEVICE), atmega168a)
FUSEOPT = $(FUSEOPT_168)
BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_168)
else ifeq ($(DEVICE), atmega168a)
FUSEOPT = $(FUSEOPT_168)
BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_168)
+ DEFINES += -DCONFIG_NO__HAVE_READ_LOCK_FUSE $(CHOOSEFLASHSAVE)
else ifeq ($(DEVICE), atmega168p)
FUSEOPT = $(FUSEOPT_168)
BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_168)
else ifeq ($(DEVICE), atmega168p)
FUSEOPT = $(FUSEOPT_168)
BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_168)
+ DEFINES += -DCONFIG_NO__HAVE_READ_LOCK_FUSE $(CHOOSEFLASHSAVE)
else ifeq ($(DEVICE), atmega168pa)
FUSEOPT = $(FUSEOPT_168)
BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_168)
else ifeq ($(DEVICE), atmega168pa)
FUSEOPT = $(FUSEOPT_168)
BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_168)
+ DEFINES += -DCONFIG_NO__HAVE_READ_LOCK_FUSE $(CHOOSEFLASHSAVE)
else ifeq ($(DEVICE), atmega324a)
FUSEOPT = $(FUSEOPT_324)
BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_324)
else ifeq ($(DEVICE), atmega324a)
FUSEOPT = $(FUSEOPT_324)
BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_324)
-# Options:
-DEFINES = #-DDEBUG_LEVEL=2
# Remove the -fno-* options when you use gcc 3, it does not understand them
CFLAGS = -Wall -Os -fno-move-loop-invariants -fno-tree-scev-cprop -fno-inline-small-functions -I. -mmcu=$(DEVICE) -DBOOTLOADER_ADDRESS=$(BOOTLOADER_ADDRESS) -DF_CPU=$(F_CPU) $(DEFINES)
LDFLAGS = -Wl,--relax,--gc-sections -Wl,--section-start=.text=$(BOOTLOADER_ADDRESS)
# Remove the -fno-* options when you use gcc 3, it does not understand them
CFLAGS = -Wall -Os -fno-move-loop-invariants -fno-tree-scev-cprop -fno-inline-small-functions -I. -mmcu=$(DEVICE) -DBOOTLOADER_ADDRESS=$(BOOTLOADER_ADDRESS) -DF_CPU=$(F_CPU) $(DEFINES)
LDFLAGS = -Wl,--relax,--gc-sections -Wl,--section-start=.text=$(BOOTLOADER_ADDRESS)
* Creation Date: 2012-08-01
* Copyright: (c) 2012 by Stephan Baerwolf
* License: GNU GPL v2 (see License.txt)
* Creation Date: 2012-08-01
* Copyright: (c) 2012 by Stephan Baerwolf
* License: GNU GPL v2 (see License.txt)
*/
#ifndef SPMINTERFACE_H_f70ba6adf7624275947e859bdbff0599
*/
#ifndef SPMINTERFACE_H_f70ba6adf7624275947e859bdbff0599
#endif
//assume SPMCR==0x37, SPMEN==0x0, RWWSRE=0x4, RWWSB=0x6
#endif
//assume SPMCR==0x37, SPMEN==0x0, RWWSRE=0x4, RWWSB=0x6
-const uint16_t bootloader__do_spm[20] BOOTLIBLINK = {0x0000, 0x2dec, 0x2dfd, 0xb6b7, 0xfcb0, 0xcffd, 0xbf27, 0x95e8, 0xb6b7,
- 0xfcb0, 0xcffd, 0xe121, 0xb6b7, 0xfcb6, 0xcff4, 0x9508, 0xFFFF, 0xFFFF,
- 0xFFFF, 0xFFFF};
+const uint16_t bootloader__do_spm[16] BOOTLIBLINK = {0x0000, 0x2dec, 0x2dfd, 0xb6b7, 0xfcb0, 0xcffd, 0xbf27, 0x95e8, 0xb6b7,
+ 0xfcb0, 0xcffd, 0xe121, 0xb6b7, 0xfcb6, 0xcff4, 0x9508};
/*
00001826 <bootloader__do_spm>:
1826: 00 00 nop
/*
00001826 <bootloader__do_spm>:
1826: 00 00 nop
#elif defined (__AVR_ATmega48__) || defined (__AVR_ATmega48P__) || defined (__AVR_ATmega88__) || defined (__AVR_ATmega88P__) || defined (__AVR_ATmega168__) || defined (__AVR_ATmega168P__)
//assume SPMCR:=SPMCSR==0x37, SPMEN:=SELFPRGEN==0x0, RWWSRE=0x4, RWWSB=0x6
#elif defined (__AVR_ATmega48__) || defined (__AVR_ATmega48P__) || defined (__AVR_ATmega88__) || defined (__AVR_ATmega88P__) || defined (__AVR_ATmega168__) || defined (__AVR_ATmega168P__)
//assume SPMCR:=SPMCSR==0x37, SPMEN:=SELFPRGEN==0x0, RWWSRE=0x4, RWWSB=0x6
-const uint16_t bootloader__do_spm[20] BOOTLIBLINK = {0x0000, 0x2dec, 0x2dfd, 0xb6b7, 0xfcb0, 0xcffd, 0xbf27, 0x95e8, 0xb6b7,
- 0xfcb0, 0xcffd, 0xe121, 0xb6b7, 0xfcb6, 0xcff4, 0x9508, 0xFFFF, 0xFFFF,
- 0xFFFF, 0xFFFF};
+const uint16_t bootloader__do_spm[15] BOOTLIBLINK = { 0x2dec, 0x2dfd, 0xb6b7, 0xfcb0, 0xcffd, 0xbf27, 0x95e8, 0xb6b7,
+ 0xfcb0, 0xcffd, 0xe121, 0xb6b7, 0xfcb6, 0xcff4, 0x9508};
#if defined (__AVR_ATmega88__) || defined (__AVR_ATmega88P__)
#if (BOOTLOADER_ADDRESS != 0x1800)
#if defined (__AVR_ATmega88__) || defined (__AVR_ATmega88P__)
#if (BOOTLOADER_ADDRESS != 0x1800)
#endif
//assume SPMCR:=SPMCSR==0x37, SPMEN:=SELFPRGEN==0x0, RWWSRE=0x4, RWWSB=0x6
#endif
//assume SPMCR:=SPMCSR==0x37, SPMEN:=SELFPRGEN==0x0, RWWSRE=0x4, RWWSB=0x6
-const uint16_t bootloader__do_spm[20] BOOTLIBLINK = {0x0000, 0x2dec, 0x2dfd, 0xb6b7, 0xfcb0, 0xcffd, 0xbf27, 0x95e8, 0xb6b7,
- 0xfcb0, 0xcffd, 0xe121, 0xb6b7, 0xfcb6, 0xcff4, 0x9508, 0xFFFF, 0xFFFF,
- 0xFFFF, 0xFFFF};
+const uint16_t bootloader__do_spm[15] BOOTLIBLINK = { 0x2dec, 0x2dfd, 0xb6b7, 0xfcb0, 0xcffd, 0xbf27, 0x95e8, 0xb6b7,
+ 0xfcb0, 0xcffd, 0xe121, 0xb6b7, 0xfcb6, 0xcff4, 0x9508};
/*
00001826 <bootloader__do_spm>:
1826: 00 00 nop
/*
00001826 <bootloader__do_spm>:
1826: 00 00 nop
#elif defined (__AVR_ATmega164A__) || defined (__AVR_ATmega164P__) || defined (__AVR_ATmega164PA__) || defined (__AVR_ATmega324A__) || defined (__AVR_ATmega324P__) || defined (__AVR_ATmega324PA__) || defined (__AVR_ATmega644__) || defined (__AVR_ATmega644A__) || defined (__AVR_ATmega644P__) || defined (__AVR_ATmega644PA__) || defined (__AVR_ATmega1284__) || defined (__AVR_ATmega1284P__)
//assume SPMCR:=SPCSR==0x37, SPMEN==0x0, RWWSRE=0x4, RWWSB=0x6 and rampZ=0x3b
#elif defined (__AVR_ATmega164A__) || defined (__AVR_ATmega164P__) || defined (__AVR_ATmega164PA__) || defined (__AVR_ATmega324A__) || defined (__AVR_ATmega324P__) || defined (__AVR_ATmega324PA__) || defined (__AVR_ATmega644__) || defined (__AVR_ATmega644A__) || defined (__AVR_ATmega644P__) || defined (__AVR_ATmega644PA__) || defined (__AVR_ATmega1284__) || defined (__AVR_ATmega1284P__)
//assume SPMCR:=SPCSR==0x37, SPMEN==0x0, RWWSRE=0x4, RWWSB=0x6 and rampZ=0x3b
-const uint16_t bootloader__do_spm[20] BOOTLIBLINK = {0xbebb, 0x2dec, 0x2dfd, 0xb6b7, 0xfcb0, 0xcffd, 0xbf27, 0x95e8, 0xb6b7,
- 0xfcb0, 0xcffd, 0xe121, 0xb6b7, 0xfcb6, 0xcff4, 0x9508, 0xFFFF, 0xFFFF
- 0xFFFF, 0xFFFF};
+const uint16_t bootloader__do_spm[16] BOOTLIBLINK = {0xbebb, 0x2dec, 0x2dfd, 0xb6b7, 0xfcb0, 0xcffd, 0xbf27, 0x95e8, 0xb6b7,
+ 0xfcb0, 0xcffd, 0xe121, 0xb6b7, 0xfcb6, 0xcff4, 0x9508};
#if defined (__AVR_ATmega164A__) || defined (__AVR_ATmega164P__) || defined (__AVR_ATmega164PA__)
#if (BOOTLOADER_ADDRESS != 0x3800)
#if defined (__AVR_ATmega164A__) || defined (__AVR_ATmega164P__) || defined (__AVR_ATmega164PA__)
#if (BOOTLOADER_ADDRESS != 0x3800)