写超过8次到flash?

了解更多常见问题教程

7个职位/0个新职位
最后一篇文章
安道尔M2013
离线
最后一次见到:2个月1周前
已加入:2017-04-07 05:11
写超过8次到flash?

嗨,Dialog,

我想知道当我在VES中写了太多的时候会发生什么。例如,假设分区\u项\u大小/AD \u NVMS \u VES \u乘数=128/8=16 KB. 将16kB的数据写入8次后,将占用所有空间。如果我写了8次以上呢?在写入第9个16kB闪存之前,我要擦除整个128kB闪存吗?

谢谢您。

设备:
PM\U对话框
离线
最后一次见到:2天20小时前
工作人员
已加入:2018-02-08 11:03
您好,M2013,

您好,M2013,

请参见第2.4.2节。在闪存适配器概念辅导的。他说:

VES驱动程序提供对分区入口的访问,并带有电源故障和防护装置。为了实现这一点,VES驱动程序将数据写入闪存中的随机位置,而无需在修改同一位置时擦除整个扇区。这是通过为同一用户提供的地址写入不同的闪存位置来实现的。VES驱动程序提供虚拟寻址,即在读或写操作之前,将用户指定的地址转换为真实的闪存位置。要使其工作,闪存大小必须大于用户可见的寻址空间。通常的经验法则是所需的虚拟EEPROM大小的8倍。

此规则在SDK中使用AD\u NVMS\u VES\u MULTIPLIER宏(位于AD\u NVMS\u VES.h头文件中)使用。特别是,对于1 MB闪存型号,通用分区为128 KB(0x20000),因此虚拟地址空间约为:

分区\输入\大小/AD \ NVMS \ VES \乘数=128/8=16 KB。

此外,flash扇区被划分为多个容器,每个容器保存一系列虚拟EEPROM地址的数据。容器的大小在编译时可配置为2n字节,默认情况下,已使用AD\u NVMS\u VES.h中的AD\u NVMS\u VES\u container\u size宏配置为64字节。

存储在RAM中的容器分配表(CAT)用于跟踪有效容器的位置,扇区分配表(SAT)保存每个扇区的状态(%dirty,free)。容器的选定大小是CAT所需的RAM数量和每个扇区的潜在擦除周期数之间的权衡。容器越小,占用的内存就越多。尤其是,CAT中的每个条目由2个字节组成。因此,在我们的12kbytes虚拟EEPROM的例子中,计算占用RAM的公式是:12288/(64-4)=205 CAT entries=205*2=410字节。

注意:只有在闪存中频繁写入/修改一小块数据时,才应使用VES功能。如前所述,唯一标记为VES的区域是NVMS\u GENERIC\u PART partition条目。Dialog提供的BLE持久存储机制使用这个分区条目,因此必须启用VES特性。否则,所有相关操作都将失败。

你能说明你的要求吗?你想用VES完成什么?

谢谢,下午好

安道尔M2013
离线
最后一次见到:2个月1周前
已加入:2017-04-07 05:11
嗨,PM\U对话,

嗨,PM\U对话,

谢谢你的及时回复。我读过这本书闪存适配器概念.

我想将错误打印日志保存到flash中,以便android应用程序稍后可以读取它来检查错误发生的原因。

我们的android应用程序有时会出现BLE连接中断,重新连接也会失败,而且由于很难很容易地重现这个问题(每1~2周发生一次),因此我们无法在实验室用RS232打印进行测试,而是尝试在错误发生后收集错误上下文。partion LOG\u部分用于其他应用程序,因此我必须使用NVMS\u GENERIC\u部分。由于我们不知道问题何时发生,因此在问题发生之前可能会保存大量打印日志,flash会不时被覆盖。

我知道VES机制是写到闪存的不同位置,以避免频繁擦除闪存,但每个闪存扇区在长时间运行后都有机会写一次。当猫找不到从未写过字的地方时会发生什么?

例如:有128kB/8=16kB的VE。

1写入16kB时,会写入第一个16kB,

2覆盖16kB时,第一个16kB将被标记为“脏”,第二个16kB将被使用。

三。等等。。。。当覆盖16kB 8次时,所有128kB都将变脏。

4如果9次覆盖16kB呢?所有的闪光灯都很脏。谁将负责删除以前脏的8 16kB?我要把整个闪存擦掉还是自己处理?

如果SDK处理所有擦除。这是否意味着我可以覆盖16kB的次数,因为它是在闪存擦除限制?如果是这样的话,我会在16kB的VES闪存上写一个环形缓冲区,以便继续向其中写入打印日志。

希望这能解释清楚。

谢谢您。

PM\U对话框
离线
最后一次见到:2天20小时前
工作人员
已加入:2018-02-08 11:03
你好,

你好,

对于日志数据,我们强烈建议使用日志分区–不应使用VES。NVMS\u GENERIC\u PART条目用于存储通用数据,例如绑定数据。它不应用于记录数据。为什么不增加日志分区来存储日志数据呢?

谢谢,下午好

安道尔M2013
离线
最后一次见到:2个月1周前
已加入:2017-04-07 05:11
嗨,PM\U对话,

嗨,PM\U对话,

谢谢你的回复。我们的产品已经交付给顾客了。增加日志分区不是索塔能做到的,是吗?所以我们必须在当前(默认)的flash分区上进行操作。

我在project中搜索了关键字“NVMS\u GENERIC\u PART”,它根本没有被使用。如果在通用部件中的所有可用空间都已写入之后,VES驱动程序将处理擦除任务。我想可以储存原木,是吗?

谢谢您。

安道尔M2013
离线
最后一次见到:2个月1周前
已加入:2017-04-07 05:11
嗨,PM\U对话,

嗨,PM\U对话,

顺便问一下,请问您上面提到的“绑定数据”是什么?我可以参考一下源代码中的某个地方吗?

谢谢您。

PM\U对话框
离线
最后一次见到:2天20小时前
工作人员
已加入:2018-02-08 11:03
您好,M2013,

您好,M2013,

一般来说,在SUOTA期间修改分区是我们强烈不推荐的,特别是当它是一个产品时。

如果没有任何其他分区被更改(相同的地址和相同的长度),并且没有任何重叠,那么只增加日志分区是可能的。换句话说,如果在日志分区的末尾有一个空的flash间隔,那么可以通过SUOTA来增加它。但是,在这种情况下,您必须在启动期间编写自己的代码,以便擦除以前的分区。这不是直接的实现,也不推荐。

在通用零件的情况下,它被标记为VES,应该用于一小部分日期。这个分区由BLE管理器访问,并包含所有与BLE相关的信息。如果它用于日志记录,那么访问数据的速度将非常慢。

关于最后一个问题,请参阅以下用户指南的第7节:

//www.xmece.com/sites/default/files/um-b-044-da1468x\u软件\u平台\u参考\u 6v0.pdf

谢谢,下午好