optical/NxFuncs/norflash/norflash.h

188 lines
5.2 KiB
C
Raw Normal View History

2025-09-04 01:45:08 +00:00
#ifndef __NORFLASH_H__
#define __NORFLASH_H__
#include "config.h"
//-------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD> Norflash <20>ķ<EFBFBD><C4B7>ʽӿ<CABD>
// SPI<50>ӿ<EFBFBD>
//----------------------------------------------
// ֧<><D6A7> W25Q80, W25Q16, W25Q32, W25Q64, W25Q128, W25Q256
#define W25Q80 8 // 8M Bit 1MB = 1024K = 1024 * 1024 B
#define W25Q16 16 // 16M Bit 2MB = 2048K = 2 * 1024 * 1024 B
#define W25Q32 32
#define W25Q64 64
#define W25Q128 128 // 128M Bit 16MB
#define W25Q256 256 // 256M Bit 32MB
// оƬѡ<C6AC><D1A1>
#ifndef SERNORFLASHTYPE
#define SERNORFLASHTYPE W25Q16
#endif
//----------------------------------------------
#define RWSPI 1
#define RWQPI 2
#ifndef RWMODE
#define RWMODE RWSPI
#endif
//----------------------------------------------
#define RWADDR3 1
#define RWADDR4 2
#ifndef RWADDRMODE
#define RWADDRMODE RWADDR3
#endif
//-------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD> Norflash <20><>С<EFBFBD><D0A1><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
#define SNF_TOTAL_BYTES (SERNORFLASHTYPE*1024*(1024/8)) // <20>ֽ<EFBFBD><D6BD><EFBFBD>
#define SNF_BYTES_PER_PAGE 0x100 // ÿҳ<C3BF>ֽڸ<D6BD><DAB8><EFBFBD>(256)<29><>ҳ<EFBFBD>DZ<EFBFBD><C7B1><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1>λ<EFBFBD><CEBB>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD>ָ<EFBFBD>1/4 K
#define SNF_PAGES_PER_SEC 0x10 // ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>(16)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><C7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>
#define SNF_BYTES_PER_SEC (SNF_BYTES_PER_PAGE*SNF_PAGES_PER_SEC) // ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD>ֽڸ<D6BD><DAB8><EFBFBD>(4096) 4K
//-------------------------------------------------------------------------------
// Norflash ʹ<>û<EFBFBD><C3BB>֣<EFBFBD><D6A3><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>ֲ<EFBFBD>ͬ<EFBFBD><CDAC>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FLASH <20><><EFBFBD>򻮷<EFBFBD>, С<><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȱ<EFBFBD>֤<EFBFBD><D6A4>λ<EFBFBD><CEBB>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// |-----------------|-----------------|-------------| // W25Q256 W25Q16 W25Q80
// | name | begin addr | size |
// |-----------------|-----------------|-------------|
// | file area | 0x00 | 0x01000000 | // 16MB
// |-----------------|-----------------|-------------|
// | rev area | 0x01000000 | 0x00E00000 | // 14MB
// |-----------------|-----------------|-------------|
// | run hour area | 0x01E00000 | 0x00100000 | // 1MB 1MB
// |-----------------|-----------------|-------------|
// | para area | 0x01F00000 | 0x00010000 | // 512KB 64KB 64KB
// |-----------------|-----------------|-------------|
// | rev area 2 | 0x01F10000 | 0x00070000 | // 512KB 448KB 448KB
// |-----------------|-----------------|-------------|
// | update area | 0x01F80000 | 0x00080000 | // 512KB 512KB 512KB
// |-----------------|-----------------|-------------|
#if (SERNORFLASHTYPE == W25Q256)
#define SNF_DAT_FILE_BEGIN 0x00000000
#define SNF_DAT_FILE_SIZE 0x01000000 // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16M<36>ֽڣ<D6BD><DAA3><EFBFBD>Ϊ<EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><D5B9>
#define SNF_RUNHOUR_BEGIN 0x01E00000
#define SNF_RUNHOUR_SIZE 0x00100000 // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 1M<31>ֽ<EFBFBD>
#define SNF_PARAS_BEGIN 0x01F00000
#define SNF_PARAS_SIZE 0x00010000 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ洢<DDB4><E6B4A2><EFBFBD><EFBFBD>, 64KB<4B>ֽ<EFBFBD>
#define SNF_UPDATE_BEGIN 0x01F80000
#define SNF_UPDATE_SIZE 0x00080000 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ洢<DDB4><E6B4A2><EFBFBD><EFBFBD>, 512KB<4B>ֽ<EFBFBD>
#elif (SERNORFLASHTYPE == W25Q16)
#define SNF_PARAS_BEGIN 0x00100000
#define SNF_PARAS_SIZE 0x00010000 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ洢<DDB4><E6B4A2><EFBFBD><EFBFBD>, 64KB<4B>ֽ<EFBFBD>
#define SNF_UPDATE_BEGIN 0x00180000
#define SNF_UPDATE_SIZE 0x00080000 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ洢<DDB4><E6B4A2><EFBFBD><EFBFBD>, 512KB<4B>ֽ<EFBFBD>
#elif (SERNORFLASHTYPE == W25Q80)
#define SNF_PARAS_BEGIN 0x00000000
#define SNF_PARAS_SIZE 0x00010000 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ洢<DDB4><E6B4A2><EFBFBD><EFBFBD>, 64KB<4B>ֽ<EFBFBD>
#define SNF_UPDATE_BEGIN 0x00080000
#define SNF_UPDATE_SIZE 0x00080000 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ洢<DDB4><E6B4A2><EFBFBD><EFBFBD>, 512KB<4B>ֽ<EFBFBD>
#endif
//--------------------------------
//--------------------------------
//--------------------------------
//--------------------------------
//-------------------------------------------------------------------------------
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
int SNFlashInit(void (*spicson)(void), void (*spicsoff)(void), u8 (*spird)(void), void (*spiwr)(u8 wb));
// дʹ<D0B4>ܿ<EFBFBD>
void SNFWirteEnable(void);
// дʹ<D0B4>ܹ<EFBFBD>
void SNFWirteDisable(void);
// <20>ж<EFBFBD>Nor<6F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD>״̬
int SNFIsdStatusBusy(void);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int SNFlashRdData(u32 addr, u8 * pBuf, int len);
// <20><><EFBFBD>ٶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ɴﵽ104M<34><4D>
int SNFFastReadData(u32 addr, u8 * pBuf, int len);
// ҳ<><D2B3>д<EFBFBD><D0B4><EFBFBD><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д256<35><36><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>]
int SNFPageProgram(u32 addr, u8 * pBuf, int len);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(4KB)
int SNFlash4kErase(u32 addr, int wait);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(32KB)
int SNFlash32kErase(u32 addr, int wait);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(64KB)
int SNFlash64kErase(u32 addr, int wait);
// <20><>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD>
int SNFlashChipErase(u32 addr, int wait);
// <20><>ȡ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> id <20><> <20>豸 ID
u32 SNFGetManufacDeviceID(void);
// <20><>ȡ JEDEC ID
u32 SNFGetJedecID(void);
// <20><>ȡ Unique ID 8<>ֽڵ<D6BD>Ψһ<CEA8><D2BB><EFBFBD>к<EFBFBD>
u64 SNFGetUniqueID(void);
// <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
int SNFlashWrData(u32 addr, u8 *data, int len);
// д<><D0B4><EFBFBD>ݣ<EFBFBD><DDA3>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int SNFlashWrDataWithErase(u32 addr, u8 *data, int len);
// <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA>
int IsSNFlashEmpty(u32 addr, int len);
//-------------------------------------------------------------------------------
#define DatFlashInit SNFlashInit
//#define DatFlashRdData SNFlashRdData
#define DatFlashRdData(saddr, taddr, blen) SNFlashRdData(saddr, (u8*)(taddr), blen)
#define DatFlashWrData SNFlashWrData
#define DatFlashWrDataWithErase SNFlashWrDataWithErase
#define IsDatFlashEmpty IsSNFlashEmpty
#define DatFlash4kErase SNFlash4kErase
//-------------------------------------------------------------------------------
#endif