# 应用示例 ## flash 初始化 通过调用 \ref gx_nor_init 接口初始化 flash 设备; 通过调用 \ref gx_nor_xip_init 接口初始化 flash xip; ```c gx_nor_init(); gx_nor_xip_init(2, 0); ``` ## flash 读 通过 \ref gx_nor_read 接口来读取 flash 中数据,其中参数 \ref GX_SPINOR_RW_T 定义如下: * addr 为 flash 需要读取的偏移地址; * len 为 flash 需要读取长度; * data 为 flash 读取数据存储 buffer; * dma_en 为 是否使用 dma 模式读取数据; * bus_mode 为传输模式,可配置单线、双线、四线等传输模式; * data_width_8or32bit 为 flash spi 的传输位宽,可配置 0 (8bit) 或 1 (32bit); * espi_ddr_en 为双沿模式,暂不支持; 从 flash 地址 0x0 处读取 0x100 个字节数据,示例如下: ```c GX_SPINOR_RW_T r = {0}; uint32_t readlen = 0; uint8_t buff[256]; r.addr = 0x0; r.len = 0x100; r.data = (void *)buff; r.bus_mode = 2; r.dma_en = 0; r.data_width_8or32bit = 1; r.espi_ddr_en = 0; readlen = gx_nor_read(&r); ``` ## flash 擦除 通过 \ref gx_nor_erase_data 接口擦除 flash 中数据,其中参数定义如下: * addr 为 flash 需要擦除的偏移地址; * len 为 flash 需要擦除长度; **注意,flash 擦除最小单位大小为一个 sector (4KB) 。** 示例如下: ```c gx_nor_erase_data(0x0, 0x1000); ``` ## flash 写 通过 \ref gx_nor_write 接口向 flash 中写数据,其中参数 \ref GX_SPINOR_RW_T 定义如下: * addr 为 flash 需要写入的偏移地址; * len 为 flash 需要写入长度; * data 为 flash 写入数据存储 buffer; * dma_en 为 是否使用 dma 模式写数据; * bus_mode 为传输模式,可配置单线、双线、四线等传输模式; * data_width_8or32bit 为 flash spi 的传输位宽,可配置 0 (8bit) 或 1 (32bit); * espi_ddr_en 为双沿模式,暂不支持; **注意,在 flash 写操作前,必须先擦除 flash 对应区域的数据后,才能进行写入操作。** 向 flash 地址 0x0 处写入 0x100 个字节数据,示例如下: ```c GX_SPINOR_RW_T w = {0}; uint32_t writelen = 0; uint8_t buff[256]; w.addr = 0x0; w.len = 0x100; w.data = (void *)buff; w.bus_mode = 2; w.dma_en = 0; w.data_width_8or32bit = 1; w.espi_ddr_en = 0; writelen = gx_nor_read(&w); ``` ## flash xip 读 读取 xip 地址数据,可以像访问 sram 一样访问 xip 地址。 从 xip 地址 0x0 处读取 0x100 个字节数据,示例如下: ```c uint8_t buff[256]; memcpy(buff, (void *)CONFIG_FLASH_XIP_BASE, 0x100); ``` ## flash 写保护 通过 \ref gx_nor_write_protect_lock 接口设置 flash 中写保护操作,可将 flash 从起始地址 0 至 特定长度的区域设置成写保护状态,其中参数定义如下: * protect_len 为 flash 写保护的长度,一般为 block size (64KB) 的整数倍; 将 flash 地址 0x0 至 1MB 处的区域写保护,示例如下: ```c gx_nor_write_protect_lock(0x100000); ``` ## flash 解除写保护 通过 \ref gx_nor_write_protect_unlock 接口解除整个 flash 中写保护状态。 示例如下: ```c gx_nor_write_protect_unlock(); ```