blob: 41f542b83b414c1354a9d7be0b6f822e5cfe45f5 [file] [log] [blame]
/*
* Copyright (c) 2022 Espressif Systems (Shanghai) Co., Ltd.
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/kernel.h>
#include <zephyr/sys/printk.h>
#include <zephyr/device.h>
#include <zephyr/drivers/flash.h>
#include <zephyr/storage/flash_map.h>
#include <esp_spi_flash.h>
#include <soc.h>
#include <zephyr/logging/log.h>
LOG_MODULE_REGISTER(flash_encryption, CONFIG_LOG_DEFAULT_LEVEL);
#if !defined(CONFIG_SOC_ESP32)
#error Flash encryption feature is only available for ESP32 SOC yet.
#endif
void main(void)
{
uint8_t buffer[32];
const struct device *flash_device;
off_t address = FIXED_PARTITION_OFFSET(storage_partition);
flash_device = DEVICE_DT_GET(DT_CHOSEN(zephyr_flash_controller));
if (!device_is_ready(flash_device)) {
printk("%s: device not ready.\n", flash_device->name);
return;
}
for (int k = 0; k < 32; k++) {
buffer[k] = k;
}
LOG_HEXDUMP_INF(buffer, sizeof(buffer), "WRITE BUFFER CONTENT");
/* erase flash content */
flash_erase(flash_device, address, 4096);
/* this writes encrypted data into flash */
flash_write(flash_device, address, &buffer, sizeof(buffer));
/* read flash content without decrypting content */
memset(buffer, 0, sizeof(buffer));
spi_flash_read(address, &buffer, sizeof(buffer));
LOG_HEXDUMP_INF(buffer, sizeof(buffer), "FLASH RAW DATA (Encrypted)");
/* read flash content and decrypt */
memset(buffer, 0, sizeof(buffer));
flash_read(flash_device, address, &buffer, sizeof(buffer));
LOG_HEXDUMP_INF(buffer, sizeof(buffer), "FLASH DECRYPTED DATA");
}