我正在与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();
设备:
你好,
您想将哪种类型的数据写入此分区?如果这是基本的日志记录数据,则应使用日志分区:NVMS_LOG_PARTI需要对此进行仔细检查,但是我不确定使用AD_FLASH_LOCK()是否适合写入NVMS。
您可以尝试打开日志分区并使用AD_NVMS_WRITE()来验证此功能是否适当起作用(无AD_FLASH_LOCK)
//乔恩
你好,
只需跟进 - 除日志分区外,该通用分区也可用于用户数据。您可以在不使用锁的情况下再试一次吗?
//乔恩
嗨,Matthieuw,
从您的描述来看,它看起来像是僵局。无需致电ad_flash_lock()和ad_flash_unlock()。当调用AD_NVMS_WRITE()时,已经在驱动程序中处理保护。
我尝试将数据写入日志分区,而没有锁定功能,结果相同。
这意味着阅读似乎还可以,我也可以毫无问题地检索partiton的大小,
但是,当试图写数据时,系统将暂停调用写入功能的任务,并且未执行写入。
我应该调用任何其他初始化或写启用函数吗?
关于我的数据是位图,它很大,因此我计划使用较大的闪光灯,但是现在我只是想编写一些字节。
我使用程序停止的调试器跟踪代码位置:
在QSPI AUTO_AUTOMODE文件中L 780
if(pm_register_qspi_operation(handle,addr,buf,&size&op)){
/ *块直到程序完成 */
OS_TASK_SUSPEND(handle);<===这里
OS_FREE(OP);
书面= size;
}
这有帮助吗?
嗨,Matthieuw,
我可以再次与您确认您的最新测试代码是
nvms_t nvms = ad_nvms_open(nvms_generic_part);
AD_NVMS_WRITE(NVMS,ADDR,DATA,LEN);
和
dg_config_disable_background_flash_ops == 1
结果是负面的?你好,
实际上,我启用了禁用背景操作,并设法写入QSPI Flash。
当我早些时候尝试时,我一定犯了一些错误。
谢谢你的支持。
你好,
我知道能够将应用程序参数写入参数部分,并将某些数据写入通用部分。
但是,我的通用零件大小有问题。我的分区描述已附加
但是,当我检索分区尺寸时,我的结果是0x3e00,而不是0x1f000。
当我尝试写入或阅读此分区以地址为0x3e00以上的地址时,我只得到了00。
我试图删除虚拟partion标签,但没有效果,
我打算在最终设计和使用通用零件上使用较大的闪光灯。
你能帮我吗?
问候
Matthieu
嗨,马修,
当使用VES时,您将无法使用Partition_table.h文件中的整个空间脱附,VES驱动程序允许您使用闪光灯的一部分并将其写入随机位置而无需删除整个扇区每当修改同一位置时。这是通过为同一用户提供的地址写入不同闪存位置来完成的。VES驱动程序提供虚拟地址,并在读写之前将用户指定的地址转换为真实的闪存位置地址,因此闪存大小的分区必须比用户可见的地址空间大。因此,为了充分利用VES,它保留了8次实际地址空间,因此您的实际地址空间比partition_table.h文件中的地址小8倍。
如果更改分区并删除VES标志,并且看到相同的可用空间,则意味着您在使用新分区定义燃烧文件之前没有删除闪光灯,并且该设备不会创建新的分区表,因为是一张有效的表格。
谢谢mt_dialog