4

我为支持 USB 的AVR 微控制器LUFA (2011-10-09)提供了一个开源 USB 库,并且我正在尝试将CDC(引导加载程序)示例编码到我的AT90USB162芯片中。示例代码位于文件夹中/Bootloads/CDC,为构建AT90USB1287的 CDC 做好了准备。所以我需要更改 makefile 参数以设置正确的微芯片。

在生成文件中,我更改了以下内容:

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

并构建了代码。这发生时没有错误,但是当我尝试使用 .hex 文件刻录芯片时,它返回消息:

地址超出范围

为什么会发生这种情况?

更新

makefile中,BOOT_START配置为:

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

也许错误会出现在 BOOT_START 记帐中?我应该配置更多东西吗?

4

1 回答 1

4

根据 at90usb162 数据表的第 239 页,对于 4Kb 引导加载程序,保险丝 BOOTSZ0 和 BOOTSZ1 需要为 0。你检查过这个吗?您还需要检查 at90usb1287 和 at90usb162 之间是否匹配其他内容(如 BOOT_START 等)。您如何尝试将新的引导加载程序刻录到 AVR 中?您是否有合适的程序员,或者您正在尝试使用嵌入式 USB 引导加载程序来完成它?

只是补充来自@avra评论的@avra答案

使用引导加载程序无法在现有引导加载程序上存储另一个引导加载程序。现在得到吗?;-) 那是引导加载程序的受限区域,这就是它对您失败的原因。引导加载程序无法自行覆盖它。您需要没有此限制的其他类型的程序员。所有带有引导加载程序的 AVR 都需要使用这种特殊类型的编程器(JTAG/ISP/SPI/PDI 编程器)进行初始编程。

于 2011-11-03T10:05:46.763 回答