我现在在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)
分区2(0x0C0000, 0x020000, NVMS_LOG_PART, 0)
PARTITION2(0x0E0000, 0x020000, NVMS_GENERIC_PART, PARTITION_FLAG_VES)
PARTITION2(0x100000, 0x020000, NVMS_Test_PART, 0) // <======= add this line to use the rest of flash
然后尝试在“NVMS_Test_PART”分区中写入数据,但失败。在“NVMS_LOG_PART”中执行同样的操作,结果是ok!
我错过了吗?我如何使用QSPI闪存的静止空间?桑斯克为您的帮助。
设备:
我把Winbond flash在PRO DK上的大小错当成8M字节,实际上是8mbits。现在,我仍然有一个关于QSPI闪存分区的问题。如果我想在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)
分区2(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头文件包含到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.
我在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”后,问题现在解决了。顺便提一下,有三个问题。除了改变partition_table,在编程项目代码之前,我们还应该使用"erase qpsi flash"命令做什么改变?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之间吗?这些数字已经被占用了吗?
Q3。分区的目的是什么,nvms_bin_part?教程仅提到“用于存储二进制文件”!如果删除此分区,则是什么结果?
谢谢你的回答。
嗨nigelyang,
很高兴您的问题已得到修复。
Q1:在编程芯片之前执行“erase_qspi_jtag_win”是最好的做法。特别是在创建新分区表时,必须执行“erase_qspi_jtag_win”,因为芯片可能会维护先前的分区表。我们的建议是首先执行“erase_qspi_jtag_win”。
关于NVMS分区id的枚举没有任何特定的规则。是的,您可以使用6和14作为分区ID,因为它们在我们推荐的枚举中是保留的。此外,您可以使用您想要的每个数字作为分区ID,但不应该重复。
Q3:NVMS_BIN_PART在用于存储二进制文件的非拟议应用程序期间使用。此分区不常用于我们的项目中,因此您可以将其删除或用自己的分区替换它。
问候,pm_dialog
嗨。
只是找不到如何发布一个新问题。对不起。
我在这个问题上也遇到了类似的问题,但就是想不出来。
我正在使用带8M比特DA14680芯片的Suota使用Proximity_reporter示例。
并尝试使用NVMS_GENERIC_PART未使用VES。
我阅读了闪存适配器手册,试图改变分区,但得到了相同的结果。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)
分区2(0x01E000, 0x001000, NVMS_PRODUCT_HEADER_PART, 0)
分区2(0x01F000, 0x001000, NVMS_IMAGE_HEADER_PART, 0)
Partition2(0x020000,0x050000,nvms_fw_exec_part,0)
分区2(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));
如果条目。type != 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
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
条目。类型: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。
但总是获得相同的日志,看起来闪光灯中剩下的分区信息。
当然,由于变量“分区”不是null,因此不会调用函数init_default_partitions()。
此外,我没有调用ad_nvms_init()函数。它似乎是由BLE NVPARAM适配器调用的。
因此,在总结。我想使用NVMS_GENERIC_PART而不是使用VES。还有其他办法解决这个问题吗?
谢谢你!
嗨rlaxogjs90,
请你澄清你的问题是什么?你想添加一个新分区吗?此外,我很高兴您将您复制到新线程中。这是您应该遵循的过程,以便创建新的论坛主题:
谢谢,PM_DIALOG.