+ uint8_t tmp[CHUNCK_SIZE] = { [0 ... (CHUNCK_SIZE - 1)] = 0xFF };
+
+ while (size)
+ {
+ block_idx_t idx = addr / eep->blk.blk_size;
+ size_t offset = addr % eep->blk.blk_size;
+ size_t count = MIN(size, (e2_size_t)CHUNCK_SIZE);
+ size_t ret_len = eep->blk.priv.vt->writeDirect((KBlock *)eep, idx, tmp, offset, count);
+ size -= ret_len;
+ addr += ret_len;
+
+ if (ret_len != count)
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Verify EEPROM.
+ * \param eep is the Kblock context.
+ * \param addr eeprom address where start to verify.
+ * \param buf buffer of data to compare with eeprom data read.
+ * \param size number of byte to verify.
+ */
+bool eeprom_verify(Eeprom *eep, e2addr_t addr, const void *buf, size_t size)
+{
+ 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);