如何使用QSPI flash的剩余空间?

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.xmece.com/support.我们将在未来几天修复bug /优化搜索和标记。
8个帖子/ 0新
最后发表
nigelyang
离线
最后一次露面:3周15小时前
加入:2018-03-20 08:24
如何使用QSPI flash的剩余空间?

我现在在DA1468x PRO开发套件上使用1m字节的QSPI flash分区。据我所知,PRO开发套件中的winbond flash是8mb,所以我想使用剩余的flash空间(7mb)。我修改了partition_table.h,如下所示(只是添加了最后一行)
Partition2(0x000000,0x07F000,NVMS_Firmware_Part,0)
PARTITION2(0x07F000, 0x001000, NVMS_PARTITION_TABLE, PARTITION_FLAG_READ_ONLY)
Partition2(0x080000,0x010000,NVMS_PARAM_PART,0)
Partition2(0x090000,0x030000,NVMS_BIN_PART,0)
PARTITION2(0x0C0000, 0x020000, NVMS_LOG_PART, 0)
PARTITION2(0x0E0000, 0x020000, NVMS_GENERIC_PART, PARTITION_FLAG_VES)
PARTITION2(0x100000, 0x020000, NVMS_Test_PART, 0) // <=======添加了这一行来使用flash的剩余空间

然后尝试在“NVMS_Test_PART”分区中写入数据,但失败。在“NVMS_LOG_PART”中做同样的事情,结果是ok!
有我错过的设置吗?我如何使用QSPI flash的剩余空间?谢谢你的帮助。

设备:
nigelyang
离线
最后一次露面:3周15小时前
加入:2018-03-20 08:24
我误解了大小

我误以为PRO DK上Winbond flash的大小是8M字节,实际上是8mbits。现在我还有一个关于QSPI flash partition的问题。如果我想在PARTITION2中创建自己的部分,如下所示。(NVMS_Test_PART =21)写入该空间失败。SDK允许用户在PARTITION2中创建自己的空间吗?如果有,怎么办?
Partition2(0x000000,0x07F000,NVMS_Firmware_Part,0)
PARTITION2(0x07F000, 0x001000, NVMS_PARTITION_TABLE, PARTITION_FLAG_READ_ONLY)
Partition2(0x080000,0x010000,NVMS_PARAM_PART,0)
Partition2(0x090000,0x030000,NVMS_BIN_PART,0)
PARTITION2(0x0C0000, 0x020000, NVMS_LOG_PART, 0)
partition2(0x00000,0x010000,nvms_generic_part,partition_flag_ves)// downsize为0x010000
partition2(0x0f0000,0x010000,nvms_test_part,0)// <=======添加此部分空间要使用

PM_DIALOG.
离线
最后一次露面:1天6小时前
工作人员
加入:2018-02-08 11:03
嗨nigelyang,

嗨nigelyang,

为了复制NVMS_Test_PART分区的问题,我创建了一个简短的演示,但是我能够创建它、向它写入和读取它。对于分区表,我使用了您发布的代码片段。请检查附件中的示例代码。这个示例演示了整个分区表的初始化,向NVMS_Test_PART分区写入一些内容,并读回之前写入的内容。请将ad_nvms.h头文件包含到mac .c中,并在custom_config_qspi.h中进行以下配置:

#定义dg_configFLASH_ADAPTER (1)

#定义dg_configNVMS_ADAPTER (1)

#定义dg_configNVMS_VES (0)

在附件的Partition_Table.png文件中,您可以从SmartSnippets Toolobox找到一个屏幕截图。nvms_test_part分区是未知的,因为自定义分区ID(21)与该工具不匹配。

同时,我强烈推荐你阅读适配器概念 - 闪存适配器从我们的支持端口获取更多信息的DA14680教程。

谢谢,PM_DIALOG.

附件:
nigelyang
离线
最后一次露面:3周15小时前
加入:2018-03-20 08:24
我用了你的例子代码

我在DSP项目代码中使用了示例代码,但是结果相同。当我执行“nv = ad_nvms_open(nvms_test_part)时,我发现分区句柄(nv)是null;”但是,如果打开其他分区,例如nvms_firmware_part,nvms_param_part,nvms_bin_part,nvms_log_part,nvms_generic_part,则其他分区句柄不是null。
我相信我在partition_table.h中添加了partition2(0x0f0000,0x0100,0100,nvms_test_part,0),“nvms_test_part = 21”,函数ad_nvms_direct_bind()中的“case nvms_pixels_part:”。我是否错过了其他设置,以便适配器无法识别我的分区?我已经读取了DA14680的Adapters概念 - 闪存适配器教程,但它没有提到如何创建用户自己的分区空间。感谢您的帮助。

nigelyang
离线
最后一次露面:3周15小时前
加入:2018-03-20 08:24
问题现在解决了

这个问题在我执行“erase_qspi_jtag_win”后现在解决了。顺便提一下,关于这个有三个问题。除了修改partition_table之外,我们还应该在编程项目代码之前使用“erase qpsi flash”命令进行哪些修改?问题2:NVMS分区id枚举规则是什么?默认值是"typedef enum {"
nvms_firmware_part = 1,
nvms_param_part = 2,
nvms_bin_part = 3,
nvms_log_part = 4,
NVMS_GENERIC_PART = 5,
nvms_platform_params_part = 15,
NVMS_PARTITION_TABLE = 16,
nvms_fw_exec_part = 17,
nvms_fw_update_part = 18,
nvms_product_header_part = 19,
nvms_image_header_part = 20,
} nvms_partition_id_t;
我可以将我自己的分区ID设置为6到14之间吗?这些数字已经有人了吗?
第三季。NVMS_BIN_PART分区的用途是什么?本教程只提到“用于存储二进制文件”!如果删除这个分区,结果是什么?
谢谢你的回答。

PM_DIALOG.
离线
最后一次露面:1天6小时前
工作人员
加入:2018-02-08 11:03
嗨nigelyang,

嗨nigelyang,

很高兴您的问题已得到修复。
Q1:在编程芯片之前执行“erase_qspi_jtag_win”是最好的做法。特别是在创建新分区表时,必须执行“erase_qspi_jtag_win”,因为芯片可能会维护先前的分区表。我们的建议是首先执行“erase_qspi_jtag_win”。

Q2:对于NVMS分区id的枚举没有任何特定的规则。是的,您可以使用6和14作为分区ID,因为它们被保留在我们推荐的枚举中。此外,您可以使用您想要的每个数字作为分区ID,但不应该重复。

Q3:NVMS_BIN_PART在用于存储二进制文件的非拟议应用程序期间使用。此分区不常用于我们的项目中,因此您可以将其删除或用自己的分区替换它。

问候,pm_dialog

rlaxogjs90
离线
最后一次露面:1年2个月前
加入:2017-04-04 10:04
嗨。

嗨。
只是找不到如何发布一个新问题。对不起。

这个问题我也有类似的问题,但是我想不出来。

我正在使用带8M比特DA14680芯片的Suota使用Proximity_reporter示例。
并尝试使用NVMS_GENERIC_PART未使用VES。
我阅读flash适配器手册,并试图更改分区,但得到相同的结果。NVMS_GENERIC_PART - >条目。国旗:2(大)

下面是我在custom_config_qspi_suota.h中的项目定义。

#define dg_configflash_adapter 1.
#定义dg_configNVMS_ADAPTER 1
#定义dg_configNVMS_VES 0
#define dg_confignvparam_adapter 1.

我删除了除my_partition_table.h文件之外的所有partition_table.h文件。

下面是my_partition_table.h文件。
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,0x050000,nvms_fw_exec_part,0)
PARTITION2(0x070000, 0x00D000, NVMS_LOG_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,0x051000,nvms_fw_update_part,0)
PARTITION2(0x0E1000, 0x01F000, NVMS_GENERIC_PART, 0)

我在ad_nvms_init()中打印出一些日志以进行一些检查。
空白ad_nvms_init (void) {
.....
{做
Ad_flash_read (flash_addr, (uint8_t *) &entry, sizeof(partition_entry_t));
如果条目。= 0xFF &&条目。输入!= 0 &&条目。magic == PARTITION_ENTRY_MAGIC &&
entry.valid == 0xff){
printf("条目。类型:% d,条目。国旗:% d \ r \ n”条目。类型,entry.flags);
if(条目.flags == 2){
条目。旗帜= 0;
}

add_partition_entry(入口);
}
flash_addr + =运算符(partition_entry_t);
} whiled(rest.type!= 0xff);
#如果CONFIG_PARTITION_TABLE_CREATE
if (partitions == NULL) {
printf(“ad_nvms_init >> init_default_partitions \ r \ n”);
init_default_partitions();
其他}{
printf(“ad_nvms_init >> partitions2:%d \ r \ n”,partitions);
}
#万一
.....
}

执行“erase_qspi_jtag_win”之后,然后“suota_initial_flash_jtag_win”,我收到此日志。
entry.type:1,entry.flag:0
entry.type:19,条目氟:0
条目。类型:20岁的条目。国旗:0
entry.type:17,条目.FLAG:0
entry.type:4,条目.flag:0
entry.type:15,entry.flag:1
entry.type:16,条目.flag:1
条目。类型:2项。国旗:0
entry.type:18,条目.Flag:0
entry.type:5,条目.Flag:2 < - 预期为条目.FLAG:0(其中条目.Type:5是NVMS_GENERIC_PART)

我检查了整个Flash被SmartSnippets Toolbox删除了执行erase_qspi_jtag_win。
但是总是得到相同的日志,看起来好像有一个分区信息留在flash中。
当然,由于变量“分区”不是null,因此不会调用函数init_default_partitions()。

此外,我没有调用ad_nvms_init()函数。它似乎是由BLE NVPARAM适配器调用的。

因此,在总结。我想使用NVMS_GENERIC_PART而不是使用VES。还有别的办法解决这个问题吗?

谢谢你!

PM_DIALOG.
离线
最后一次露面:1天6小时前
工作人员
加入:2018-02-08 11:03
嗨rlaxogjs90,

嗨rlaxogjs90,

请你澄清你的问题是什么?你想添加一个新分区吗?此外,我很高兴您将您复制到新线程中。这是您应该遵循的过程,以便创建新的论坛主题:

  1. 访问我们的论坛页面在此链接中:https://support.dialog-semicondiondiondum/forum.
  2. 请登录,展开“蓝牙”标签,您将看到对话框Smartbond蓝牙低能量(H/W, S/W,工具)论坛。
  3. 然后,输入对话框“SmartBond蓝牙低能量 - 软件”论坛。
  4. 击中“新主题”,最后用相应的关键字创建帖子。

谢谢,PM_DIALOG.