嗨,对话框,
我想知道当我写入太多时间进入ves时会发生什么。例如,假设vespartition_entry_size / ad_nvms_ves_multiplier = 128/8 = 16 kbytes。将16KB数据写入其中8次后,将拍摄所有空间。如果我写了超过8次怎么办?在写第9个16kb之前,我应该擦除整体VES 128KB闪光吗?
谢谢你。
嗨andoridfm2013,
请参阅第2.4.2节。ves在闪存适配器概念教程。根据他的教程:
VES驱动器提供访问分区入口电源故障和佩戴保护。为了实现这一点,VES驱动程序将数据写入闪存中的随机位置,而不需要在同一位置被修改时擦除整个扇区。这是通过将同一用户提供的地址写入不同的flash位置来实现的。VES驱动程序提供了虚拟寻址,也就是说,在进行读写操作之前,用户指定的地址被转换为真实的flash位置。要做到这一点,flash的大小必须大于用户可见的寻址空间。一个常见的经验法则是所需的虚拟EEPROM大小的8倍。
使用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个字节。
存储在RAM中的容器分配表(CAT)用于跟踪有效容器的位置,扇区分配表(SAT)保存每个扇区的状态(%dirty, free)。容器的选择大小是CAT所需的RAM总量和每个扇区潜在的擦除周期数之间的权衡。容器的大小越小,占用的内存就越多。特别地,CAT中的每个条目由2个字节组成。因此,在我们这个12kbytes的虚拟EEPROM的例子中,计算被占用RAM的公式是:12288 / (64- 4)= 205 CAT条目= 205 * 2 = 410字节。
注意:只有在闪存中经常写入/修改的小块数据时,ves功能只应使用。如前所述,标记为VES的唯一区域是NVMS_GENERIC_PART分区条目。对话框提供的BLE持久存储机制使用此分区条目,因此,必须启用VES功能。否则,所有相关操作都将失败。
您能否说明您的要求以及您想要与VES完成的内容是什么?
谢谢,PM_DIALOG.
嗨pm_dialog,
感谢您的提示回复。我读了这一点闪存适配器概念。
我想保存错误打印日志到flash,以便android应用程序可以稍后阅读它,以检查为什么错误发生。
我们的android应用程序有时有BLE连接断开,重新连接也失败了,因为很难轻易重现这个问题(它每1~2周发生一次),所以我们不能在实验室用RS232打印测试它,而是试图在它发生后收集错误上下文。分区LOG_PART用于其他目的,所以我必须使用NVMS_GENERIC_PART。由于我们不知道问题发生的时间,在问题发生之前可能会保存大量打印日志,flash会不时被覆盖。
我理解VES机制是写入闪光的不同位置,避免经常擦除闪光,但是每个Flash扇区都会,无论是什么,有机会在长时间运行后写一次。当猫找不到从未写的任何地方会发生什么?
例如:有128kb / 8 = 16kb ves。
1.写入16KB时,写入16KB,
2.当覆盖16kB时,第一个16kB将被标记为'dirty',第二个16kB将被使用。
3.等等……当覆盖16kB 8次时,所有128kB都将是脏的。
4.如果在9次重写16KB,该怎么办?所有闪光都脏了。谁将负责擦除以前肮脏的8 16KB?我应该擦除整个VES闪光灯或SDK照顾吗?
如果SDK照顾所有擦除。这是否意味着我可以覆盖16KB,因为它在闪存擦除限制内有多次?如果是这种情况,我将在16kb ves闪存上写一个环形缓冲区,以将打印登录写入其中。
希望这能解释清楚。
你好呀,
对于日志记录数据,我们强烈建议使用日志分区 - 您不应该使用VES。nvms_generic_part条目用于存储诸如绑定数据的通用数据。它不应用于记录数据。为什么不增加日志分区以存储日志数据?
谢谢你的回复。我们的产品已经向客户提供。upota无法完成日志分区,可以吗?因此,我们必须在当前操作(默认)闪存分区。
我在项目中搜索关键字“nvms_generic_part”,根本不使用它。如果VES驱动程序将在泛型部分的所有可用空间写入后处理擦除任务。我认为存储日志应该是可以的吗?
顺便问一下,你上面提到的“粘合数据”是什么?它是我可以参考的源代码的某处吗?
一般来说,我们强烈不建议在SUOTA期间修改分区,特别是如果它是一个产品的话。
增加ONLY the LOG分区是可能的,如果任何其他分区没有改变(相同的地址和长度),如果没有任何重叠。换句话说,如果在LOG分区的末尾有一个空的flash间隙,那么可以通过执行SUOTA来增加它。但是,在这种情况下,您必须在启动时编写自己的代码,以便删除以前的分区。这不是直接的实现,不推荐使用。
在通用部分的情况下,这被标记为VES,应该用于日期的小块。该分区由BLE管理器访问,并包括所有相关信息。如果它用于日志记录,则访问数据将非常慢。
关于你的最后一个问题,请参阅以下用户指南第七节:
https://www.dialog-seminile.com/sites/default/files/um-b-044-da1468x_software_platform_reference_6v0.pdf.
嗨andoridfm2013,
请参阅第2.4.2节。ves在闪存适配器概念教程。根据他的教程:
VES驱动器提供访问分区入口电源故障和佩戴保护。为了实现这一点,VES驱动程序将数据写入闪存中的随机位置,而不需要在同一位置被修改时擦除整个扇区。这是通过将同一用户提供的地址写入不同的flash位置来实现的。VES驱动程序提供了虚拟寻址,也就是说,在进行读写操作之前,用户指定的地址被转换为真实的flash位置。要做到这一点,flash的大小必须大于用户可见的寻址空间。一个常见的经验法则是所需的虚拟EEPROM大小的8倍。
使用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个字节。
存储在RAM中的容器分配表(CAT)用于跟踪有效容器的位置,扇区分配表(SAT)保存每个扇区的状态(%dirty, free)。容器的选择大小是CAT所需的RAM总量和每个扇区潜在的擦除周期数之间的权衡。容器的大小越小,占用的内存就越多。特别地,CAT中的每个条目由2个字节组成。因此,在我们这个12kbytes的虚拟EEPROM的例子中,计算被占用RAM的公式是:12288 / (64- 4)= 205 CAT条目= 205 * 2 = 410字节。
注意:只有在闪存中经常写入/修改的小块数据时,ves功能只应使用。如前所述,标记为VES的唯一区域是NVMS_GENERIC_PART分区条目。对话框提供的BLE持久存储机制使用此分区条目,因此,必须启用VES功能。否则,所有相关操作都将失败。
您能否说明您的要求以及您想要与VES完成的内容是什么?
谢谢,PM_DIALOG.
嗨pm_dialog,
感谢您的提示回复。我读了这一点闪存适配器概念。
我想保存错误打印日志到flash,以便android应用程序可以稍后阅读它,以检查为什么错误发生。
我们的android应用程序有时有BLE连接断开,重新连接也失败了,因为很难轻易重现这个问题(它每1~2周发生一次),所以我们不能在实验室用RS232打印测试它,而是试图在它发生后收集错误上下文。分区LOG_PART用于其他目的,所以我必须使用NVMS_GENERIC_PART。由于我们不知道问题发生的时间,在问题发生之前可能会保存大量打印日志,flash会不时被覆盖。
我理解VES机制是写入闪光的不同位置,避免经常擦除闪光,但是每个Flash扇区都会,无论是什么,有机会在长时间运行后写一次。当猫找不到从未写的任何地方会发生什么?
例如:有128kb / 8 = 16kb ves。
1.写入16KB时,写入16KB,
2.当覆盖16kB时,第一个16kB将被标记为'dirty',第二个16kB将被使用。
3.等等……当覆盖16kB 8次时,所有128kB都将是脏的。
4.如果在9次重写16KB,该怎么办?所有闪光都脏了。谁将负责擦除以前肮脏的8 16KB?我应该擦除整个VES闪光灯或SDK照顾吗?
如果SDK照顾所有擦除。这是否意味着我可以覆盖16KB,因为它在闪存擦除限制内有多次?如果是这种情况,我将在16kb ves闪存上写一个环形缓冲区,以将打印登录写入其中。
希望这能解释清楚。
谢谢你。
你好呀,
对于日志记录数据,我们强烈建议使用日志分区 - 您不应该使用VES。nvms_generic_part条目用于存储诸如绑定数据的通用数据。它不应用于记录数据。为什么不增加日志分区以存储日志数据?
谢谢,PM_DIALOG.
嗨pm_dialog,
谢谢你的回复。我们的产品已经向客户提供。upota无法完成日志分区,可以吗?因此,我们必须在当前操作(默认)闪存分区。
我在项目中搜索关键字“nvms_generic_part”,根本不使用它。如果VES驱动程序将在泛型部分的所有可用空间写入后处理擦除任务。我认为存储日志应该是可以的吗?
谢谢你。
嗨pm_dialog,
顺便问一下,你上面提到的“粘合数据”是什么?它是我可以参考的源代码的某处吗?
谢谢你。
嗨andoridfm2013,
一般来说,我们强烈不建议在SUOTA期间修改分区,特别是如果它是一个产品的话。
增加ONLY the LOG分区是可能的,如果任何其他分区没有改变(相同的地址和长度),如果没有任何重叠。换句话说,如果在LOG分区的末尾有一个空的flash间隙,那么可以通过执行SUOTA来增加它。但是,在这种情况下,您必须在启动时编写自己的代码,以便删除以前的分区。这不是直接的实现,不推荐使用。
在通用部分的情况下,这被标记为VES,应该用于日期的小块。该分区由BLE管理器访问,并包括所有相关信息。如果它用于日志记录,则访问数据将非常慢。
关于你的最后一个问题,请参阅以下用户指南第七节:
https://www.dialog-seminile.com/sites/default/files/um-b-044-da1468x_software_platform_reference_6v0.pdf.
谢谢,PM_DIALOG.