在ESP32中,`esp_partition_erase_range()`函数确实要求偏移offset与大小size必须对齐4KByte,即整片扇区擦除。这是由于Flash存储器的物理特性决定的。然而,您的需求是每次只擦除128Byte,这在硬件层面上是不允许的。但是,您可以通过以下方法实现类似的效果:
1. **使用软件层面的逻辑扇区**:您可以将一个4KB的物理扇区划分为多个128B的逻辑扇区。这样,您可以在软件层面上管理这些逻辑扇区,实现每次只擦除128B的需求。
2. **数据结构设计**:在每个128B的逻辑扇区内,您可以设计一个数据结构,例如:
```
struct Entry {
uint8_t data[128];
bool is_valid;
};
```
其中`is_valid`用于标记该条目是否有效。当您需要修改某条名单时,可以先检查`is_valid`标志,如果为`true`,则先擦除整个4KB物理扇区,然后重新写入所有有效的条目,最后修改目标条目。
3. **写入操作**:当您需要写入新的条目时,可以在逻辑扇区内寻找一个`is_valid`为`false`的位置,写入数据,并将`is_valid`设置为`true`。如果逻辑扇区内没有可用空间,您需要擦除整个4KB物理扇区,然后重新写入所有有效的条目。
4. **擦除操作**:在需要修改某条名单时,您可以先找到该条目所在的逻辑扇区,然后擦除整个4KB物理扇区。在擦除后,重新写入所有有效的条目,最后修改目标条目。
5. **注意事项**:这种方法可能会导致写入放大(每次修改都需要擦除整个4KB扇区),从而影响Flash的寿命。因此,在设计系统时,需要权衡性能和Flash寿命。
总之,虽然硬件层面上无法实现每次只擦除128Byte,但通过软件层面的逻辑扇区管理和数据结构设计,您可以实现类似的功能。请注意,这种方法可能会影响Flash的寿命,因此在实际应用中需要权衡利弊。
在ESP32中,`esp_partition_erase_range()`函数确实要求偏移offset与大小size必须对齐4KByte,即整片扇区擦除。这是由于Flash存储器的物理特性决定的。然而,您的需求是每次只擦除128Byte,这在硬件层面上是不允许的。但是,您可以通过以下方法实现类似的效果:
1. **使用软件层面的逻辑扇区**:您可以将一个4KB的物理扇区划分为多个128B的逻辑扇区。这样,您可以在软件层面上管理这些逻辑扇区,实现每次只擦除128B的需求。
2. **数据结构设计**:在每个128B的逻辑扇区内,您可以设计一个数据结构,例如:
```
struct Entry {
uint8_t data[128];
bool is_valid;
};
```
其中`is_valid`用于标记该条目是否有效。当您需要修改某条名单时,可以先检查`is_valid`标志,如果为`true`,则先擦除整个4KB物理扇区,然后重新写入所有有效的条目,最后修改目标条目。
3. **写入操作**:当您需要写入新的条目时,可以在逻辑扇区内寻找一个`is_valid`为`false`的位置,写入数据,并将`is_valid`设置为`true`。如果逻辑扇区内没有可用空间,您需要擦除整个4KB物理扇区,然后重新写入所有有效的条目。
4. **擦除操作**:在需要修改某条名单时,您可以先找到该条目所在的逻辑扇区,然后擦除整个4KB物理扇区。在擦除后,重新写入所有有效的条目,最后修改目标条目。
5. **注意事项**:这种方法可能会导致写入放大(每次修改都需要擦除整个4KB扇区),从而影响Flash的寿命。因此,在设计系统时,需要权衡性能和Flash寿命。
总之,虽然硬件层面上无法实现每次只擦除128Byte,但通过软件层面的逻辑扇区管理和数据结构设计,您可以实现类似的功能。请注意,这种方法可能会影响Flash的寿命,因此在实际应用中需要权衡利弊。
举报