DA1468x引导过程从QSPI

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.wsdof.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
7个职位/ 0个新职位
最后发表
Mikle
离线
最后看到:1年11个月前
加入:2019-06-20 07:19
DA1468x引导过程从QSPI

这就跟你问声好!我感到困惑,希望在理解使用ble (DA14681)的QSPI Cached模式下的引导过程方面得到一些帮助。
在文档UM-B-044(软件参考)中,我不清楚,在flash中从图像保留区域中删除8个字节(参考图43)?正如我所理解的,必须有两个补丁条目(4×2),必须在启动过程中复制到RAM中。那么我们会丢失这些条目吗?
根据我的理解:IVT(192)+64(patch)=256,从0x8000 0000开始有48个patch字节,所以预留区域必须是64,而不是56。
请问,我在想什么?

也……嗯- b - 044:
简单地将头部添加到二进制图像中会使整个图像在flash中移位并损坏
所有函数地址的代码都是错误的。相反,bin2image只修改第一个
0 x100字节。
但是在一个- b - 046 - _da1468x_booting_from_serial_interface:
flash头包含添加在flash二进制图像上的8字节,将前248字节向下移动8字节。

它是否意味着248字节后的8个零字节?但是248-192=56,而不是64 (patch)

设备:
PM_Dialog
离线
最后看到:1天16小时前
工作人员
加入:2018-02-08 11:03
嗨Mikle,

嗨Mikle,

感谢您的在线咨询。让我来解释一下重定向到RAM是如何发生的。

  • 中断向量表(IVT)有192字节(= 0xC0)大小。
  • BLE的Patch Controller有112字节(0x70)大小,并且是4个字节对齐的,所以Patch的最大表项是122/4 = 28。
  • 由于引导加载程序被执行,只有256字节(=0x100)将从flash独立复制到第一个RAM单元(0x07C000),在添加flash头时发生移位。256字节将被重定向是固定的,包括IVT和一些来自补丁控制器的条目。下面你会发现,一旦引导加载程序运行,字节将被镜像:
  1. IVT: 192bytes (= 0xC0)
  2. Patch Controller: 64bytes (= 0x40),对应16个补丁地址

因此,(192 + 64)= 256bytes (0x100)将被重定向到第一个RAM单元,它是固定的,不因任何闪存地址移位而改变。

  • 为此,在用于打补丁的112字节中,只有64字节被复制到RAM中。剩余的(112-64)字节= 48bytes (0x30)将仍然存在于flash中。
  • 您还可以查看sdk/ldscripts/sections.ld.h文件的init_text部分,您将看到前面提到的内容:0x100字节将被复制到第一个ram单元,其中包括IVT和16个补丁项。剩余的(0x130 - 0x100)字节= 0x30(=48字节)对应位于flash中的12个补丁项。

谢谢,PM_Dialog

附件:
Mikle
离线
最后看到:1年11个月前
加入:2019-06-20 07:19
非常感谢您的回复

非常感谢您的回复
1.flash的这种内存布局是否对所有应用程序都有要求,即在112个补丁字节之后总是有208个字节雷竞技安卓下载的预留区域?

2.在数据表da14681-01-ds-v3.0第36段“memory map”中也提到:QSPI flash from 0x800 0000。
但是在软件参考中um-b-044-da1468x…在图43中表示:0x8000 0100,即0x8之后的3个零,而不是n数据表后的2个零。
也许我错了?

3.你回答说:
第一个RAM单元(0x07C000),在图中为0x7c0000,但在数据表中,RAM从0x7fc 0000开始。
什么是正确的?
正如我在ble_adv示例中看到的。init_text节中,elf的起始点是0x800 0100,而不是数据集(我是关于MSB字节)。

4.所以我的主要问题:a)加载器执行后,映射地址(从0x0000 0000)指向48个补丁字节?
在flash中映射地址指向代码(在208保留字节之后)的是什么?

求你了,别拿石头砸我那些可能很蠢的问题。

PM_Dialog
离线
最后看到:1天16小时前
工作人员
加入:2018-02-08 11:03
嗨Mikle,

嗨Mikle,

是的,这个区域总是被保留,以便为跳转表保留可扩展性,以实现ROM补丁。QSPI flash从0x8000000开始。代码和数据从0x800 0100开始。RAM从0x7FC0000开始,你是正确的-这是一个输入错误!关于你的最后一个问题,你能澄清一下吗?

谢谢,PM_Dialog

Mikle
离线
最后看到:1年11个月前
加入:2019-06-20 07:19
非常感谢。

非常感谢。

我的最后一个问题是关于重新映射到0x0后的代码地址(代码在flash中8000100)。即在0x0000 0000处的IVT,在0x0000 0100处的48个补丁字节,在0x0000 0130处的208个保留字节。

有真正的应用程序代码吗?

在0 x0000 0200吗?

PM_Dialog
离线
最后看到:1天16小时前
工作人员
加入:2018-02-08 11:03
嗨Mikle,

嗨Mikle,

flash中的代码和数据从0x80000200开始。

谢谢,PM_Dialog

Mikle
离线
最后看到:1年11个月前
加入:2019-06-20 07:19
是的,我明白。但

是的,我明白。但是在将07fc 0000映射到0000 0000之后,有0800 0200(而不是8000 0200)。

0x0800 0200 => 0x0000 0200 ?