Adding a non-secure region in TF-M based in Zephyr on FRDM-RW612

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

Adding a non-secure region in TF-M based in Zephyr on FRDM-RW612

Adding a non-secure region in TF-M based in Zephyr on FRDM-RW612

Introduction

Trusted Firmware-M (TF-M) divides memory into secure and non-secure regions. This guide explains how to add a custom non-secure flash region for data import purposes. This is useful for testing or extending TF-M functionality on platforms like FRDM-RW612.

This guide is using el2go_import_blob on frdmrw612//ns as a base example. You may use any TFM based example.  Imported as a freestanding application using VSCode. 

Sabina_Bruce_1-1762876315172.png

The initial two steps add a macro in order to easily add a #ifdef statement in the code in case you'd like to toggle the region on/off. TFM does not use the traditional Zephyr kConfig, so it is necessary to follow the steps to ensure the macro is defined correctly. If you want to add the region without the #if statement, skip steps 1-2. Make sure to remove #ifdef TFM_CUSTOM_DATA_IMPORT_REGION #endif from steps 3-5.

1. Enable the Feature via Configuration

File: el2go_import_blob/Kconfig

config TFM_CUSTOM_DATA_IMPORT_REGION
    bool "Enable custom flash area for testing"
    help
      Validate non-secure region in flash.

File: el2go_import_blob/prj.conf

CONFIG_TFM_CUSTOM_DATA_IMPORT_REGION=y

2. Update Build System to Pass the Flag

File: el2go_import_blob/CMakeLists.txt
Append the CMake option:

if(CONFIG_TFM_CUSTOM_DATA_IMPORT_REGION)
  set_property(TARGET zephyr_property_target APPEND PROPERTY TFM_CMAKE_OPTIONS
    -DUSE_TFM_CUSTOM_DATA_IMPORT_REGION=ON
  )
endif()

File: platform/ext/target/nxp/frdmrw612/config.cmake
Add the flag:

set(USE_TFM_CUSTOM_DATA_IMPORT_REGION OFF CACHE BOOL "")

File: platform/ext/target/nxp/frdmrw612/CMakeLists.txt
Add compile definition:

if (USE_TFM_CUSTOM_DATA_IMPORT_REGION)
  set(TFM_CUSTOM_DATA_IMPORT_REGION_COMPILE_DEFINITION "TFM_CUSTOM_DATA_IMPORT_REGION")
endif()

target_compile_definitions(psa_interface INTERFACE
  ${TFM_CUSTOM_DATA_IMPORT_REGION_COMPILE_DEFINITION}
)

3. Define the Flash Region

File: platform/ext/target/nxp/frdmrw612/partition/flash_layout.h
Define address and size:

#ifdef TFM_CUSTOM_DATA_IMPORT_REGION
#define TFM_CUSTOM_NS_REGION_ADDR  (0x08500000)
#define TFM_CUSTOM_NS_REGION_SIZE  (0x00001000) // 4KB
#endif

File: platform/ext/target/nxp/frdmrw612/partition/region_defs.h
Map the region:

#ifdef TFM_CUSTOM_DATA_IMPORT_REGION
#define CUSTOM_NS_DATA_REGION_START (TFM_CUSTOM_NS_REGION_ADDR)
#define CUSTOM_NS_DATA_REGION_SIZE  (TFM_CUSTOM_NS_REGION_SIZE)
#endif

4. Update Linker Script

File: platform/ext/target/nxp/common/gcc/tfm_common_s.ld
Add region base declaration:

#ifdef TFM_CUSTOM_DATA_IMPORT_REGION
  Load$$LR$$LR_CUSTOM_DATA_IMPORT_REGION$$Base = CUSTOM_NS_DATA_REGION_START;
#endif

 

5. Declare and Initialize Region in Code

File: platform/ext/target/nxp/common/target_cfg_common.h
Add to memory region struct:

#ifdef TFM_CUSTOM_DATA_IMPORT_REGION
uint32_t custom_ns_data_region_base;
uint32_t custom_ns_data_region_limit;
#endif

File: platform/ext/target/nxp/common/tfm_hal_platform.c
Initialize region limits:

#ifdef TFM_CUSTOM_DATA_IMPORT_REGION
REGION_DECLARE(Load$$LR$$, LR_CUSTOM_DATA_IMPORT_REGION, $$Base);
#endif // TFM_CUSTOM_DATA_IMPORT_REGION


#ifdef TFM_CUSTOM_DATA_IMPORT_REGION
    .custom_ns_data_region_base   =
        (uint32_t)&REGION_NAME(Load$$LR$$, LR_CUSTOM_DATA_IMPORT_REGION, $$Base),
    .custom_ns_data_region_limit  =
        (uint32_t)&REGION_NAME(Load$$LR$$, LR_CUSTOM_DATA_IMPORT_REGION, $$Base) + CUSTOM_NS_DATA_REGION_SIZE - 1,
#endif // TFM_CUSTOM_DATA_IMPORT_REGION

File: platform/ext/target/nxp/common/tfm_hal_isolation.c
Configure SAU:

#ifdef TFM_CUSTOM_DATA_IMPORT_REGION
SECURE_WRITE_REGISTER(&(SAU->RNR), 7U);
SAU->RBAR = (memory_regions.custom_ns_data_region_base & SAU_RBAR_BADDR_Msk);
SAU->RLAR = (memory_regions.custom_ns_data_region_limit & SAU_RLAR_LADDR_Msk) | SAU_RLAR_ENABLE_Msk;
#endif

File: platform/ext/target/nxp/frdmrw612/target_cfg.c
Configure MPC:

#ifdef TFM_CUSTOM_DATA_IMPORT_REGION
enable_mem_rule_for_partition(memory_regions.custom_ns_data_region_base, memory_regions.custom_ns_data_region_limit);
#endif

6. Update Device Tree Overlay

File: zephyr/samples/el2go_import_blob/frdm_rw612_rw612_ns.overlay
Add partition:

custom_ns_data: partition@500000 {
  label = "custom_ns_data";
  reg = <0x500000 0x1000>;
};

 

 

Let's test the region by erasing, writing and reading.

 

1. Enable the Zephyr flash

File: el2go_import_blob/prj.conf

 

CONFIG_FLASH=y

 

2. Add some test code to the main source file of the project. 

#include <zephyr/drivers/flash.h>
const struct device *flash_dev = DEVICE_DT_GET(DT_CHOSEN(zephyr_flash_controller));

static int test_flash_region(void) {
    uint32_t offset = 0x500000;
    uint32_t test_data = 0xDEADBEEF;
    uint32_t read_data;
    
    // 1. Erase flash (required before write)
    flash_erase(flash_dev, offset, 4096);
    
    // 2. Write data
    flash_write(flash_dev, offset, &test_data, sizeof(test_data));
    
    
    // 3. Read data (this can use memcpy function)
    memcpy(&read_data, (void *)0x08500000, sizeof(read_data));
    if (read_data == test_data) {
        LOG("✓ Flash test passed with memcpy: 0x%08x\n", read_data);
    } else {
        LOG("✗ Flash test failed\n");
    }

//Flash read operation will have fix to correctly calculate address next release
    /*flash_read(flash_dev, offset, &read_data, sizeof(read_data));
        if (read_data == test_data) {
        LOG("✓ Flash test passed with flash_read: 0x%08x\n", read_data);
    } else {
        LOG("✗ Flash test failed\n");
    }
    */
    return 0;
}

 

3. Call the test_flash_region() function from the main().

Sabina_Bruce_0-1762882779239.png

 

%3CLINGO-SUB%20id%3D%22lingo-sub-2202808%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3EFRDM-RW612%E4%B8%8A%E3%81%AEZephyr%E3%81%AB%E5%9F%BA%E3%81%A5%E3%81%8FTF-M%E3%81%AE%E9%9D%9E%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E9%A0%98%E5%9F%9F%E3%81%AE%E8%BF%BD%E5%8A%A0%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2202808%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CH1%20id%3D%22toc-hId-1296685085%22%20id%3D%22toc-hId-1297728763%22%3E%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB%3C%2FH1%3E%0A%3CP%3ETrusted%20Firmware-M%EF%BC%88TF-M%EF%BC%89%E3%81%AF%E3%80%81%E3%83%A1%E3%83%A2%E3%83%AA%E3%82%92%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E9%A0%98%E5%9F%9F%E3%81%A8%E9%9D%9E%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E9%A0%98%E5%9F%9F%E3%81%AB%E5%88%86%E5%89%B2%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%81%93%E3%81%AE%E3%82%AC%E3%82%A4%E3%83%89%E3%81%A7%E3%81%AF%E3%80%81%E3%83%87%E3%83%BC%E3%82%BF%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%E7%9B%AE%E7%9A%84%E3%81%A7%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E9%9D%9E%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%BB%E3%83%95%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E9%A0%98%E5%9F%9F%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%82%92%E8%AA%AC%E6%98%8E%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%81%93%E3%82%8C%E3%81%AF%E3%80%81FRDM-RW612%E3%81%AE%E3%82%88%E3%81%86%E3%81%AA%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%A7TF-M%E3%81%AE%E6%A9%9F%E8%83%BD%E3%82%92%E3%83%86%E3%82%B9%E3%83%88%E3%81%BE%E3%81%9F%E3%81%AF%E6%8B%A1%E5%BC%B5%E3%81%99%E3%82%8B%E9%9A%9B%E3%81%AB%E5%BD%B9%E7%AB%8B%E3%81%A1%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CP%3E%E3%81%93%E3%81%AE%E3%82%AC%E3%82%A4%E3%83%89%E3%81%A7%E3%81%AF%E3%80%81frdmrw612%2Fns%E4%B8%8A%E3%81%AEel2go_import_blob%E3%82%92%E4%BE%8B%E3%81%A8%E3%81%97%E3%81%A6%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%E4%BB%BB%E6%84%8F%E3%81%AETFM%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%82%82%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82VSCode%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%89%E3%82%A2%E3%83%AD%E3%83%B3%E3%83%BB%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A8%E3%81%97%E3%81%A6%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22Sabina_Bruce_1-1762876315172.png%22%20style%3D%22width%3A%20999px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22Sabina_Bruce_1-1762876315172.png%22%20style%3D%22width%3A%20817px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F364986i492ABE67C2F95F31%2Fimage-size%2Flarge%3Fv%3Dv2%26amp%3Bpx%3D999%22%20role%3D%22button%22%20title%3D%22Sabina_Bruce_1-1762876315172.png%22%20alt%3D%22Sabina_Bruce_1-1762876315172.png%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%E6%9C%80%E5%88%9D%E3%81%AE2%E3%81%A4%E3%81%AE%E6%89%8B%E9%A0%86%E3%81%A7%E3%81%AF%E3%80%81%E9%A0%98%E5%9F%9F%E3%81%AE%E3%82%AA%E3%83%B3%2F%E3%82%AA%E3%83%95%E3%82%92%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%81%9F%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AB%E3%80%81%E3%82%B3%E3%83%BC%E3%83%89%E5%86%85%E3%81%AB%E7%B0%A1%E5%8D%98%E3%81%AB%3CCODE%20translate%3D%22no%22%3E%23ifdef%3C%2FCODE%3E%E6%96%87%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%83%9E%E3%82%AF%E3%83%AD%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%97%E3%81%BE%E3%81%99%E3%80%82TFM%E3%81%AF%E5%BE%93%E6%9D%A5%E3%81%AEZephyr%20kConfig%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%80%81%E3%83%9E%E3%82%AF%E3%83%AD%E3%81%8C%E6%AD%A3%E3%81%97%E3%81%8F%E5%AE%9A%E7%BE%A9%E3%81%95%E3%82%8C%E3%82%8B%E3%82%88%E3%81%86%E6%89%8B%E9%A0%86%E3%81%AB%E5%BE%93%E3%81%86%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%23if%E6%96%87%E3%81%AA%E3%81%97%E3%81%A7%E9%A0%98%E5%9F%9F%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%97%E3%81%9F%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AF%E3%80%81%E6%89%8B%E9%A0%861%E3%80%9C2%E3%82%92%E3%82%B9%E3%82%AD%E3%83%83%E3%83%97%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%81%9D%E3%81%AE%E5%A0%B4%E5%90%88%E3%81%AF%E3%80%81%E6%89%8B%E9%A0%863%E3%80%9C5%E3%81%8B%E3%82%89%3CCODE%20translate%3D%22no%22%3E%23ifdef%20TFM_CUSTOM_DATA_IMPORT_REGION%20%23endif%3C%2FCODE%3E%E3%82%92%E5%BF%85%E3%81%9A%E5%89%8A%E9%99%A4%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%3C%2FP%3E%0A%3CH3%20id%3D%22toc-hId-190295200%22%20id%3D%22toc-hId-191338878%22%3E1.%20%E8%A8%AD%E5%AE%9A%E3%82%92%E9%80%9A%E3%81%98%E3%81%A6%E6%A9%9F%E8%83%BD%E3%82%92%E6%9C%89%E5%8A%B9%E5%8C%96%E3%81%99%E3%82%8B%3C%2FH3%3E%0A%3CP%3E%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%20%3CCODE%20translate%3D%22no%22%3Eel2go_import_blob%2FKconfig%3C%2FCODE%3E%3C%2FP%3E%0A%3CP%3E%3CSPAN%3E%3C!--ScriptorStartFragment--%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%3CLI-WRAPPER%3E%3C%2FLI-WRAPPER%3E%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%20translate%3D%22no%22%3Econfig%20TFM_CUSTOM_DATA_IMPORT_REGION%0A%20%20%20%20bool%20%22Enable%20custom%20flash%20area%20for%20testing%22%0A%20%20%20%20help%0A%20%20%20%20%20%20Validate%20non-secure%20region%20in%20flash.%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3E%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%20%3CCODE%20translate%3D%22no%22%3Eel2go_import_blob%2Fprj.conf%3C%2FCODE%3E%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%20translate%3D%22no%22%3ECONFIG_TFM_CUSTOM_DATA_IMPORT_REGION%3Dy%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CH3%20id%3D%22toc-hId--1617159263%22%20id%3D%22toc-hId--1616115585%22%3E2.%20%E3%83%93%E3%83%AB%E3%83%89%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%92%E6%9B%B4%E6%96%B0%E3%81%97%E3%81%A6%E3%83%95%E3%83%A9%E3%82%B0%E3%82%92%E6%B8%A1%E3%81%99%3C%2FH3%3E%0A%3CP%3E%3CSTRONG%3E%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%3C%2FSTRONG%3E%EF%BC%9A%20%3CCODE%20translate%3D%22no%22%3Eel2go_import_blob%2FCMakeLists.txt%3C%2FCODE%3E%3CBR%20%2F%3ECMake%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%20translate%3D%22no%22%3Eif(CONFIG_TFM_CUSTOM_DATA_IMPORT_REGION)%0A%20%20set_property(TARGET%20zephyr_property_target%20APPEND%20PROPERTY%20TFM_CMAKE_OPTIONS%0A%20%20%20%20-DUSE_TFM_CUSTOM_DATA_IMPORT_REGION%3DON%0A%20%20)%0Aendif()%0A%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3E%3CSTRONG%3E%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%3C%2FSTRONG%3E%EF%BC%9A%20%3CCODE%20translate%3D%22no%22%3Eplatform%2Fext%2Ftarget%2Fnxp%2Ffrdmrw612%2Fconfig.cmake%3C%2FCODE%3E%3CBR%20%2F%3E%E3%83%95%E3%83%A9%E3%82%B0%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%20translate%3D%22no%22%3Eset(USE_TFM_CUSTOM_DATA_IMPORT_REGION%20OFF%20CACHE%20BOOL%20%22%22)%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3E%3CSTRONG%3E%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%3C%2FSTRONG%3E%EF%BC%9A%3CCODE%20translate%3D%22no%22%3Eplatform%2Fext%2Ftarget%2Fnxp%2Ffrdmrw612%2FCMakeLists.txt%3C%2FCODE%3E%3CBR%20%2F%3E%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB%E5%AE%9A%E7%BE%A9%E3%82%92%E8%BF%BD%E5%8A%A0%EF%BC%9A%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%20translate%3D%22no%22%3Eif%20(USE_TFM_CUSTOM_DATA_IMPORT_REGION)%0A%20%20set(TFM_CUSTOM_DATA_IMPORT_REGION_COMPILE_DEFINITION%20%22TFM_CUSTOM_DATA_IMPORT_REGION%22)%0Aendif()%0A%0Atarget_compile_definitions(psa_interface%20INTERFACE%0A%20%20%24%7BTFM_CUSTOM_DATA_IMPORT_REGION_COMPILE_DEFINITION%7D%0A)%0A%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CH3%20id%3D%22toc-hId-870353570%22%20id%3D%22toc-hId-871397248%22%3E3.%20%E3%83%95%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E9%A0%98%E5%9F%9F%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%99%E3%82%8B%3C%2FH3%3E%0A%3CP%3E%3CSTRONG%3E%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%3C%2FSTRONG%3E%EF%BC%9A%3CCODE%20translate%3D%22no%22%3Eplatform%2Fext%2Ftarget%2Fnxp%2Ffrdmrw612%2Fpartition%2Fflash_layout.h%3C%2FCODE%3E%3CBR%20%2F%3E%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%81%A8%E3%82%B5%E3%82%A4%E3%82%BA%E3%82%92%E5%AE%9A%E7%BE%A9%EF%BC%9A%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%20translate%3D%22no%22%3E%23ifdef%20TFM_CUSTOM_DATA_IMPORT_REGION%0A%23define%20TFM_CUSTOM_NS_REGION_ADDR%20%20(0x08500000)%0A%23define%20TFM_CUSTOM_NS_REGION_SIZE%20%20(0x00001000)%20%2F%2F%204KB%0A%23endif%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3E%3CSTRONG%3E%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%3C%2FSTRONG%3E%EF%BC%9A%3CCODE%20translate%3D%22no%22%3Eplatform%2Fext%2Ftarget%2Fnxp%2Ffrdmrw612%2Fpartition%2Fregion_defs.h%3C%2FCODE%3E%3CBR%20%2F%3E%E9%A0%98%E5%9F%9F%E3%82%92%E3%83%9E%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CDIV%20class%3D%22___77lcry0%20f10pi13n%22%3E%0A%3CDIV%20class%3D%22___1hewfwb%20f10pi13n%20f7oukh6%20f5p0z4x%22%20tabindex%3D%220%22%20role%3D%22group%22%20aria-label%3D%22Code%20Preview%22%3E%0A%3CDIV%20class%3D%22fui-FluentProvider%20codeBlock-6833fui-FluentProviderr71%20loop-host%20___1jk74h0%20fzk5nv6%20f6n0el9%20f7x6x6c%20f1a9mlr7%20flj889f%20f13g0yyb%20ffzn0d2%22%20dir%3D%22ltr%22%20data-testid%3D%22ComponentFluentProviderId%22%3E%0A%3CDIV%20class%3D%22scriptor-component-code-block%20___zvnbuh0%20fbwmw8f%20f1r24x2c%20fssjx5q%20f11d9hfk%20f1ox3k9x%20f133xw5t%20f1bt4cyl%20fbhtfgd%20fukujjm%20f1uhbleq%20f1j8h10f%20f1dcxf0u%20fhswmqe%20f1gsf85u%20fh8rik3%20f1jl54mw%20f1w257bn%20f1c6ju7g%20fwfsotv%20f1ndaetk%20fe9qgns%20fu1i9vr%20fol4l6z%20f1xiw7p5%20fdk4ulh%22%20tabindex%3D%22-1%22%3E%0A%3CDIV%20class%3D%22___4ll5qn0%20fonrc96%22%3E%0A%3CDIV%20class%3D%22r14iuplo%20fui-AriaLive__assertive%22%20aria-live%3D%22assertive%22%3E%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%20translate%3D%22no%22%3E%23ifdef%20TFM_CUSTOM_DATA_IMPORT_REGION%0A%23define%20CUSTOM_NS_DATA_REGION_START%20(TFM_CUSTOM_NS_REGION_ADDR)%0A%23define%20CUSTOM_NS_DATA_REGION_SIZE%20%20(TFM_CUSTOM_NS_REGION_SIZE)%0A%23endif%3C%2FCODE%3E%3C%2FPRE%3E%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3CH3%20id%3D%22toc-hId--937100893%22%20id%3D%22toc-hId--936057215%22%3E4.%20%E3%83%AA%E3%83%B3%E3%82%AB%E3%83%BC%E3%83%BB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%92%E6%9B%B4%E6%96%B0%E3%81%99%E3%82%8B%3C%2FH3%3E%0A%3CP%3E%3CSTRONG%3E%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%3C%2FSTRONG%3E%3A%20%3CCODE%20translate%3D%22no%22%3Eplatform%2Fext%2Ftarget%2Fnxp%2Fcommon%2Fgcc%2Ftfm_common_s.ld%3C%2FCODE%3E%3CBR%20%2F%3E%E3%83%AA%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%83%99%E3%83%BC%E3%82%B9%E5%AE%A3%E8%A8%80%E3%82%92%E8%BF%BD%E5%8A%A0%3A%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%20translate%3D%22no%22%3E%23ifdef%20TFM_CUSTOM_DATA_IMPORT_REGION%0A%20%20Load%24%24LR%24%24LR_CUSTOM_DATA_IMPORT_REGION%24%24Base%20%3D%20CUSTOM_NS_DATA_REGION_START%3B%0A%23endif%0A%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CBR%20%2F%3E%0A%3CH3%20id%3D%22toc-hId-1550411940%22%20id%3D%22toc-hId-1551455618%22%3E5.%20%E3%82%B3%E3%83%BC%E3%83%89%E5%86%85%E3%81%A7%E9%A0%98%E5%9F%9F%E3%82%92%E5%AE%A3%E8%A8%80%E3%81%97%E3%81%A6%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%99%E3%82%8B%3C%2FH3%3E%0A%3CP%3E%3CSTRONG%3E%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%3C%2FSTRONG%3E%EF%BC%9A%3CCODE%20translate%3D%22no%22%3Eplatform%2Fext%2Ftarget%2Fnxp%2Fcommon%2Ftarget_cfg_common.h%3C%2FCODE%3E%3CBR%20%2F%3E%E3%83%A1%E3%83%A2%E3%83%AA%E9%A0%98%E5%9F%9F%E6%A7%8B%E9%80%A0%E4%BD%93%E3%81%AB%E8%BF%BD%E5%8A%A0%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%20translate%3D%22no%22%3E%23ifdef%20TFM_CUSTOM_DATA_IMPORT_REGION%0Auint32_t%20custom_ns_data_region_base%3B%0Auint32_t%20custom_ns_data_region_limit%3B%0A%23endif%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3E%3CSTRONG%3E%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%3C%2FSTRONG%3E%EF%BC%9A%20%3CCODE%20translate%3D%22no%22%3Eplatform%2Fext%2Ftarget%2Fnxp%2Fcommon%2Ftfm_hal_platform.c%3C%2FCODE%3E%3CBR%20%2F%3E%E9%A0%98%E5%9F%9F%E3%81%AE%E4%B8%8A%E9%99%90%E3%83%BB%E4%B8%8B%E9%99%90%E3%82%92%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%20translate%3D%22no%22%3E%23ifdef%20TFM_CUSTOM_DATA_IMPORT_REGION%0AREGION_DECLARE(Load%24%24LR%24%24%2C%20LR_CUSTOM_DATA_IMPORT_REGION%2C%20%24%24Base)%3B%0A%23endif%20%2F%2F%20TFM_CUSTOM_DATA_IMPORT_REGION%0A%0A%0A%23ifdef%20TFM_CUSTOM_DATA_IMPORT_REGION%0A%20%20%20%20.custom_ns_data_region_base%20%20%20%3D%0A%20%20%20%20%20%20%20%20(uint32_t)%26amp%3BREGION_NAME(Load%24%24LR%24%24%2C%20LR_CUSTOM_DATA_IMPORT_REGION%2C%20%24%24Base)%2C%0A%20%20%20%20.custom_ns_data_region_limit%20%20%3D%0A%20%20%20%20%20%20%20%20(uint32_t)%26amp%3BREGION_NAME(Load%24%24LR%24%24%2C%20LR_CUSTOM_DATA_IMPORT_REGION%2C%20%24%24Base)%20%2B%20CUSTOM_NS_DATA_REGION_SIZE%20-%201%2C%0A%23endif%20%2F%2F%20TFM_CUSTOM_DATA_IMPORT_REGION%0A%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3E%3CSTRONG%3E%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%3C%2FSTRONG%3E%EF%BC%9A%3CCODE%20translate%3D%22no%22%3Eplatform%2Fext%2Ftarget%2Fnxp%2Fcommon%2Ftfm_hal_isolation.c%3C%2FCODE%3E%3CBR%20%2F%3ESAU%E3%82%92%E6%A7%8B%E6%88%90%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%20translate%3D%22no%22%3E%23ifdef%20TFM_CUSTOM_DATA_IMPORT_REGION%0ASECURE_WRITE_REGISTER(%26amp%3B(SAU-%26gt%3BRNR)%2C%207U)%3B%0ASAU-%26gt%3BRBAR%20%3D%20(memory_regions.custom_ns_data_region_base%20%26amp%3B%20SAU_RBAR_BADDR_Msk)%3B%0ASAU-%26gt%3BRLAR%20%3D%20(memory_regions.custom_ns_data_region_limit%20%26amp%3B%20SAU_RLAR_LADDR_Msk)%20%7C%20SAU_RLAR_ENABLE_Msk%3B%0A%23endif%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3E%3CSTRONG%3E%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%3C%2FSTRONG%3E%3A%20%3CCODE%20translate%3D%22no%22%3Eplatform%2Fext%2Ftarget%2Fnxp%2Ffrdmrw612%2Ftarget_cfg.c%3C%2FCODE%3E%3CBR%20%2F%3EMPC%E3%82%92%E8%A8%AD%E5%AE%9A%3A%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%20translate%3D%22no%22%3E%23ifdef%20TFM_CUSTOM_DATA_IMPORT_REGION%0Aenable_mem_rule_for_partition(memory_regions.custom_ns_data_region_base%2C%20memory_regions.custom_ns_data_region_limit)%3B%0A%23endif%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CH3%20id%3D%22toc-hId--257042523%22%20id%3D%22toc-hId--255998845%22%3E6.%20Device%20Tree%20Overlay%E3%82%92%E6%9B%B4%E6%96%B0%E3%81%99%E3%82%8B%3C%2FH3%3E%0A%3CP%3E%3CSTRONG%3E%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%3C%2FSTRONG%3E%EF%BC%9A%3CCODE%20translate%3D%22no%22%3Ezephyr%2Fsamples%2Fel2go_import_blob%2Ffrdm_rw612_rw612_ns.overlay%3C%2FCODE%3E%3CBR%20%2F%3E%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E8%BF%BD%E5%8A%A0%EF%BC%9A%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%20translate%3D%22no%22%3Ecustom_ns_data%3A%20partition%40500000%20%7B%0A%20%20label%20%3D%20%22custom_ns_data%22%3B%0A%20%20reg%20%3D%20%26lt%3B0x500000%200x1000%26gt%3B%3B%0A%7D%3B%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CBR%20%2F%3E%0A%3CBR%20%2F%3E%0A%3CH2%20id%3D%22toc-hId--267545627%22%20id%3D%22toc-hId--266501949%22%3E%E9%A0%98%E5%9F%9F%E3%81%AE%E6%B6%88%E5%8E%BB%E3%80%81%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%81%BF%E3%80%81%E8%AA%AD%E3%81%BF%E5%8F%96%E3%82%8A%E3%82%92%E8%A1%8C%E3%81%A3%E3%81%A6%E3%83%86%E3%82%B9%E3%83%88%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FH2%3E%0A%3CBR%20%2F%3E%0A%3CP%3E1.%20Zephyr%E3%83%95%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E3%82%92%E6%9C%89%E5%8A%B9%E3%81%AB%E3%81%99%E3%82%8B%3C%2FP%3E%0A%3CP%3E%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%20%3CCODE%20translate%3D%22no%22%3Eel2go_import_blob%2Fprj.conf%3C%2FCODE%3E%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%20translate%3D%22no%22%3ECONFIG_FLASH%3Dy%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CBR%20%2F%3E%0A%3CP%3E2.%20%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E3%83%86%E3%82%B9%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%20translate%3D%22no%22%3E%23include%20%3CZEPHYR%3E%0Aconst%20struct%20device%20*flash_dev%20%3D%20DEVICE_DT_GET(DT_CHOSEN(zephyr_flash_controller))%3B%0A%0Astatic%20int%20test_flash_region(void)%20%7B%0A%20%20%20%20uint32_t%20offset%20%3D%200x500000%3B%0A%20%20%20%20uint32_t%20test_data%20%3D%200xDEADBEEF%3B%0A%20%20%20%20uint32_t%20read_data%3B%0A%20%20%20%20%0A%20%20%20%20%2F%2F%201.%20Erase%20flash%20(required%20before%20write)%0A%20%20%20%20flash_erase(flash_dev%2C%20offset%2C%204096)%3B%0A%20%20%20%20%0A%20%20%20%20%2F%2F%202.%20Write%20data%0A%20%20%20%20flash_write(flash_dev%2C%20offset%2C%20%26amp%3Btest_data%2C%20sizeof(test_data))%3B%0A%20%20%20%20%0A%20%20%20%20%0A%20%20%20%20%2F%2F%203.%20Read%20data%20(this%20can%20use%20memcpy%20function)%0A%20%20%20%20memcpy(%26amp%3Bread_data%2C%20(void%20*)0x08500000%2C%20sizeof(read_data))%3B%0A%20%20%20%20if%20(read_data%20%3D%3D%20test_data)%20%7B%0A%20%20%20%20%20%20%20%20LOG(%22%E2%9C%93%20Flash%20test%20passed%20with%20memcpy%3A%200x%2508x%5Cn%22%2C%20read_data)%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20LOG(%22%E2%9C%97%20Flash%20test%20failed%5Cn%22)%3B%0A%20%20%20%20%7D%0A%0A%2F%2FFlash%20read%20operation%20will%20have%20fix%20to%20correctly%20calculate%20address%20next%20release%0A%20%20%20%20%2F*flash_read(flash_dev%2C%20offset%2C%20%26amp%3Bread_data%2C%20sizeof(read_data))%3B%0A%20%20%20%20%20%20%20%20if%20(read_data%20%3D%3D%20test_data)%20%7B%0A%20%20%20%20%20%20%20%20LOG(%22%E2%9C%93%20Flash%20test%20passed%20with%20flash_read%3A%200x%2508x%5Cn%22%2C%20read_data)%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20LOG(%22%E2%9C%97%20Flash%20test%20failed%5Cn%22)%3B%0A%20%20%20%20%7D%0A%20%20%20%20*%2F%0A%20%20%20%20return%200%3B%0A%7D%3C%2FZEPHYR%3E%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CBR%20%2F%3E%0A%3CP%3E3.%20%3CSPAN%3E%3CCODE%20translate%3D%22no%22%3Etest_flash_region()%3C%2FCODE%3E%3C%2FSPAN%3E%3CSPAN%3E%E9%96%A2%E6%95%B0%3C%2FSPAN%3E%E3%82%92%3CSPAN%3E%3CCODE%20translate%3D%22no%22%3Emain()%3C%2FCODE%3E%E3%81%8B%E3%82%89%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22Sabina_Bruce_0-1762882779239.png%22%20style%3D%22width%3A%20999px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22Sabina_Bruce_0-1762882779239.png%22%20style%3D%22width%3A%20999px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F365004i9A51D757D66B00AC%2Fimage-size%2Flarge%3Fv%3Dv2%26amp%3Bpx%3D999%22%20role%3D%22button%22%20title%3D%22Sabina_Bruce_0-1762882779239.png%22%20alt%3D%22Sabina_Bruce_0-1762882779239.png%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CBR%20%2F%3E%3C%2FLINGO-BODY%3E
評価なし
バージョン履歴
最終更新日:
‎11-11-2025 10:39 AM
更新者: