Files
2025-12-03 11:12:34 +08:00

91 lines
2.7 KiB
C

#ifndef _NANDFLASH_H
#define _NANDFLASH_H
#include "device/device.h"
#include "ioctl_cmds.h"
#include "spi.h"
#include "printf.h"
#include "gpio.h"
#include "device_drive.h"
#include "malloc.h"
#define GD_WRITE_ENABLE 0x06
#define GD_WRITE_DISABLE 0x04
#define GD_BLOCK_ERASE 0xD8
#define GD_READ_ID 0x9F
#define GD_READ_UID 0x4B//only 1Gb
#define GD_RESET_DEVICE 0xFF
/*for features*/
#define GD_GET_FEATURES 0x0F
#define GD_SET_FEATURES 0x1F
//<features addr
#define GD_FEATURES_PROTECT 0xA0
#define GD_FEATURES 0xB0
#define GD_GET_STATUS 0xC0
#define GD_DRIVE_STRENGTH 0xD0
/*for write*/
#define GD_PROGRAM_LOAD 0x02
#define GD_PROGRAM_EXECUTE 0x10
#define GD_PROGRAM_LOAD_RANDOM_DATA 0x84
//for write x4
#define GD_PROGRAM_LOAD_X4 0x32
#define GD_PROGRAM_LOAD_RANDOM_DATA_X4 0x34//0x34 (1Gb:or 0xc4)
#define GD_PROGRAM_LOAD_RANDOM_DATA_QUAD_IO 0x72//only 1Gb
/*for read*/
#define GD_PAGE_READ_CACHE 0x13
#define GD_READ_FROM_CACHE 0x03//0x03/0x0b(from cache)
#define GD_READ_PAGE_CACHE_RANDOM 0x30//only 2Gb cache read(status reg bit7)
#define GD_READ_PAGE_CACHE_LAST 0x3f//only 2Gb ending of cache read
//for read x2
#define GD_READ_FROM_CACHE_X2 0x3B
#define GD_READ_FROM_CACHE_DUAL_IO 0xBB
//for read x4
#define GD_READ_FROM_CACHE_X4 0x6B
#define GD_READ_FROM_CACHE_QUAD_IO 0xEB
//for protect
#define GD_PERMANENT_BLOCK_LOCK_PROTECTION 0x2c//only 2Gb. Permanently protect a specific group of blocks
#define NAND_OTP_PRT BIT(7)
#define NAND_OTP_EN BIT(6)
#define NAND_ECC_EN BIT(4)
#define NAND_X4_EN BIT(0)
#define NAND_STATUS_OIP BIT(0)
#define NAND_STATUS_WEL BIT(1)
#define NAND_STATUS_E_FAIL BIT(2)
#define NAND_STATUS_P_FAIL BIT(3)
#define NAND_STATUS_ECCS (0xf0)
struct nandflash_dev_platform_data {
int spi_hw_num; //只支持SPI1或SPI2
u32 spi_cs_port; //cs的引脚
u32 spi_read_width; //flash读数据的线宽
const struct spi_platform_data *spi_pdata;
u32 start_addr; //分区起始地址
u32 size; //分区大小,若只有1个分区,则这个参数可以忽略
};
#define NANDFLASH_DEV_PLATFORM_DATA_BEGIN(data) \
const struct nandflash_dev_platform_data data
#define NANDFLASH_DEV_PLATFORM_DATA_END() \
};
void nandflash_test_demo(void);
extern const struct device_operations nandflash_dev_ops;
int nand_flash_erase(u32 address);
int nand_flash_read_page(u16 block, u8 page, u16 offset, u8 *buf, u16 len);
int nand_flash_read(u32 offset, u8 *buf, u32 len);
int nand_flash_write(u32 offset, u8 *buf, u32 len);
int nand_flash_write_page(u16 block, u8 page, u8 *buf, u16 len);
#endif