我现在在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闪存的静止空间?桑斯克为您的帮助。
设备:
我误认为是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(0x00000,0x010000,nvms_generic_part,partition_flag_ves)// downsize为0x010000
partition2(0x0f0000,0x010000,nvms_test_part,0)// <=======添加此部分空间要使用
嗨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 Toolobox找到一个屏幕截图。nvms_test_part分区是未知的,因为自定义分区ID(21)与该工具不匹配。
此外,我强烈建议您阅读适配器概念 - 闪存适配器从我们的支持端口获取更多信息的DA14680教程。
谢谢,PM_DIALOG.
我在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概念 - 闪存适配器教程,但它没有提到如何创建用户自己的分区空间。感谢您的帮助。
在我执行“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?教程仅提到“用于存储二进制文件”!如果删除此分区,则是什么结果?
谢谢你的答案。
嗨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
你好。
只是找不到如何发布一个新问题。对不起。
我在这个问题上有一个类似的问题,但无法弄清楚。
我正在使用带8M比特DA14680芯片的Suota使用Proximity_reporter示例。
并尝试使用NVMS_GENERIC_PART未使用VES。
我读取了Flash适配器手册,并尝试更改分区,但同样的结果。nvms_generic_part - >条目.Flag:2(Ves)
下面是我在custom_config_qspi_suota.h中的项目定义。
#define dg_configflash_adapter 1.
#define dg_confignvms_adapter 1.
#define 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()中打印出一些日志以进行一些检查。
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 &&
entry.valid == 0xff){
printf(“entry.type:%d,stry.flag:%d \ r \ n”,stry.type,stry.flags);
if(条目.flags == 2){
entry.flags = 0;
}
add_partition_entry(&条目);
}
flash_addr + = sizeof(partition_entry_t);
} whiled(rest.type!= 0xff);
#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);
}
#万一
.....
}
执行“erase_qspi_jtag_win”之后,然后“suota_initial_flash_jtag_win”,我收到此日志。
entry.type:1,entry.flag:0
entry.type:19,条目氟:0
entry.type:20,条目.flag:0
entry.type:17,条目.FLAG:0
entry.type:4,条目.flag:0
entry.type:15,entry.flag:1
entry.type:16,条目.flag:1
entry.type:2,entry.flag: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。
但总是获得相同的日志,看起来闪光灯中剩下的分区信息。
当然,由于变量“分区”不是null,因此不会调用函数init_default_partitions()。
此外,我没有调用ad_nvms_init()函数。它似乎是由BLE NVPARAM适配器调用的。
所以,总之。我想使用NVMS_GENERIC_PART未使用VES。有没有其他方法可以解决这个问题?
谢谢你。
嗨rlaxogjs90,
请你澄清你的问题是什么?你想添加一个新分区吗?此外,我很高兴您将您复制到新线程中。这是您应该遵循的过程,以便创建新的论坛主题:
谢谢,PM_DIALOG.