|
17 | 17 | #include <stdio.h> |
18 | 18 | #include <stdlib.h> |
19 | 19 | #include <string.h> |
| 20 | +#include "esp_log.h" |
20 | 21 |
|
21 | | -Flash_Emulator::Flash_Emulator(size_t size, size_t sector_sise) |
| 22 | +static const char *TAG = "Flash_Emulator"; |
| 23 | + |
| 24 | +Flash_Emulator::Flash_Emulator(size_t size, size_t sector_sise, size_t min_size) |
22 | 25 | { |
23 | 26 | this->reset_count = 0x7fffffff; |
24 | 27 | this->size = size; |
25 | 28 | this->sector_sise = sector_sise; |
| 29 | + this->min_size = min_size; |
26 | 30 | this->buff = (uint8_t *)malloc(this->size); |
27 | 31 | this->access_count = new uint32_t[this->size / this->sector_sise]; |
28 | 32 | memset(this->access_count, 0, this->size / this->sector_sise * sizeof(uint32_t)); |
@@ -81,6 +85,18 @@ esp_err_t Flash_Emulator::erase_range(size_t start_address, size_t size) |
81 | 85 | esp_err_t Flash_Emulator::write(size_t dest_addr, const void *src, size_t size) |
82 | 86 | { |
83 | 87 | esp_err_t result = ESP_OK; |
| 88 | + if ((size % this->min_size) != 0) |
| 89 | + { |
| 90 | + result = ESP_ERR_INVALID_SIZE; |
| 91 | + ESP_LOGE(TAG, "%s - wrond size, result=%08x, size=%08x", __func__, result, size); |
| 92 | + return result; |
| 93 | + } |
| 94 | + if ((dest_addr % this->min_size) != 0) |
| 95 | + { |
| 96 | + result = ESP_ERR_INVALID_SIZE; |
| 97 | + ESP_LOGE(TAG, "%s - wrong address, result=%08x, address=%08x", __func__, result, dest_addr); |
| 98 | + return result; |
| 99 | + } |
84 | 100 | if ((this->reset_count != 0x7fffffff) && (this->reset_count != 0)) { |
85 | 101 | this->reset_count--; |
86 | 102 | } |
|
0 commit comments