这就跟你问声好!我感到困惑,希望在理解使用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)
设备:
嗨Mikle,
感谢您的在线咨询。让我来解释一下重定向到RAM是如何发生的。
因此,(192 + 64)= 256bytes (0x100)将被重定向到第一个RAM单元,它是固定的,不因任何闪存地址移位而改变。
谢谢,PM_Dialog
非常感谢您的回复
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保留字节之后)的是什么?
求你了,别拿石头砸我那些可能很蠢的问题。
嗨Mikle,
是的,这个区域总是被保留,以便为跳转表保留可扩展性,以实现ROM补丁。QSPI flash从0x8000000开始。代码和数据从0x800 0100开始。RAM从0x7FC0000开始,你是正确的-这是一个输入错误!关于你的最后一个问题,你能澄清一下吗?
谢谢,PM_Dialog
非常感谢。
我的最后一个问题是关于重新映射到0x0后的代码地址(代码在flash中8000100)。即在0x0000 0000处的IVT,在0x0000 0100处的48个补丁字节,在0x0000 0130处的208个保留字节。
有真正的应用程序代码吗?
在0 x0000 0200吗?
嗨Mikle,
flash中的代码和数据从0x80000200开始。
谢谢,PM_Dialog
是的,我明白。但是在将07fc 0000映射到0000 0000之后,有0800 0200(而不是8000 0200)。
0x0800 0200 => 0x0000 0200 ?