+ uint8_t verify_buf[CHUNCK_SIZE];
+ while (size)
+ {
+ block_idx_t idx = addr / eep->blk.blk_size;
+ size_t offset = addr % eep->blk.blk_size;
+ size_t count = MIN(size, (size_t)CHUNCK_SIZE);
+
+ size_t ret_len = eep->blk.priv.vt->readDirect((KBlock *)eep, idx, verify_buf, offset, count);
+
+ if (ret_len != count)
+ {
+ LOG_ERR("Verify read fail.\n");
+ return false;
+ }
+
+ if (memcmp(buf, verify_buf, ret_len) != 0)
+ {
+ LOG_ERR("Data mismatch!\n");
+ return false;
+ }
+
+ size -= ret_len;
+ addr += ret_len;
+ buf = ((const char *)buf) + ret_len;
+ }
+ return true;
+}
+
+
+static size_t eeprom_write(KBlock *blk, block_idx_t idx, const void *buf, size_t offset, size_t size)
+{
+ Eeprom *eep = EEPROM_CAST_KBLOCK(blk);