mcu_hi3321_watch/tjd/driver/nandflash/mx25u51245g/drv_mx25u51245g.h
2025-05-26 20:15:20 +08:00

128 lines
4.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*----------------------------------------------------------------------------
* Copyright (c) Fenda Technologies Co., Ltd. 2020. All rights reserved.
*
* Description: drv_mx25u51245g.h
*
* Author: saimen
*
* Create: 2021-04-27
*--------------------------------------------------------------------------*/
#ifndef _DRV_MX25U51245G_H
#define _DRV_MX25U51245G_H
#include <stdint.h>
/* Write Operations */
#define WRITE_ENABLE_CMD 0x06
#define WRITE_DISABLE_CMD 0x04
/* qspi mode */
#define ENTER_QPI_MODE_CMD 0x35
#define EXIT_QPI_MODE_CMD 0xf5
/* qspi reset */
#define ENABLE_RESET 0x66
#define RESET_DEV 0x99
/* Register Operations */
#define READ_STATUS_REG_CMD 0x05
#define READ_CONF_REG_CMD 0x15
#define READ_EXTEND_ADDR_REG_CMD 0xC8
#define WRITE_STATUS_CONF_REG_CMD 0x01
#define WRITE_EXTEND_ADDR_REG_CMD 0xC5
#define WRITE_STATUS_REG_3_CMD 0x11
/* Addr Operations */
#define ENTER_4_BYTES_CMD 0xB7
#define EXIT_4_BYTES_CMD 0xE9
/* Read Operations */
#define READ_CMD 0x13
#define FAST_READ_CMD 0x0C
#define QUAD_OUT_READ_CMD 0x6C
#define QUAD_INOUT_READ_CMD 0xEE
/* Program Operations */
#define PAGE_PROG_CMD 0x12
#define QPAGE_PROG_CMD 0x3E
/* Erase Operations */
#define SECTOR_ERASE_CMD 0x21 //4K
#define SUBBLOCK_ERASE_CMD 0x5C //32K
#define BLOCK_ERASE_CMD 0xDC //64K
#define CHIP_ERASE_CMD 0x60
#define CHIP_ERASE_CMD_2 0xC7
#define PROG_ERASE_RESUME_CMD 0x7A
#define PROG_ERASE_SUSPEND_CMD 0x75
/* Identification Operations */
#define READ_ID_CMD 0x9F
#define QREAD_ID_CMD 0xAF
/* Power Down Operations */
#define ENTER_DEEP_POWER_DOWN_CMD 0xB9
#define RELEASE_DEEP_POWER_DOWN_CMD 0xAB
/* manufacturer ID of 1-byte and Device ID of 2-byte */
#define FLASH_JEDEC_ID 0xC2253A
/********************************************************/
/// MX25U51245G页大小, 最小读写单元
#define MX25U51245G_PAGE_SIZE 256
/// MX25U51245G扇区大小, 最小擦除单元
#define MX25U51245G_SECTOR_SIZE 4096
/// MX25U51245G最小擦除单元大小
#define MX25U51245G_ERASE_UNIT_SIZE 4096
/// MX25U51245G块大小
#define MX25U51245G_BLOCK_SIZE 65536
/// MX25U51245G总大小
#define MX25U51245G_TOTAL_SIZE (64*1024*1024)
//FS ADD START
/** MX25U51245G NOR FLASH 文件系统宏定义 ------------------------------------- */
/// MX25U51245G扇区FS使用首扇区,起始编号, FLASH器件后40M为文件系统
#define MX25U51245G_FS_BASE_SECTOR 6144
/// MX25U51245G扇区FS使用扇区个数, 扇区编号: 6144 ~ 16383
#define MX25U51245G_FS_SECTORS 10240
//FS ADD END
#define MX25U51245G_MSPI_TIMEOUT 2000000 //us
#define MX25U51245G_MSPI_CHIP_ERASE_TIMEOUT 300000000 //us
typedef struct
{
uint32_t status;
void(*transfer_cb)(void *pcFmt, ...);
void(*lock)(void);
void(*unlock)(void);
void(*delay_ms)(uint32_t ms);
// uint32_t DMABuffer[MX25U51245G_PAGE_SIZE];
}mx25u512_info_t;
//read write config
extern void drv_mx25u512_open(void);
extern void drv_mx25u512_close(void);
extern void drv_mx25u512_info_init(void* delay_ms,void* lock,void* unlock,void* transfer_cb);
extern void drv_mx25u512_enter_power_down(void);
extern void drv_mx25u512_release_power_down(void);
extern uint32_t drv_mx25u512_read_id(void);
extern uint32_t drv_mx25u512_read_status(void);
extern void mx25u512_wait_ready(uint32_t delay_cs,uint32_t time_out);
//read,write,erase flash
extern uint32_t drv_mx25u512_chip_erase(void);
extern uint32_t drv_mx25u512_smart_erase(uint32_t begin_addr,uint32_t end_addr);
extern uint32_t drv_mx25u512_read_nonblocking(uint8_t *pdata,uint32_t addr,uint32_t readlen);
//与drv_mx25u512_read_nonblocking相比不带延迟等待
extern uint32_t drv_mx25u512_read_nonblocking_ex(uint8_t *pdata,uint32_t addr,uint32_t readlen);
extern uint32_t drv_mx25u512_write_nonblocking(uint8_t *pdata,uint32_t addr,uint32_t writelen);
extern uint32_t drv_mx25u512_sector_erase(uint32_t addr);
#endif