/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : bsp_w25qxx.h
  * @brief          : W25QXX 闪存芯片的 BSP 层头文件
  ******************************************************************************
  */
/* USER CODE END Header */

#ifndef BSP_W25QXX_H
#define BSP_W25QXX_H

#include "w25qxx.h"
#include "hal_spi.h"
#include "hal_gpio.h"

/**
 * @brief W25QXX 芯片选择引脚配置
 */
#define W25QXX_CS_PORT       HAL_GPIO_PORT_B
#define W25QXX_CS_PIN        HAL_GPIO_PIN_0

/**
 * @brief W25QXX SPI 实例
 */
#define W25QXX_SPI_INSTANCE  HAL_SPI_INSTANCE_1

/**
 * @brief 初始化 W25QXX 闪存芯片
 * @retval 初始化成功返回 true，失败返回 false
 */
bool bsp_w25qxx_init(void);

/**
 * @brief 获取 W25QXX 设备信息
 * @param info 指向设备信息结构体的指针
 * @retval 成功返回 true，失败返回 false
 */
bool bsp_w25qxx_get_device_info(w25qxx_device_info_t *info);

/**
 * @brief 从 W25QXX 闪存芯片读取数据
 * @param address 起始读取地址
 * @param data 存储读取数据的缓冲区指针
 * @param size 要读取的数据大小
 * @retval 读取成功返回 true，失败返回 false
 */
bool bsp_w25qxx_read(uint32_t address, uint8_t *data, uint32_t size);

/**
 * @brief 向 W25QXX 闪存芯片写入数据
 * @param address 起始写入地址
 * @param data 要写入的数据缓冲区指针
 * @param size 要写入的数据大小
 * @retval 写入成功返回 true，失败返回 false
 */
bool bsp_w25qxx_write(uint32_t address, const uint8_t *data, uint32_t size);

/**
 * @brief 擦除 4KB 块
 * @param address 块内的地址
 * @retval 擦除成功返回 true，失败返回 false
 */
bool bsp_w25qxx_erase_block_4kb(uint32_t address);

/**
 * @brief 擦除 32KB 块
 * @param address 块内的地址
 * @retval 擦除成功返回 true，失败返回 false
 */
bool bsp_w25qxx_erase_block_32kb(uint32_t address);

/**
 * @brief 擦除 64KB 块
 * @param address 块内的地址
 * @retval 擦除成功返回 true，失败返回 false
 */
bool bsp_w25qxx_erase_block_64kb(uint32_t address);

/**
 * @brief 擦除整个芯片
 * @retval 擦除成功返回 true，失败返回 false
 */
bool bsp_w25qxx_erase_chip(void);

#endif /* BSP_W25QXX_H */