【发布时间】:2017-09-21 14:37:08
【问题描述】:
我正在尝试了解 Arduino 引导加载程序。我在这里找到了一些介绍:Arduino Bootloader,但我需要更多详细信息,因此我正在寻求帮助。
在我的研究过程中,我找到了一个起点:好的,Arduino(atmega 系列)有一个专门用于引导加载程序的特定闪存块。一旦单片机有了引导加载程序,它就可以通过串口下载新程序并将其存储在闪存中,地址为 0x00。
让我们为这个问题分配 atmega328p。
#1 - 如果您查看数据表第 343 页,您会看到一个表格,其中显示了有关引导加载程序大小的一些信息:
通过这张表我明白:如果我将 BOOTSZ1/0 设置为 0/0,我可以有一个 2K 的引导加载程序,它将存储在闪存堆栈中:0x3800 ~ 0x3FFF。
#2 - 如果你打开 Arduino 生成的 ATMEGA328_BOOTLOADER 的 hex 文件,你会看到 bootloader 存储在:
:10**7800**000C94343C0C94513C0C94513C0C94513CE1
到
:10**7FF0**00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91
如果您考虑 7FF0 - 7800,您将得到 7F0(2K 字节的程序)
#3 - 如果你打开 makefile (C:\Program Files (x86)\Arduino\hardware\arduino\avr\bootloaders\atmega) 你会看到 atmega328 的这个参数:
atmega328: LDSECTION = --section-start=.text=0x7800
0x7800 与引导加载程序中的 hexa 文件匹配。
问题:
1- 为什么数据表告诉我我有一个特殊的引导加载程序位置,而 Arduino 的 makefile 强制它存储在不同的位置?
2- hexa文件的行是什么意思?
:10E000000D9489F10D94B2F10D94B2F10D94B2F129
:10 : (?)
E000 : Address
00 : (?)
0D9489F10D94B2F10D94B2F10D94B2F1 : data (?)
29 : CRC (?)
【问题讨论】:
标签: makefile arduino bootloader atmega