QSPI通用零件读/写

⚠️
嗨,那里..感谢您参加论坛。激动人心的消息!现在,我们正在转到我们的新论坛平台,该平台将提供更好的功能,并包含在主话网站中。所有帖子和帐户都已迁移。我们现在仅在新论坛上接受流量 - 请在https://www.dialog-spoomendonductor.com/support。我们将在未来几天修复错误 /优化搜索和标记。
10帖子 / 0新
最后一篇文章
Matthieuw
离线
最后一次露面:2个月2周前
加入:2015-11-20 14:55
QSPI通用零件读/写

我正在与DA14680一起在我的自定义开发板上工作了一段时间,
我正在努力在集成板上迁移到DA14681。
但是,我需要在DA14680上验证我可以通过QSPI接口编写和阅读通用部分的自定义数据的事实。

阅读似乎还可以。

nvms_t nvms = ad_nvms_open(nvms_generic_part);
AD_NVMS_READ(NVMS,ADDR,DATA,LEN);

但是,正确的功能不起作用。每次我从自定义任务中调用它时,都不会执行写操作,并且我的任务被暂停。
我尝试启用或禁用dg_config_disable_background_flash_ops参数,而没有更改结果。
如何通过QSPI接口执行此类写作

这是我在Flash中写作的功能

ad_flash_lock();
nvms_t nvms = ad_nvms_open(nvms_generic_part);
AD_NVMS_WRITE(NVMS,ADDR,DATA,LEN);
ad_flash_unlock();

设备:
jk_dialog
离线
最后一次露面:1个月1天前
职员
加入:2016-08-22 23:07
你好,

你好,

您想将哪种类型的数据写入此分区?如果这是基本的日志记录数据,则应使用日志分区:NVMS_LOG_PARTI需要对此进行仔细检查,但是我不确定使用AD_FLASH_LOCK()是否适合写入NVMS。

您可以尝试打开日志分区并使用AD_NVMS_WRITE()来验证此功能是否适当起作用(无AD_FLASH_LOCK)

//乔恩

jk_dialog
离线
最后一次露面:1个月1天前
职员
加入:2016-08-22 23:07
你好,

你好,

只需跟进 - 除日志分区外,该通用分区也可用于用户数据。您可以在不使用锁的情况下再试一次吗?

//乔恩

lt_dialog(未经验证)
嗨,Matthieuw,

嗨,Matthieuw,
从您的描述来看,它看起来像是僵局。无需致电ad_flash_lock()和ad_flash_unlock()。当调用AD_NVMS_WRITE()时,已经在驱动程序中处理保护。

Matthieuw
离线
最后一次露面:2个月2周前
加入:2015-11-20 14:55
我试图将数据写入

我尝试将数据写入日志分区,而没有锁定功能,结果相同。
这意味着阅读似乎还可以,我也可以毫无问题地检索partiton的大小,
但是,当试图写数据时,系统将暂停调用写入功能的任务,并且未执行写入。
我应该调用任何其他初始化或写启用函数吗?
关于我的数据是位图,它很大,因此我计划使用较大的闪光灯,但是现在我只是想编写一些字节。

Matthieuw
离线
最后一次露面:2个月2周前
加入:2015-11-20 14:55
我追踪了代码

我使用程序停止的调试器跟踪代码位置:
在QSPI AUTO_AUTOMODE文件中L 780
if(pm_register_qspi_operation(handle,addr,buf,&size&op)){
/ *块直到程序完成 */
OS_TASK_SUSPEND(handle);<===这里
OS_FREE(OP);
书面= size;
}

这有帮助吗?

lt_dialog(未经验证)
嗨,Matthieuw,

嗨,Matthieuw,
我可以再次与您确认您的最新测试代码是

nvms_t nvms = ad_nvms_open(nvms_generic_part);
AD_NVMS_WRITE(NVMS,ADDR,DATA,LEN);

dg_config_disable_background_flash_ops == 1结果是负面的?

Matthieuw
离线
最后一次露面:2个月2周前
加入:2015-11-20 14:55
你好,

你好,
实际上,我启用了禁用背景操作,并设法写入QSPI Flash。
当我早些时候尝试时,我一定犯了一些错误。
谢谢你的支持。

Matthieuw
离线
最后一次露面:2个月2周前
加入:2015-11-20 14:55
你好,

你好,
我知道能够将应用程序参数写入参数部分,并将某些数据写入通用部分。
但是,我的通用零件大小有问题。我的分区描述已附加

但是,当我检索分区尺寸时,我的结果是0x3e00,而不是0x1f000。
当我尝试写入或阅读此分区以地址为0x3e00以上的地址时,我只得到了00。
我试图删除虚拟partion标签,但没有效果,
我打算在最终设计和使用通用零件上使用较大的闪光灯。
你能帮我吗?
问候
Matthieu

mt_dialog
离线
最后一次露面:1个月2周前
职员
加入:2015-06-08 11:34
嗨,马修,

嗨,马修,

当使用VES时,您将无法使用Partition_table.h文件中的整个空间脱附,VES驱动程序允许您使用闪光灯的一部分并将其写入随机位置而无需删除整个扇区每当修改同一位置时。这是通过为同一用户提供的地址写入不同闪存位置来完成的。VES驱动程序提供虚拟地址,并在读写之前将用户指定的地址转换为真实的闪存位置地址,因此闪存大小的分区必须比用户可见的地址空间大。因此,为了充分利用VES,它保留了8次实际地址空间,因此您的实际地址空间比partition_table.h文件中的地址小8倍。

如果更改分区并删除VES标志,并且看到相同的可用空间,则意味着您在使用新分区定义燃烧文件之前没有删除闪光灯,并且该设备不会创建新的分区表,因为是一张有效的表格。

谢谢mt_dialog