4

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?

Rego
  • 1,118
  • 1
  • 18
  • 40

1 Answers1

4

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).

Rego
  • 1,118
  • 1
  • 18
  • 40
avra
  • 3,690
  • 19
  • 19
  • Where should I look for BOOTSZ0 and BOOTSZ1? I didn't find anything close to them in makefile. (but I read in datasheet as you suggested, and agreed, but could not find it yet). – Rego Nov 04 '11 at 00:26
  • I also had found some references to at90usb1287 in `BootloaderCDC.avrgccproj`, but it was already corrected. – Rego Nov 04 '11 at 00:30
  • I published the BOOT_START makefile configuration in Update. I confess did not understand it fully. Maybe is it wrong? – Rego Nov 04 '11 at 00:46
  • I use [Atmel Flip](http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3886) for burning the .hex files. I guess it shall serve as well. My version is [FLIP 3.4.5 for Windows (Java Runtime Environement included)](http://www.atmel.com/dyn/resources/prod_documents/JRE%20-%20Flip%20Installer%20-%203.4.5.106.exe) – Rego Nov 04 '11 at 00:49
  • So you are trying to burn a new boot loader via existing boot loader? That is hardly going to happen. You need a real JTAG/ISP/SPI/PDI programmer and it will allow you to change fuses. – avra Nov 09 '11 at 10:35
  • Don't get it. I even don't understand why the CDC in the example code is named as a bootloader. Actually I'm trying to burn the code just as CDC, whatever the bootloader is. And so I could use the chip to exchange data from outside world to my pc apps. – Rego Nov 17 '11 at 01:05
  • 1
    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). Google around for it and you will understand. You do not accept the answer in SO so I will not help any more. When you receive something you give something. Cheers. – avra Nov 29 '11 at 09:59
  • Now I got it :-). Fare enough, you helped me so much to understand it. Thank you. – Rego Nov 30 '11 at 21:53