Question

I'm with an open-source USB library for the USB-enabled AVR microcontrollers, LUFA (2011-10-09), and I am trying to code the CDC (a bootloader) example to my AT90USB162 chip. The sample code is in folder /Bootloads/CDC and comes prepared for building a CDC for AT90USB1287. So I needed to change the makefile parameters to set the proper microchip.

In the makefile I changed the following:

  • MCU = at90usb162
  • F_CPU = 16000000
  • FLASH_SIZE_KB = 16
  • BOOT_SECTION_SIZE_KB = 4

and built the code. This occurred without errors but when I tried to burn the chip with the .hex file, it returns the message:

Address is out of range

Why could this happen?

Update

In makefile, the BOOT_START is configured as:

BOOT_START = 0x$(shell echo "obase=16; ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024" | bc)

Maybe the error would be in the BOOT_START accounting? Should I configure something more?

Was it helpful?

Solution

According to page 239 of at90usb162 datasheet, fuses BOOTSZ0 and BOOTSZ1 need to be 0 for a 4Kb boot loader. Have you checked this? You also need to check if other things are matched between at90usb1287 and at90usb162 (like BOOT_START and others). How do you try to burn new boot loader into an AVR? Do you have a proper programmer or you are trying to do it with embedded USB boot loader?

Just complementing @avra answer from @avra comment

Storing another boot loader over existing boot loader is not possible with a boot loader. Get it now? ;-) That is restricted area for a boot loader, and that's why it fails for you. Boot loader is not capable to overwrite it self. You need other type of programmer which doesn't come with this restriction. All AVRs with boot loaders need to have initial programming with this special type of programmer (JTAG/ISP/SPI/PDI programmer).

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top