如何使用qspi flash的静止空间?

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
8个帖子/ 0个新
最后一篇
尼格利
离线
最后看到:2周4天前
加入:2018-03-20 08:24
如何使用qspi flash的静止空间?

我现在在da1468x pro开发套件上使用qspi flash的1m-byte分区。如我所知,Pro开发套件中的Winbond Flash是8 MB,所以我想使用REST空间(7 MB)的闪存。我修改了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)// <=======添加了此行以使用闪存的REST空间

然后尝试在“nvms_test_part”分区中编写数据,但失败。在“nvms_log_part”中做同样的事情,结果还可以!
我错过了吗?我如何使用QSPI闪存的静止空间?桑斯克为您的帮助。

设备:
尼格利
离线
最后看到:2周4天前
加入:2018-03-20 08:24
我把它的大小搞错了

我误认为是Pro DK上的Winbond Flash的大小为8M字节,实际上是8 Mbits。现在,我仍然对QSPI闪存分区有一个问题。如果我想在Partition2中创建自己的部分,如下所示。(nvms_test_part = 21)结果是在此空间中写入的故障。Dose SDK允许用户在Partition2中创建自己的空间2?如果是,怎么办?
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, 0x010000, NVMS_GENERIC_PART, PARTITION_FLAG_VES) //缩小为0x010000
PARTITION2(0x0F0000, 0x010000, NVMS_Test_PART, 0) // <=======添加这个部分空间使用

PM_Dialog
离线
最后看到:17小时1分钟前
职员
加入:2018-02-08 11:03
嗨nigelyang,

嗨nigelyang,

我创建了一个简短的演示,以便用nvms_test_part分区复制您的问题,但我能够创建它,写入它并阅读它。对于分区表,我使用了已发布的代码片段。请检查附件中的示例代码。此示例演示了整个分区表的初始化,将内容写入NVMS_TEST_PART分区,并读回以前写的内容。请将AD_NVMS.h标头文件添加到MAIC.C中,并在Custom_Config_Qspi.h中执行以下配置:

#定义dg_configflash_adapter(1)

#定义dg_confignvms_adapter(1)

#定义dg_confignvms_ves(0)

在附件的partition_table.png文件中,您可以从SmartSnippets toolbox中找到一个截图。NVMS_Test_PART分区是UNKNOWN_PARTITION_ID,因为自定义分区ID(21)与工具不匹配。

此外,我强烈建议您阅读适配器概念- Flash适配器DA14680教程的更多信息从我们的支持端口。

谢谢,PM_Dialog

附件:
尼格利
离线
最后看到:2周4天前
加入:2018-03-20 08:24
我使用了你的示例代码

我在DSPS项目代码中使用了你的示例代码,但是得到了相同的失败结果。当我执行“nv = ad_nvms_open(NVMS_Test_PART);”时,我发现分区句柄(nv)是空的,但其他分区句柄如果打开其他分区不为空,如NVMS_FIRMWARE_PART,NVMS_PARAM_PART,NVMS_BIN_PART, NVMS_LOG_PART, NVMS_GENERIC_PART。
我确信我已经在partition_table.h中添加了PARTITION2(0x0F0000, 0x010000, NVMS_Test_PART, 0),在partition_def.h中添加了“NVMS_Test_PART = 21”,在函数ad_nvms_direct_bind()中添加了“case NVMS_PIXELS_PART:”。我是否遗漏了其他设置以至于适配器不能识别我的分区?我已经阅读了DA14680的适配器概念- Flash适配器教程,但它没有提到如何创建用户自己的分区空间。感谢你的帮助。

尼格利
离线
最后看到:2周4天前
加入:2018-03-20 08:24
问题现在解决了

在我执行“erase_qspi_jtag_win”之后,现在解决了问题。顺便说一下,关于这个问题有三个问题。Q1除了更改partition_table,我们应该在编程项目代码之前使用“erase qpsi flash”命令效果是什么?Q2:NVMS分区ID枚举的规则是什么?默认值是“typedef枚举{
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岁吗?这些数字已经占用了吗?
Q3。分区的目的是什么,nvms_bin_part?教程仅提到“用于存储二进制文件”!如果删除此分区,则是什么结果?
谢谢你的答案。

PM_Dialog
离线
最后看到:17小时1分钟前
职员
加入: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用于非suota启用的应用程序存储二进制文件。这个分区在我们的项目中并不常用,所以您可以删除它或用自己的分区替换它。

问候,PM_Dialog

rlaxogjs90.
离线
最后看到:2个月前1年
加入:2017-04-04 10:04
你好。

你好。
只是不知道如何发布一个新的问题。对不起。

我在这个问题上有一个类似的问题,但无法弄清楚。

我使用的是proximity_reporter示例,使用8m位DA14680芯片的suota。
并且尝试使用NVMS_GENERIC_PART而不使用VES。
我读取了Flash适配器手册,并尝试更改分区,但同样的结果。nvms_generic_part - >条目.Flag:2(Ves)

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

#定义dg_configFLASH_ADAPTER 1
#define dg_confignvms_adapter 1.
#define dg_confignvms_ves 0.
#定义dg_configNVPARAM_ADAPTER 1

我擦除了所有的partition_table.h文件,除了my_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()中打印了一些日志,以便进行一些检查。
void ad_nvms_init(void){
.....
做 {
ad_flash_read(flash_addr,(uint8_t *)&条目,sizeof(partition_entry_t));
if(条目.type!= 0xff &&条目.Type!= 0 &&条目.magic == partition_entry_magic &&
条目。有效== 0xFF) {
printf(“entry.type:%d,stry.flag:%d \ r \ n”,stry.type,stry.flags);
如果条目。标志= = 2){
entry.flags = 0;

add_partition_entry(&条目);

flash_addr + = sizeof(partition_entry_t);
}(条目。类型! = 0 xff);
#if 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);

# endif
.....

在执行“erase_qspi_jtag_win”和“suota_initial_flash_jtag_win”之后,我得到了这个日志。
条目。类型:1、条目。国旗:0
条目。类型:19岁的条目。国旗:0
entry.type:20,条目.flag:0
条目。类型:17岁的条目。国旗:0
条目。类型:4项。国旗:0
条目。类型:15日条目。国旗:1
条目。类型:16日条目。国旗:1
entry.type:2,entry.flag:0
条目。类型:18岁的条目。国旗:0
条目。类型:5项。标志:2 <-期望进入。国旗:0(条目。type: 5 is NVMS_GENERIC_PART)

我检查了整个flash被smartsnippets工具箱执行erase_qspi_jtag_win所擦除。
但总是获得相同的日志,看起来闪光灯中剩下的分区信息。
当然,函数init_default_partitions()不会被调用,因为变量“partitions”不是NULL。

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

所以,总之。我想使用NVMS_GENERIC_PART未使用VES。有没有其他方法可以解决这个问题?

谢谢你。

PM_Dialog
离线
最后看到:17小时1分钟前
职员
加入:2018-02-08 11:03
嗨rlaxogjs90,

嗨rlaxogjs90,

你能解释一下你的问题是什么吗?是否要添加一个新分区?另外,我强烈建议你复制你的问题到一个新的线程。这是你应该遵循的程序,以创建一个新的论坛帖子:

  1. 请浏览我们的论坛网页:https://support.dialog-semiconductor.com/forum
  2. 请登录,展开“蓝牙”选项卡,您将看到对话框智能电动蓝牙低能量(H / W,S / W,Tools)论坛。
  3. 然后进入“Smartbond蓝牙低能耗-软件”论坛对话框。
  4. 点击“新话题”,最后用合适的关键词创建你的文章。

谢谢,PM_Dialog