你好,
请让我询问有关高级引导加载程序的问题和DA14583上的SRAM相关内容的使用情况。
我们想为DA14583创建高级引导加载程序。我已经阅读了“UM-B-012”,但我想确认这些相关的东西。
我们的场景:
- 我们在闪存上写两个应用图像(bin)。两个图像的大小几乎是32kb(rom)/ 8kb(RAM)。当执行每个图像时,将消耗40KB RAM。
- 我们在Flash上分配1个字节标志,以选择应加载哪个图像。
- 高级引导加载程序将选中此标志并决定启动哪一个。
问题:
1.我假设高级引导加载程序加载到Sysram,它将被执行(从0x2000000)。高级引导加载程序的大小约为6KB。这些是对吗?
2.当高级引导加载程序向RAM加载Appiation Image时,是否有任何房间加载?(RAM上的应用程序尺寸为40kB,但先进的Boolt Loader也耗尽了6KB RAM ......)它是否运作良好?我们的情景是否可以实现???
3.当高级引导加载程序向SRAM加载Apporization映像时,我们可以分配要在SRAM上加载的地址吗?或者,它是固定的吗?
4.当高级引导加载程序重置自身时,我们可以设置程序计数器的条目地址吗?还是固定?
抱歉很多问题,但我们彻底淘汰了确认我们的方案是否有可能。
非常感谢您的支持。
此致,
光盘
设备:
您应该在SDK中查看引导加载程序项目。它位于Utilities \ Secondary_bootloader。它几乎完全确实是你想要的。两个图像位于Flash上,选择要运行的图像被复制到Sysram中,然后启动。
高级引导加载程序的大小约为6 kB,具体取决于您的配置方式。它加载到Sysram并从地址0x0执行。注意,当地址0x0被重新映射到sysram时,地址0x0映射到与0x20000000相同的存储单元。
创建图像时,您有两种大小,图像的实际大小和应用程序的RAM使用情况。当应用程序开始时,初始化应用程序所需的RAM量,因此不占用图像中的任何空间。初始PC由链接器选择并放置在图像中的偏移0x4处,不应改变。
如果在高级引导加载程序(startup \ bootloader.sct)的散点图中,您将看到启动代码之外的所有内容都放在执行区域0x80000中。这意味着ARM链接器会生成代码,当高级引导加载程序启动时,所有引导加载程序代码都将复制到0x80000,然后从那里运行。这意味着Sysram现在可以使用最终应用程序填写引导加载程序。
当您开始最终应用程序时(32 kB),应用程序生成的码将启动您已声明的RAM部分(8 KB)与零。这意味着如果您在地址0x80000处具有变量,则初始化代码将覆盖启动加载程序,该引导加载程序可以不再需要。
我不确定你的意思或想要在内存中的特定位置加载应用程序。臂处理器假设当调用复位处理程序时,它最初被放置在地址0x0处。所有中断处理程序也必须放在Sysram的开始工作。当然,您可以使用分散文件将功能和变量放在特定地址,如果您愿意。
请注意,通常旨在从0雷竞技安卓下载x20000000而不是0x0运行的应用程序。这也将工作,即使0x0被重新映射到ROM以来(几乎)所有ROM中断处理程序都是0x20000000的中断处理程序中的蹦床。
希望这能回答你的问题。
嗨Joacimwe,
非常感谢您的详细评论。现在,我一点地明白了。
您提到“先进的引导加载程序,除启动代码之外将被放置0x80000区域并执行”,这是我想知道的。实际上,我尚未理解分散文件和armlinker行为,直到你指向它们。
让我确认我对系统启动和图像加载的理解是否正确,请:
- (主要)Bootloader
引导加载程序在ROM中硬编码。电源打开时,执行引导加载程序,并检查高级引导加载程序是否存在。如果存在,Bootloader加载在工厂中刻录的辅助引导加载程序,如果它不存在,高级引导程序并将其复制到0x20000000,则执行它。(然后,高级引导加载程序只能位于OTP中。)
- 辅助引导程序(Adcanced Bootloader)
分散文件定义为:
*两个初始化文件(startup_cmsdk_cm0.o和system_cmsdk.o)被解决到0x0000000。
* ROM的其余部分,RAM,堆栈部件被解决至0x80000。
因此,armlinker分配对象并生成将它们复制到适当位置的代码。armlinker生成的代码在初始化文件之前执行。(也许..)
当辅助引导加载程序将目标图像从外部存储器复制到0x20000000时,辅助引导程序本身在0x80000区域上执行。所以,它准备在那时复制它。
以上是我所知的知识......它是正确的吗?
非常感谢您的合作。
此致,
光盘
你对第二部分完全正确。
首先,我同意术语有点令人困惑。DA14580和DA14583具有完全相同的ROM代码,因此具有相同的主引导加载程序。
“二次引导加载程序”项目由DA14580上的客户编程为OTP。
在DA14583上,此项目代替“高级引导加载程序”,因为OTP上已经有预编程(完全不同)的辅助引导程序。
在DA14583上,ROM代码始终启动次级引导程序,因为它是硬编码的。现在,如果客户编程了“高级引导程序”,则辅助引导加载程序将检测到(根据UM-B-012)并启动它。所以最后,如果您编程高级引导加载程序和应用程序代码,则在总共三个引导加载程序中将在您的应用程序代码运行之前运行;)
嗨Joacimwe,
现在所有事情都对我来说很清楚。
非常感谢您对我的问题进行备忘!
此致,
光盘