QSPI图像大小大于508KB

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.xmece.com/support.我们将在未来几天修复bug /优化搜索和标记。
4个职位/ 0个新
最后发表
ILXT001.
离线
最后看到:2个月前1年
加入:2017-06-29北京
QSPI图像大小大于508KB

嗨,对话框中,
我们有一个正在进行的项目使用DA14681 BLE与16MB QSPI闪存存储代码和数据。由于SUOTA特性(成本128KB)和内部巨大的功能,默认的QSPI图像大小0x7f000 (508K)定义在分区表是不够的,我们必须使它更大。以下是我修改的代码大小从0x5D000 (372KB)增加到8D000 (564K):

---------------------------- 旧的分区表 ------------------------------------------------
Partition2(0x000000,0x01e000,nvms_firmware_part,0)
PARTITION2(0x01E000, 0x001000, NVMS_PRODUCT_HEADER_PART, 0)
PARTITION2(0x01F000, 0x001000, NVMS_IMAGE_HEADER_PART, 0)
PARTITION2(0x020000, 0x05D000, NVMS_FW_EXEC_PART, 0)
PARTITION2(0x07D000, 0x002000, NVMS_PLATFORM_PARAMS_PART, PARTITION_FLAG_READ_ONLY)
PARTITION2(0x07F000, 0x001000, NVMS_PARTITION_TABLE, PARTITION_FLAG_READ_ONLY)
Partition2(0x080000,0x010000,NVMS_PARAM_PART,0)
PARTITION2(0x090000, 0x1D2000, NVMS_LOG_PART, 0)
PARTITION2(0x262000, 0x05E000, NVMS_FW_UPDATE_PART, 0)
PARTITION2(0x2C0000, 0xD40000, NVMS_GENERIC_PART, 0)

---------------------------------------------------------------------------
Partition2(0x000000,0x01e000,nvms_firmware_part,0)
PARTITION2(0x01E000, 0x001000, NVMS_PRODUCT_HEADER_PART, 0)
PARTITION2(0x01F000, 0x001000, NVMS_IMAGE_HEADER_PART, 0)
PARTITION2(0x020000, 0x08D000, NVMS_FW_EXEC_PART, 0)
PARTITION2(0x0AD000, 0x002000, NVMS_PLATFORM_PARAMS_PART, PARTITION_FLAG_READ_ONLY)
PARTITION2(0x0AF000, 0x001000, NVMS_PARTITION_TABLE, PARTITION_FLAG_READ_ONLY)
//NVMS_PARAM_PART必须是64KB对齐
PARTITION2(0x0B0000, 0x010000, NVMS_PARAM_PART, 0)
PARTITION2(0x0C0000, 0x1D2000, NVMS_LOG_PART, 0)
Partition2(0x292000,0x08e000,nvms_fw_update_part,0)
Partition2(0x320000,0xce0000,NVMS_GENERIC_PART,0)

-------------------------------------------------------------------------------
//定义PARTITION_TABLE_ADDR (0x080000)
#define PARTITION_TABLE_ADDR (0x0B0000 - (FLASH_SECTOR_SIZE))

---------------------------------------新cmd_handler.c:max_image_size --------------------------------
/ *图像的最大大小* /
/ / # define x7f000 MAX_IMAGE_SIZE 0
#define max_image_size 0xaf000.

-------------------------- 新dlg_suota.c: SUOTA_MAX_IMAGE_SIZE --------------------------------
#define suota_max_image_size(564 * 1024)

------------------------新码_Size-------------------------------
#define CODE_SIZE (564 * 1024)

通过以上更新,QSPI图像尺寸支持大于508K,设备可以正常工作。以下是我需要你输入的问题:
1.DA14681本身是否可以处理大于508KB的QSPI图像?
2.如果Q1的答案是肯定的,是否有其他地方需要相应更新以支持大于508K的图像大小。
3.通过我的修改,我可以确认单位现在正在运行,并且QSPI分区表是在每个分区表中定义的QSPI位置,但它无法在SmartSnippets工具箱(v4.8.3.1804)中获得任何内容,这是因为它分区表地址被假定为0x7f000?

提前致谢!
提姆林

设备:
PM_Dialog
离线
最后看到:28分15秒前
工作人员
加入:2018-02-08 11:03
嗨Ilxt001,

嗨Ilxt001,

1)您能够使用多达64MB的QSPI闪光灯,但只有32MB将可缓存。其他32MB只能用于数据而不是固件。正如我在您发布的代码中所看到的,您对Partition2宏有一个误解。宏的第一个属性用于物理内存地址的开始,第二属性是大小。Partition2宏被定义为:Partition2(开始,大小,ID,标志)

2)Partition_Table_Addr应始终指向NVMS_PARTITION_TABLE。Flash Image位于NVMS_Firmware_Part中,此分区应至少为128KB。缓存内存中有一个错误,默认情况下,nvms_firmware_part分区的大小为0x020000(128kb)。此外,默认情况下,1μ/ partition_table.h被激活。你如何进行更改?如果将更改变为1μ/ partition_table.h,则不必进行任何其他更改。建议您制作自己的分区表并将其包含在不同的文件中,以相同的方式包含1μ/ partition_table.h。SDK提供3个不同的隔板方案(1M,2M,512K)

3)预计SmartSnippets工具箱无法使用修改获取QSPI闪存分区,因为分区表是由0x7F00物理地址中的工具配置的默认值。因此,建议不要更改分区表物理地址并更改其他分区。如果您不更改分区表物理地址,则该工具无法正常工作,您将无法看到分区。

谢谢,PM_Dialog

ILXT001.
离线
最后看到:2个月前1年
加入:2017-06-29北京
嗨pm_dialog,

嗨pm_dialog,
首先,感谢您的快速回复。
1)是的,我知道PARTITION2宏被定义为:PARTITION2(开始,大小,id,标志)和我的新分区表也被相应地组织。请您指出我的新分区表或其他地方有什么问题?谢谢。

2) NVMS_PARTITION_TABLE位于从0开始在新的分区表和PARTITION_TABLE_ADDR xaf000被定义为(0 x0b0000 - (FLASH_SECTOR_SIZE))(这是原始的方法来计算PARTITION_TABLE_ADDR而不是直接0 xaf000 flash_partitions.h) FLASH_SECTOR_SIZE 0 x1000,这是PARTITION_TABLE_ADDR xaf000等于0。因此,PARTITION_TABLE_ADDR确实指向NVMS_PARTITION_TABLE。

3)我们的设备具有Suota功能,因此BLE Suota Image在Suota类型分区中使用QSPI中的第一个128KB空间,即0〜128KB空间的分区设置不变。nvms_firmware_part被设置为partition2(0x000000,0x01e000,nvms_firmware_part,0)默认。

4)我们确实添加了我们自己的分区表在sdk/bsp/config/16M/suota/partition_table.h和这个文件将包括在项目下面的配置在/sdk/适配器/include/partition_table.h,抱歉我没有提到我们已经做了这个改变。
#if定义(use_partition_table_16mb)
#include <16m / partition_table.h>
#elif定义(use_partition_table_16mb_with_suota)
# include < 16米/ suota / partition_table.h >

5)我希望保持NVMS_PARTITION_TABLE在空间0x7F000~0X7FFFF,但实际上我不能。QSPI空间0~128KB被BLE SUTOA代码使用,我们的应用程序(固件和代码相关数据)从0x20000开始,如果NVMS_PARTITION_TABLE位于0x7F000,固件的最大大小可以是(0x7F000 - 0x2000 - 0x20000 = 0x5D000, 372KB)。这个事实使我们没有机会将NVMS_PARTITION_TABLE向后移动。虽然QSPI分区表信息不能在SmartSnippets Toolbox (v4.8.3.1804)中获得更多,但我确实看到它们在QSPI flash 0xAF000中定义在partition_table.h后设备运行。如果固件内部没有其他功能问题,我认为这对我来说是可以的。

谢谢/蒂姆

PM_Dialog
离线
最后看到:28分15秒前
工作人员
加入:2018-02-08 11:03
嗨Ilxt001,

嗨Ilxt001,

修改后的分区表有什么问题吗?如果有,您有哪些问题?

谢谢,PM_Dialog