#ifndef _API_CM_H
#define _API_CM_H

#define PAGE_DATA_SIZE      250

//每个Page 250 Byte
#define PAGE0(x)            (x)
#define PAGE1(x)            (0x100 + (x))
#define PAGE2(x)            (0x200 + (x))
#define PAGE3(x)            (0x300 + (x))

#define MAX_CM_PAGE         2       //根据需要定义大小
#define SYS_CM_PAGE_NUM     0
#define BLE_CM_PAGE_NUM     1

#define SYS_CM_PAGE(x)      PAGE0(x)
#define BLE_CM_PAGE(x)      PAGE1(x)

/**
  * @brief  参数区初始化，用于保存一些掉电需要记忆的参数到内置的flash里面
  * @param  page总数
  * @param  参数区的起始地址，参数区一般设置在flash的最后那块区域
  * @param  参数区总大小,至少8k
  */
void cm_init(uint max_page, u32 addr, uint len);    //

/**
  * @brief  将write写入cache的内容同步到spiflash中
  */
void cm_sync(void);
void cm_read(void *buf, u32 addr, uint len);
u8 cm_read8(u32 addr);
u16 cm_read16(u32 addr);
u32 cm_read32(u32 addr);

/**
  * @brief write数据到cache，需要调用cm_sync才会真正写入到spiflash中
  */
void cm_write(void *buf, u32 addr, uint len);

void cm_write8(u32 addr, u8 val);
void cm_write16(u32 addr, u16 val);
void cm_write32(u32 addr, u32 val);

/**
  * @brief 清除CM的一整个Page
  * @param 要清除的page起始地址
  */
void cm_clear(u32 addr);

/**
  * @brief 配置区(setting)初始化
  */
bool xcfg_init(void *xcfg, uint len);

#endif
