写出超过8次才能闪光?

学到更多常见问题解答教程

7个帖子/ 0新
最后一篇
andoridfm2013
离线
最后一次露面:2个月3周前
加入:2017-04-07 05:11
写出超过8次才能闪光?

嗨,对话框,

我想知道当我写入太多时间进入ves时会发生什么。例如,假设vespartition_entry_size / ad_nvms_ves_multiplier = 128/8 = 16 kbytes。将16KB数据写入其中8次后,将拍摄所有空间。如果我写了超过8次怎么办?在写第9个16kb之前,我应该擦除整体VES 128KB闪光吗?

谢谢你。

设备:
PM_DIALOG.
离线
最后一次露面:12小时19分钟前
职员
加入:2018-02-08 11:03
嗨andoridfm2013,

嗨andoridfm2013,

请参阅第2.4.2节。ves在闪存适配器概念tutorial. According to he tutorial :

VES drivers provide access to a partition entry with power failure and wearing protection. To achieve this, VES drivers write data to random locations within the flash without needing to erase a whole sector when the same location is modified. This is accomplished by writing to different flash locations for the same user provided address. The VES driver provides virtual addressing, that is, the user specified address is translated to a real flash location before a read or write operation. For this to work, the flash size must be bigger than the addressing space visible to the user. A common rule of thumb is 8x the virtual EEPROM size needed.

使用ad_nvms_ves_multiplier宏在SDK中使用此规则,在AD_NVMS_VES.H标题文件中找到。特别是,对于1 MB的闪存模型,通用分区为128 kbytes(0x20000),因此虚拟地址空间周围:

partition_entry_size / ad_nvms_ves_multiplier = 128/8 = 16 kbytes。

另外,闪光扇区被分成多个容器,其中每个容器保持一系列虚拟EEPROM地址的数据。容器的大小是在2N字节中可配置的编译时间,默认情况下,使用AD_NVMS_VES.H中的AD_NVMS_VES_CONTAINER_SIZE宏将默认配置为64个字节。

A Container Allocation Table (CAT) stored in RAM, is used for tracking where valid containers are located and a Sector Allocation Table (SAT) holds the status (%dirty, free) of each sector. The selected size for a container is a trade-off between the amount of RAM needed for the CAT and the potential number of erase cycles per sector. The smaller the size of a container, the more RAM is occupied. In particular, each entry in the CAT consists of 2 bytes. Hence, in our case for the 12 kBytes of virtual EEPROM, the formula for calculating the occupied RAM is: 12288 / (64- 4) = 205 CAT entries = 205 * 2 = 410 bytes.

注意:只有在闪存中经常写入/修改的小块数据时,ves功能只应使用。如前所述,标记为VES的唯一区域是NVMS_GENERIC_PART分区条目。对话框提供的BLE持久存储机制使用此分区条目,因此,必须启用VES功能。否则,所有相关操作都将失败。

您能否说明您的要求以及您想要与VES完成的内容是什么?

谢谢,PM_DIALOG.

andoridfm2013
离线
最后一次露面:2个月3周前
加入:2017-04-07 05:11
嗨pm_dialog,

嗨pm_dialog,

感谢您的提示回复。我读了这一点闪存适配器概念

I want to save error print log into flash so that android app can read it later to check why error happened.

Our android app sometimes has BLE connection broken and reconnecting also failed and as it is hard to reproduce the issue easily (it happend once every 1~2 week) so we cannot test it with RS232 print in lab but rather to try to collect error context after it happened. the partion LOG_PART is used for other prupose so i have to use NVMS_GENERIC_PART。 Since we don't know when the issue happens, there could be a lot of print log saved before the issue happens and the flash will be overwriten from time to time.

我理解VES机制是写入闪光的不同位置,避免经常擦除闪光,但是每个Flash扇区都会,无论是什么,有机会在长时间运行后写一次。当猫找不到从未写的任何地方会发生什么?

例如:有128kb / 8 = 16kb ves。

1.写入16KB时,写入16KB,

2.当覆盖16 kb, 1日16 kb将marked as 'dirty' and the 2nd 16kB will be used.

3.依此类推......当覆盖16KB的8次时,所有128KB都将脏。

4.如果在9次重写16KB,该怎么办?所有闪光都脏了。谁将负责擦除以前肮脏的8 16KB?我应该擦除整个VES闪光灯或SDK照顾吗?

如果SDK照顾所有擦除。这是否意味着我可以覆盖16KB,因为它在闪存擦除限制内有多次?如果是这种情况,我将在16kb ves闪存上写一个环形缓冲区,以将打印登录写入其中。

hopefully that explains clearly.

谢谢你。

PM_DIALOG.
离线
最后一次露面:12小时19分钟前
职员
加入:2018-02-08 11:03
你好呀,

你好呀,

对于日志记录数据,我们强烈建议使用日志分区 - 您不应该使用VES。nvms_generic_part条目用于存储诸如绑定数据的通用数据。它不应用于记录数据。为什么不增加日志分区以存储日志数据?

谢谢,PM_DIALOG.

andoridfm2013
离线
最后一次露面:2个月3周前
加入:2017-04-07 05:11
嗨pm_dialog,

嗨pm_dialog,

谢谢你的回复。我们的产品已经向客户提供。upota无法完成日志分区,可以吗?因此,我们必须在当前操作(默认)闪存分区。

我在项目中搜索关键字“nvms_generic_part”,根本不使用它。如果VES驱动程序将在泛型部分的所有可用空间写入后处理擦除任务。我认为存储日志应该是可以的吗?

谢谢你。

andoridfm2013
离线
最后一次露面:2个月3周前
加入:2017-04-07 05:11
嗨pm_dialog,

嗨pm_dialog,

顺便问一下,你上面提到的“粘合数据”是什么?它是我可以参考的源代码的某处吗?

谢谢你。

PM_DIALOG.
离线
最后一次露面:12小时19分钟前
职员
加入:2018-02-08 11:03
嗨andoridfm2013,

嗨andoridfm2013,

Generally, modifying the partitioning during SUOTA is something that we strongly NOT recommend especially if it is a product.

只有日志分区增加,如果任何其他分区没有更改(相同的地址和相同的长度),如果不是任何重叠。换句话说,如果日志分区末尾存在空闪存间隙,则可能通过执行拟议来增加它。但是,在这种情况下,您必须在启动期间编写自己的代码,以便删除先前的分区。这不是直接的实施,不建议。

在通用部分的情况下,这被标记为VES,应该用于日期的小块。该分区由BLE管理器访问,并包括所有相关信息。如果它用于日志记录,则访问数据将非常慢。

Regarding your last question, please see section 7 in the following user guide:

https://www.dialog-seminile.com/sites/default/files/um-b-044-da1468x_software_platform_reference_6v0.pdf.

谢谢,PM_DIALOG.