高级引导加载程序与SRAM的使用

5个帖子/ 0新
最后一篇文章
光盘
离线
最后一次露面:3年10个月前
已加入:2015-11-18 02:51
高级引导加载程序与SRAM的使用

你好,

请允许我询问有关DA14583上高级引导加载程序和SRAM相关内容的使用的问题。

我们想为DA14583创建高级引导加载程序。我已经阅读了“UM-B-012”,但我想确认这些相关的东西。

我们的设想:
-我们在Flash上写两个应用程序映像(bin)。两个图像的大小几乎都是32kB(ROM)/8kB(RAM)。执行每个映像时,将消耗40kB的RAM。
- 我们在Flash上​​分配1个字节标志,以选择应加载哪个图像。
- 高级引导加载程序将选中此标志并决定启动哪一个。

问题:
1我假设高级引导加载程序被加载到SysRAM并执行(从0x2000000开始)。高级引导加载程序的大小约为6KB。这些是对的吗?
2当Advanced Boot Loader将一个apprilication映像加载到RAM时,是否有要加载的空间(应用程序映像在RAM上的大小是40kB,但是高级Boolt Loader也消耗了6kB的RAM……)它工作得好吗?我们的设想可以实现吗???
三。当高级引导加载程序将通知映像加载到SRAM时,我们可以分配要加载到SRAM上的地址吗?或者,它是固定的吗?
4当高级引导加载程序自动复位时,我们可以设置程序计数器的入口地址吗?还是修好了?

抱歉,有很多问题,但我们想确认一下我们的方案是否可行。

非常感谢您的支持。

此致,
光盘

设备:
乔奇姆韦
离线
最后一次露面:1年5个月前
格鲁鲁
已加入:2014-01-14 06:45
你应该检查一下后备箱

您应该检查SDK中的引导加载程序项目。它位于utilities\secondary\u bootloader中。它几乎完全符合你的要求。两个映像位于flash上,选择运行的映像被复制到SysRAM中,然后启动。

高级引导加载程序的大小约为6KB,具体取决于您如何配置它。它被加载到SysRAM并从地址0x0执行。注意,当地址0x0被重新映射到SysRAM时,地址0x0被映射到与0x20000000相同的内存单元。

创建映像时,有两种大小:映像的实际大小和应用程序的RAM使用情况。应用程序所需的RAM量在应用程序启动时初始化,因此不会占用映像中的任何空间。初始PC由链接器选择,并放置在图像中的偏移量0x4处,不应更改。

如果在高级引导加载程序(startup \ bootloader.sct)的散点图中,您将看到启动代码之外的所有内容都放在执行区域0x80000中。这意味着ARM链接器会生成代码,当高级引导加载程序启动时,所有引导加载程序代码都将复制到0x80000,然后从那里运行。这意味着Sysram现在可以使用最终应用程序填写引导加载程序。

当最后一个应用程序启动(32kb)时,应用程序的链接器生成的代码将用零初始化您声明的RAM部分(8kb)。这意味着,如果在地址0x80000处有变量,初始化代码将覆盖引导加载程序,这是正常的,因为它不再需要了。

我不确定你的意思或想要在内存中的特定位置加载应用程序。臂处理器假设当调用复位处理程序时,它最初被放置在地址0x0处。所有中断处理程序也必须放在Sysram的开始工作。当然,您可以使用分散文件将功能和变量放在特定地址,如果您愿意。
请注意,应用程序通常亚博国际官网平台网址设计为从0x20000000而不是0x0运行。即使0x0被重新映射到ROM,这也会起作用,因为(几乎)所有ROM中断处理程序都是0x20000000的中断处理程序的蹦床。

希望这能回答你的问题。

光盘
离线
最后一次露面:3年10个月前
已加入:2015-11-18 02:51
你好,乔奇姆,

你好,乔奇姆,

非常感谢您的详细评论。现在,我渐渐明白了。
您提到“高级引导加载程序除了启动代码将被放置0x80000区域和执行”,这是我想知道的。实际上,在您指出之前,我并不了解散布文件和ARMLinker行为。
让我确认我对系统启动和图像加载的理解是否正确,请:

-(主)引导加载程序
Bootloader在ROM中是硬编码的,上电后执行Bootloader,检查高级Bootloader是否存在。如果存在,Bootloader加载工厂中烧录的辅助Bootloader;如果不存在,则加载高级Bootloader并将其复制到0x20000000,然后执行它(然后,只能在OTP中找到高级引导加载程序。)

- 辅助引导程序(Adcanced Bootloader)
散点文件定义为:
*两个初始化文件(startup_cmsdk_cm0.o和system_cmsdk.o)被解决到0x0000000。
*其余的ROM、RAM、堆栈部分都寻址到0x80000。
因此,ARMLinker分配对象,并生成代码将它们复制到适当的位置。ARMLinker生成的代码在初始化文件之前执行(也许……)

当辅助引导加载程序将目标映像从外部内存复制到0x20000000时,辅助引导加载程序本身在0x80000区域上执行。所以,它准备在那个时候复制它。

以上是我所知的知识......它是正确的吗?
非常感谢您的合作。

此致,
光盘

乔奇姆韦
离线
最后一次露面:1年5个月前
格鲁鲁
已加入:2014-01-14 06:45
你完全正确

你完全正确的第二部分。

第一部分,我同意这些术语有点混乱。DA14580和DA14583具有完全相同的ROM代码,因此具有相同的主引导加载程序。
“二次引导加载程序”项目由DA14580上的客户编程为OTP。
在DA14583上,这个项目被称为“高级引导加载程序”,因为OTP上已经有一个预编程的(完全不同的)辅助引导加载程序。
在DA14583上,ROM代码始终启动次级引导程序,因为它是硬编码的。现在,如果客户编程了“高级引导程序”,则辅助引导加载程序将检测到(根据UM-B-012)并启动它。所以最后,如果您编程高级引导加载程序和应用程序代码,则在总共三个引导加载程序中将在您的应用程序代码运行之前运行;)

光盘
离线
最后一次露面:3年10个月前
已加入:2015-11-18 02:51
你好,乔奇姆,

你好,乔奇姆,

现在一切都清楚了。
非常感谢你抽出时间回答我的问题!

此致,
光盘