20230731_XiaoFuZi_emb/ZheDaXiaoFuZiBoot/Src/Usr/Driver/Ldrv/W25Q64JVSSIQ/McuW25Q64JvssiqDrv.h

42 lines
1.5 KiB
C
Raw Normal View History

#ifndef _MCU_W25Q64JVSSIQ_DRV_H_
#define _MCU_W25Q64JVSSIQ_DRV_H_
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#define W25Q64_FLASH_SIZE (8*1024*1024) // 8MB
#define W25Q64_FLASH_PAGE_LEN 256 //单页字节数
#define W25Q64_FLASH_PAGE_NUM 32768 // 页缓存字节数为 FLASH_SIZE_MAX / FLASH_PAGE_BUF_SIZE
#define W25Q64_FLASH_SECTOR_NUM 2048 // 区一个区4K
#define W25Q64_FLASH_BLOCK_NUM 128 // 块一个块64K
typedef void (*W25Q64JVSSIQ_SpiCs)(uint8_t flag);
typedef unsigned char (*W25Q64JVSSIQ_SpiWriteReadByte)(uint8_t Data);
typedef void (*W25Q64JVSSIQ_DelayUs)(unsigned int period);
typedef struct {
W25Q64JVSSIQ_SpiCs SpiCs;
W25Q64JVSSIQ_SpiWriteReadByte SpiWriteReadByte;
W25Q64JVSSIQ_DelayUs DelayUs;
} W25Q64JVSSIQ_OBJ;
/* 初始化FLASH */
int W25Q64_Init(W25Q64JVSSIQ_OBJ * FlashObj);
/* 读取Flash上的部分数据 */
int W25Q64_ReadBytes(W25Q64JVSSIQ_OBJ * FlashObj, unsigned int Raddr, unsigned char *Rbuf, unsigned int RbufLen);
int W25Q64_WriteBytes(W25Q64JVSSIQ_OBJ * FlashObj, unsigned int Waddr, unsigned char *Wbuf, unsigned int WbufLen);
/* 清除块数据 */
int W25Q64_EraseBlock(W25Q64JVSSIQ_OBJ * FlashObj, unsigned int BlockAddr);
/* 清除扇区数据 */
int W25Q64_EraseSector(W25Q64JVSSIQ_OBJ * FlashObj, unsigned int SectorAddr);
/* 清除FLASH数据 */
void W25Q64_EraseChip(W25Q64JVSSIQ_OBJ * FlashObj);
/* 进入低功耗 */
void W25Q64_PowerDown(W25Q64JVSSIQ_OBJ * FlashObj);
/* 唤醒 */
void W25Q64_WakeUp(W25Q64JVSSIQ_OBJ * FlashObj);
#endif