2 # Project: USBaspLoader (updater)
3 # Author: Stephan Bärwolf
4 # Creation Date: 2012-09-01
6 # License: GNU GPL v2 (see License.txt)
11 # where the updating firmware should be located (starting address)
14 # some MCU independend defines...
15 #...will be extended within MCU dependend configuration below...
16 DEFINES += -DCONFIG_NO__CHIP_ERASE -DCONFIG_NO__ONDEMAND_PAGEERASE
18 # have the bootloader always enter the programming mode
19 ;DEFINES += -DCONFIG_HAVE__BOOTLOADER_ALWAYSENTERPROGRAMMODE
21 # have the bootloader exit itself after around 3 seconds (@16MHz) inactivity
22 ;DEFINES += -DCONFIG_BOOTLOADER_LOOPCYCLES_TIMEOUT=16 -DCONFIG_HAVE__BOOTLOADER_ABORTTIMEOUTONACT
24 # save the PROG button on the layout (CAREFUL - read feature description first)
25 ;DEFINES += -DCONFIG_HAVE__BOOTLOADER_IGNOREPROGBUTTON
29 # some MCUs with small BLS (bootloader section) need to deactivate some
30 # features in order to fit into BLS.
31 # If this option is enabled, also essential features may become deactivated
32 # Esp. you MUST ensure not to have watchdog initially enabled when using this!
35 # PROGRAMMER contains AVRDUDE options to address your programmer
36 # PROGRAMMER = -c pony-stk200
37 PROGRAMMER = -c usbasp
39 # since USBaspLoader supports HAVE_BLB11_SOFTW_LOCKBIT...
40 LOCKOPT = -U lock:w:0x3f:m
46 #untested devices (WARNING: may destroy ISP ability!)
47 #device always should select maximum bootloader-section size
48 #please mail tests-reports to matrixstorm@gmx.de
50 #some features may be deactivated to fit into bootloader section
51 #ATTANTION: CONFIG_NO... feature deactivation may not be optimal!
53 FUSEOPT_8535 = -U lfuse:w:0x1f:m -U hfuse:w:0xc0:m
54 BOOTLOADER_ADDRESS_8535 = 0x1800
55 DEFINES_8535 = -DCONFIG_USE__EXCESSIVE_ASSEMBLER -DCONFIG_NO__NEED_WATCHDOG -DCONFIG_NO__PRECISESLEEP
59 FUSEOPT_16 = -U lfuse:w:0x1f:m -U hfuse:w:0xc0:m
60 BOOTLOADER_ADDRESS_16 = 0x3800
61 DEFINES_16 = -DCONFIG_USE__EXCESSIVE_ASSEMBLER -DCONFIG_NO__NEED_WATCHDOG -DCONFIG_NO__PRECISESLEEP
65 FUSEOPT_88 = -U lfuse:w:0xd7:m -U hfuse:w:0xd4:m -U efuse:w:0xf8:m
66 BOOTLOADER_ADDRESS_88 = 0x1800
67 DEFINES_88 = -DCONFIG_NO__FLASH_BYTE_READACCESS -DCONFIG_NO__HAVE_READ_LOCK_FUSE
71 FUSEOPT_164 = -U lfuse:w:0xd7:m -U hfuse:w:0xd0:m -U efuse:w:0xfc:m
72 BOOTLOADER_ADDRESS_164 = 0x3800
73 DEFINES_164 = -DCONFIG_NO__FLASH_BYTE_READACCESS -DCONFIG_NO__HAVE_READ_LOCK_FUSE -DCONFIG_NO__BOOTLOADER_CAN_EXIT
77 FUSEOPT_324 = $(FUSEOPT_164)
78 BOOTLOADER_ADDRESS_324 = 0x7000
79 DEFINES_324 = #-DEMPTY
83 FUSEOPT_128 = -U lfuse:w:0x1f:m -U hfuse:w:0xc0:m -U efuse:w:0xfd:m
84 BOOTLOADER_ADDRESS_128 = 0x1E000
85 DEFINES_128 = #-DEMPTY
89 FUSEOPT_640 = -U lfuse:w:0xd7:m -U hfuse:w:0xd0:m -U efuse:w:0xfc:m
90 BOOTLOADER_ADDRESS_640 = 0xE000
91 DEFINES_640 = #-DEMPTY
95 FUSEOPT_1280 = $(FUSEOPT_640)
96 BOOTLOADER_ADDRESS_1280 = 0x1E000
97 DEFINES_1280 = #-DEMPTY
101 FUSEOPT_1281 = $(FUSEOPT_1280)
102 BOOTLOADER_ADDRESS_1281 = 0x1E000
103 DEFINES_1281 = #-DEMPTY
107 FUSEOPT_2561 = $(FUSEOPT_1281)
108 BOOTLOADER_ADDRESS_2561 = 0x3E000
109 DEFINES_2561 = #-DEMPTY
116 # standard atmega8 needs BODLEVEL to be programed, since it is a 5V device
117 # you may also want to UNprogram SUT1 to get a SLOWER bootup (lfuse then would be 0x3f)
118 FUSEOPT_8 = -U lfuse:w:0x1f:m -U hfuse:w:0xc0:m
119 BOOTLOADER_ADDRESS_8 = 0x1800
120 DEFINES_8 = -DCONFIG_USE__EXCESSIVE_ASSEMBLER -DCONFIG_NO__NEED_WATCHDOG -DCONFIG_NO__PRECISESLEEP
124 FUSEOPT_32 = $(FUSEOPT_16)
125 BOOTLOADER_ADDRESS_32 = 0x7000
126 DEFINES_32 = #-DEMPTY
130 FUSEOPT_168 = $(FUSEOPT_88)
131 BOOTLOADER_ADDRESS_168 = 0x3800
132 ifeq ($(DANGEROUS), 1)
133 DEFINES_168 = -DCONFIG_NO__FLASH_BYTE_READACCESS -DCONFIG_NO__HAVE_READ_LOCK_FUSE -DCONFIG_NO__NEED_WATCHDOG
135 DEFINES_168 = -DCONFIG_NO__FLASH_BYTE_READACCESS -DCONFIG_NO__HAVE_READ_LOCK_FUSE -DCONFIG_NO__BOOTLOADER_CAN_EXIT
140 FUSEOPT_328 = -U lfuse:w:0xd7:m -U hfuse:w:0xd0:m -U efuse:w:0x04:m
141 BOOTLOADER_ADDRESS_328 = 0x7000
142 DEFINES_328 = #-DEMPTY
146 FUSEOPT_644 = $(FUSEOPT_324)
147 BOOTLOADER_ADDRESS_644 = 0xE000
148 DEFINES_644 = #-DEMPTY
152 FUSEOPT_1284 = -U lfuse:w:0xd7:m -U hfuse:w:0xd0:m -U efuse:w:0xfc:m
153 BOOTLOADER_ADDRESS_1284 = 0x1E000
154 DEFINES_1284 = #-DEMPTY
158 FUSEOPT_2560 = $(FUSEOPT_1280)
159 BOOTLOADER_ADDRESS_2560 = 0x3E000
160 DEFINES_2560 = #-DEMPTY
167 #http://www.nongnu.org/avr-libc/user-manual/using_tools.html
169 ifeq ($(DEVICE), atmega8535)
170 FUSEOPT = $(FUSEOPT_8535)
171 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_8535)
173 DEFINES += $(DEFINES_8535)
174 else ifeq ($(DEVICE), atmega8)
175 FUSEOPT = $(FUSEOPT_8)
176 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_8)
178 DEFINES += $(DEFINES_8)
179 else ifeq ($(DEVICE), atmega16)
180 FUSEOPT = $(FUSEOPT_16)
181 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_16)
183 DEFINES += $(DEFINES_16)
184 else ifeq ($(DEVICE), atmega32)
185 FUSEOPT = $(FUSEOPT_32)
186 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_32)
188 DEFINES += $(DEFINES_32)
189 else ifeq ($(DEVICE), atmega88)
190 FUSEOPT = $(FUSEOPT_88)
191 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_88)
193 DEFINES += $(DEFINES_88)
194 else ifeq ($(DEVICE), atmega88a)
195 FUSEOPT = $(FUSEOPT_88)
196 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_88)
198 DEFINES += $(DEFINES_88)
199 else ifeq ($(DEVICE), atmega88p)
200 FUSEOPT = $(FUSEOPT_88)
201 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_88)
203 DEFINES += $(DEFINES_88)
204 else ifeq ($(DEVICE), atmega88pa)
205 FUSEOPT = $(FUSEOPT_88)
206 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_88)
208 DEFINES += $(DEFINES_88)
209 else ifeq ($(DEVICE), atmega164a)
210 FUSEOPT = $(FUSEOPT_164)
211 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_164)
213 DEFINES += $(DEFINES_164)
214 else ifeq ($(DEVICE), atmega164p)
215 FUSEOPT = $(FUSEOPT_164)
216 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_164)
218 DEFINES += $(DEFINES_164)
219 else ifeq ($(DEVICE), atmega164pa)
220 FUSEOPT = $(FUSEOPT_164)
221 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_164)
223 DEFINES += $(DEFINES_164)
224 else ifeq ($(DEVICE), atmega168)
225 FUSEOPT = $(FUSEOPT_168)
226 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_168)
228 DEFINES += $(DEFINES_168)
229 else ifeq ($(DEVICE), atmega168a)
230 FUSEOPT = $(FUSEOPT_168)
231 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_168)
233 DEFINES += $(DEFINES_168)
234 else ifeq ($(DEVICE), atmega168p)
235 FUSEOPT = $(FUSEOPT_168)
236 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_168)
238 DEFINES += $(DEFINES_168)
239 else ifeq ($(DEVICE), atmega168pa)
240 FUSEOPT = $(FUSEOPT_168)
241 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_168)
243 DEFINES += $(DEFINES_168)
244 else ifeq ($(DEVICE), atmega324a)
245 FUSEOPT = $(FUSEOPT_324)
246 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_324)
248 DEFINES += $(DEFINES_324)
249 else ifeq ($(DEVICE), atmega324p)
250 FUSEOPT = $(FUSEOPT_324)
251 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_324)
253 DEFINES += $(DEFINES_324)
254 else ifeq ($(DEVICE), atmega324pa)
255 FUSEOPT = $(FUSEOPT_324)
256 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_324)
258 DEFINES += $(DEFINES_324)
259 else ifeq ($(DEVICE), atmega328)
260 FUSEOPT = $(FUSEOPT_328)
261 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_328)
263 DEFINES += $(DEFINES_328)
264 else ifeq ($(DEVICE), atmega328p)
265 FUSEOPT = $(FUSEOPT_328)
266 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_328)
268 DEFINES += $(DEFINES_328)
269 else ifeq ($(DEVICE), atmega640)
270 FUSEOPT = $(FUSEOPT_640)
271 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_640)
273 DEFINES += $(DEFINES_640)
274 else ifeq ($(DEVICE), atmega644)
275 FUSEOPT = $(FUSEOPT_644)
276 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_644)
278 DEFINES += $(DEFINES_644)
279 else ifeq ($(DEVICE), atmega644a)
280 FUSEOPT = $(FUSEOPT_644)
281 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_644)
283 DEFINES += $(DEFINES_644)
284 else ifeq ($(DEVICE), atmega644p)
285 FUSEOPT = $(FUSEOPT_644)
286 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_644)
288 DEFINES += $(DEFINES_644)
289 else ifeq ($(DEVICE), atmega644pa)
290 FUSEOPT = $(FUSEOPT_644)
291 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_644)
293 DEFINES += $(DEFINES_644)
294 else ifeq ($(DEVICE), atmega128)
295 FUSEOPT = $(FUSEOPT_128)
296 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_128)
298 DEFINES += $(DEFINES_128)
299 else ifeq ($(DEVICE), atmega1280)
300 FUSEOPT = $(FUSEOPT_1280)
301 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_1280)
303 DEFINES += $(DEFINES_1280)
304 else ifeq ($(DEVICE), atmega1281)
305 FUSEOPT = $(FUSEOPT_1281)
306 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_1281)
308 DEFINES += $(DEFINES_1281)
309 else ifeq ($(DEVICE), atmega1284)
310 FUSEOPT = $(FUSEOPT_1284)
311 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_1284)
313 DEFINES += $(DEFINES_1284)
314 else ifeq ($(DEVICE), atmega1284p)
315 FUSEOPT = $(FUSEOPT_1284)
316 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_1284)
318 DEFINES += $(DEFINES_1284)
319 else ifeq ($(DEVICE), atmega2560)
320 FUSEOPT = $(FUSEOPT_2560)
321 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_2560)
323 DEFINES += $(DEFINES_2560)
324 else ifeq ($(DEVICE), atmega2561)
325 FUSEOPT = $(FUSEOPT_2561)
326 BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_2561)
328 DEFINES += $(DEFINES_2561)
333 NEW_BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS)
336 AVRPATH = $(AVR8TOOLCHAINBINDIR)
337 AVRDUDE = $(AVRDUDEBINDIR)avrdude $(PROGRAMMER) -p $(DEVICE)
344 CC=@$(AVRPATH)avr-gcc
345 OBC=@$(AVRPATH)avr-objcopy
346 OBD=@$(AVRPATH)avr-objdump
347 SIZ=@$(AVRPATH)avr-size