如何从QSPI配置代码大小大于512KB的XIP

⚠️
你好。。谢谢你来参加论坛。令人兴奋的消息!我们现在正在移动到我们的新论坛平台,将提供更好的功能,并包含在主对话网站的过程。所有帖子和账号都已迁移。我们现在只接受新论坛上的流量-请在//www.xmece.com/support. 我们将在未来几天内修复bug/优化搜索和标记。
5 posts / 0 new
最后一篇文章
加里克拉克森
离线
Last seen:1 year 11 months ago
已加入:2019-04-16 09:57
如何从QSPI配置代码大小大于512KB的XIP

嗨,团队,

我有一个DA1469x ProKit和SDK\ u10.0.4.66的构建代码,这有一个标准MX25U3235F闪存设备。我正在进行评估,以检查设备是否符合客户应用程序的要求。

我的应用程序配置为以QSPI中的XIP执行,使用示例应用程序freertos\u retarget构建的初始测试在使用4MB分区表时运行良好。

Now when I am adding the rest of my application I have linked in some proprietary code libraries and constant code tables which increases the code mapped to the ROM region to larger than the default 512KB. The ROM linker region grows to around 800KB. I have left the cache for QSPI configured as default at 64KB.

我已经创建了一个修改的基于4M的分区表,它定义了固件分区,如下所示,并且我已经调整了链接器脚本:

#define NVMS_PRODUCT_HEADER_PART_START 0x000000#define NVMS_PRODUCT_HEADER_PART_SIZE 0x002000#define NVMS_FIRMWARE_PART_START 0x002000/*与512KB的对齐由默认闪存区域大小决定。*/#定义NVMS\固件\部件\大小0x0DE000/*从默认0x07E000增加到使用空空间*/

I flashed the device using the计划脚本,似乎闪光所有部门正确,但我无法读回任何常数数据或执行代码以上的地址0x80000(重映射)或0x36080000直接。有没有可能NVMS_FIRMWARE_PART_SIZEgreater than 512KB?

要么计划脚本未能正确地闪存上部区域,或者QSPI内存(re)映射仍然被错误配置。

Please can you offer any guidance.

Thanks

~Garry

设备:
PM_Dialog
离线
Last seen:1天2小时前
工作人员
已加入:2018-02-08 11:03
Hi Garry Clarkson,

Hi Garry Clarkson,

请查看DA1469x数据表中的表976。默认情况下,FLASH region size设置为0.5 MB,但是可以通过编程OTP头中的CACHE\u FLASH\u REG[FLASH\u region\u size]来更改此值。CACHE\u FLASH\u REG[FLASH\u REGION\u BASE]和CACHE\u FLASH\u REG[FLASH\u REGION\u OFFSET]将由引导加载程序设置,因此不需要对它们进行编程。只能对CACHE\u FLASH\u REG[闪存\u区域\u大小]进行编程。

  1. 假设您希望有1MB的闪存区域大小,那么您必须将CACHE\u FLASH\u REG[FLASH\u region\u size]设置为0x5。请参阅附件中的步骤,你应该遵循,以程序的OTP头。
  2. 燃烧的OTP头后,应该改变the partition table, because the FW partitions must be aligned to 1MB with offset up to 0x4000. In general the FW partition must be aligned to FLASH_REGION_SIZE. You could find a reference partition table in the attachments. As you can see, both firmware and generic partition are 1MB aligned. The NVMS_PRODUCT_HEADER should start at 0x0000 and the size should be 0x2000. Except from the NVMS_PRODUCT_HEADER, NVMS_FIRMWARE and NVMS_GENERIC_PART could be modified according your implementation and requirements. Make sure that you have set the correct value according to Table 976 and burn the OTP header.
  3. 如果使用MX25U3235F和4MB分区表,则必须具有与config.png snapshot中相同的配置。运行程序\u qspi \u config脚本以确保您具有相同的配置。除非,请更换。
  4. 首先擦除QSPI,然后通过执行适当的脚本来编程。然后从SmartSnippets工具箱的工具栏打开QSPI分区表。强烈建议使用该工具的最新版本2.0.8。如果按connect并读取,您将看到更新的分区表,如partition_table.PNG snapshot中所示。NVMS\u PARTITION\u表应该从QSPI地址0x3FF00开始,并且4kbytes(1个闪存扇区大小)应该放在所选闪存大小的末尾之前。如果不是这样,那么工具箱将无法识别新的分区方案(NVMS\u partition\u TABLE.PNG)!

此外,如果您想拥有SUOTA功能,则必须分别修改SUOTA分区表。

Thanks, PM_Dialog

附件:
加里克拉克森
离线
Last seen:1 year 11 months ago
已加入:2019-04-16 09:57
你好,

你好,

非常感谢您的指导和一步一步的指导。在启动代码的早期,我将CACHE\u FLASH\u REG[FLASH\u REGION\u SIZE]设置为0x5,但没有意识到这必须通过OTP路由完成。

我改为使用2Mbyte配置,将CACHE\u FLASH\u REG[FLASH\u REGION\u SIZE]设置为0x4以获得一些净空,并调整了分区表。它现在运转良好。谢谢你的帮助。

Regards,

Garry

PM_Dialog
离线
Last seen:1天2小时前
工作人员
已加入:2018-02-08 11:03
Hi Garry,

Hi Garry,

很高兴你解决了问题。如果你觉得我的答案有用,请注明“已接受”。

Thanks, PM_Dialog

PM_Dialog
离线
Last seen:1天2小时前
工作人员
已加入:2018-02-08 11:03
嗨,加里,

嗨,加里,

In addition you should change the dg_configQSPI_CODE_SIZE_AA macro in bsp_memory_defaults.h file. Please make the following modifications in bsp_memory_defaults.h

#ifndef dg_configQSPI_MAX_IMAGE_SIZE#define dg_configQSPI_MAX_IMAGE_SIZE(IMAGE_PARTITION_SIZE)#endif#ifndef dg_configQSPI_CODE_SIZE_AA#define dg_configQSPI_CODE_SIZE_AA(dg_configQSPI_MAX_IMAGE_SIZE-(136*1024))/*考虑CMI固件大小*/#endif

The 136KB is the size of the CMAC which is running in M0+.

Thanks, PM_Dialog