From 8942c4d34116704bcfde96a1a10d11cbdb808f83 Mon Sep 17 00:00:00 2001 From: jzlv Date: Fri, 18 Nov 2022 17:05:26 +0800 Subject: [PATCH] [feat][flash] add flash read write demo --- drivers/lhal/src/bflb_l1c.c | 11 ++-- .../flash_secure_read_write/CMakeLists.txt | 9 ++++ .../Makefile | 0 .../main.c | 0 .../proj.conf | 0 .../CMakeLists.txt | 2 +- .../flash/flash_xip_read_write/Makefile | 13 +++++ .../flash/flash_xip_read_write/main.c | 51 +++++++++++++++++++ .../flash/flash_xip_read_write/proj.conf | 1 + 9 files changed, 80 insertions(+), 7 deletions(-) create mode 100644 examples/peripherals/flash/flash_secure_read_write/CMakeLists.txt rename examples/peripherals/flash/{flash_secure_read => flash_secure_read_write}/Makefile (100%) rename examples/peripherals/flash/{flash_secure_read => flash_secure_read_write}/main.c (100%) rename examples/peripherals/flash/{flash_secure_read => flash_secure_read_write}/proj.conf (100%) rename examples/peripherals/flash/{flash_secure_read => flash_xip_read_write}/CMakeLists.txt (82%) create mode 100644 examples/peripherals/flash/flash_xip_read_write/Makefile create mode 100644 examples/peripherals/flash/flash_xip_read_write/main.c create mode 100644 examples/peripherals/flash/flash_xip_read_write/proj.conf diff --git a/drivers/lhal/src/bflb_l1c.c b/drivers/lhal/src/bflb_l1c.c index a6e1a6fb..b7fd6e35 100644 --- a/drivers/lhal/src/bflb_l1c.c +++ b/drivers/lhal/src/bflb_l1c.c @@ -70,9 +70,8 @@ void bflb_l1c_icache_disable(void) L1C_Cache_Enable_Set(0x0f); } -ATTR_TCM_SECTION void bflb_l1c_icache_invalid_all(void) +void bflb_l1c_icache_invalid_all(void) { - L1C_Cache_Flush(); } void bflb_l1c_dcache_enable(void) @@ -89,21 +88,21 @@ void bflb_l1c_dcache_clean_all(void) void bflb_l1c_dcache_invalidate_all(void) { + L1C_Cache_Flush(); } void bflb_l1c_dcache_clean_invalidate_all(void) { + L1C_Cache_Flush(); } void bflb_l1c_dcache_clean_range(void *addr, uint32_t size) { } -void bflb_l1c_dcache_invalidate_range(void *addr, uint32_t size) +ATTR_TCM_SECTION void bflb_l1c_dcache_invalidate_range(void *addr, uint32_t size) { + L1C_Cache_Flush(); } -void bflb_l1c_dcache_clean_invalidate_range(void *addr, uint32_t size) -{ -} #endif \ No newline at end of file diff --git a/examples/peripherals/flash/flash_secure_read_write/CMakeLists.txt b/examples/peripherals/flash/flash_secure_read_write/CMakeLists.txt new file mode 100644 index 00000000..281caa5f --- /dev/null +++ b/examples/peripherals/flash/flash_secure_read_write/CMakeLists.txt @@ -0,0 +1,9 @@ +cmake_minimum_required(VERSION 3.15) + +include(proj.conf) + +find_package(bouffalo_sdk REQUIRED HINTS $ENV{BL_SDK_BASE}) + +sdk_set_main_file(main.c) + +project(flash_secure_read_write) diff --git a/examples/peripherals/flash/flash_secure_read/Makefile b/examples/peripherals/flash/flash_secure_read_write/Makefile similarity index 100% rename from examples/peripherals/flash/flash_secure_read/Makefile rename to examples/peripherals/flash/flash_secure_read_write/Makefile diff --git a/examples/peripherals/flash/flash_secure_read/main.c b/examples/peripherals/flash/flash_secure_read_write/main.c similarity index 100% rename from examples/peripherals/flash/flash_secure_read/main.c rename to examples/peripherals/flash/flash_secure_read_write/main.c diff --git a/examples/peripherals/flash/flash_secure_read/proj.conf b/examples/peripherals/flash/flash_secure_read_write/proj.conf similarity index 100% rename from examples/peripherals/flash/flash_secure_read/proj.conf rename to examples/peripherals/flash/flash_secure_read_write/proj.conf diff --git a/examples/peripherals/flash/flash_secure_read/CMakeLists.txt b/examples/peripherals/flash/flash_xip_read_write/CMakeLists.txt similarity index 82% rename from examples/peripherals/flash/flash_secure_read/CMakeLists.txt rename to examples/peripherals/flash/flash_xip_read_write/CMakeLists.txt index 27f3a815..a4b4b087 100644 --- a/examples/peripherals/flash/flash_secure_read/CMakeLists.txt +++ b/examples/peripherals/flash/flash_xip_read_write/CMakeLists.txt @@ -6,4 +6,4 @@ find_package(bouffalo_sdk REQUIRED HINTS $ENV{BL_SDK_BASE}) sdk_set_main_file(main.c) -project(flash_secure_read) +project(flash_xip_read_write) diff --git a/examples/peripherals/flash/flash_xip_read_write/Makefile b/examples/peripherals/flash/flash_xip_read_write/Makefile new file mode 100644 index 00000000..44367c02 --- /dev/null +++ b/examples/peripherals/flash/flash_xip_read_write/Makefile @@ -0,0 +1,13 @@ +SDK_DEMO_PATH ?= . +BL_SDK_BASE ?= $(SDK_DEMO_PATH)/../../../.. + +export BL_SDK_BASE + +CHIP ?= bl616 +BOARD ?= bl616dk +CROSS_COMPILE ?= riscv64-unknown-elf- + +# add custom cmake definition +#cmake_definition+=-Dxxx=sss + +include $(BL_SDK_BASE)/project.build diff --git a/examples/peripherals/flash/flash_xip_read_write/main.c b/examples/peripherals/flash/flash_xip_read_write/main.c new file mode 100644 index 00000000..8ab6145f --- /dev/null +++ b/examples/peripherals/flash/flash_xip_read_write/main.c @@ -0,0 +1,51 @@ +#include "bflb_flash.h" +#include "bflb_l1c.h" +#include "board.h" + +#define FLASH_TEST_SIZE 1 * 1024 * 1024 + +int main(void) +{ + board_init(); + + uint8_t write_buf[256]; + uint8_t *read_buf; + + for (uint16_t i = 0; i < 256; i++) { + write_buf[i] = i; + } + + for (uint32_t i = 1; i < (FLASH_TEST_SIZE / 1024); i++) { + printf("test addr:%08x\r\n", (0x00010000 + (i - 1) * 1024)); + /* erase 0x00010000 4k flash */ + bflb_flash_erase(0x00010000 + (i - 1) * 1024, i * 1024); + + /* read 0x00010000 flash data */ + read_buf = (uint8_t *)(FLASH_XIP_BASE - 0x2000 + 0x00010000 + (i - 1) * 1024); + bflb_l1c_dcache_invalidate_range(read_buf, 256); + for (uint16_t j = 0; j < 256; j++) { + if (read_buf[j] != 0xff) { + printf("flash test1 fail at %d, expect:%d but with %d\r\n", j, 0xff, read_buf[j]); + while (1) { + } + } + } + /* write 0x00010000 flash data */ + bflb_flash_write(0x00010000 + (i - 1) * 1024, write_buf, sizeof(write_buf)); + + /* read 0x00010000 flash data */ + read_buf = (uint8_t *)(FLASH_XIP_BASE - 0x2000 + 0x00010000 + (i - 1) * 1024); + bflb_l1c_dcache_invalidate_range(read_buf, 256); + for (uint16_t j = 0; j < 256; j++) { + if (read_buf[j] != write_buf[j]) { + printf("flash test2 fail at %d, expect:%d but with %d\r\n", j, write_buf[j], read_buf[j]); + while (1) { + } + } + } + } + + printf("flash test success\r\n"); + while (1) { + } +} \ No newline at end of file diff --git a/examples/peripherals/flash/flash_xip_read_write/proj.conf b/examples/peripherals/flash/flash_xip_read_write/proj.conf new file mode 100644 index 00000000..13320d67 --- /dev/null +++ b/examples/peripherals/flash/flash_xip_read_write/proj.conf @@ -0,0 +1 @@ +#set(CONFIG_XXX 1) \ No newline at end of file