实现读取nand的id,正在编写坏块管理算法

This commit is contained in:
ranchuan
2023-06-12 18:32:55 +08:00
parent ed44e2b9dd
commit 64db6e94bc
1385 changed files with 791640 additions and 92 deletions

51
source/nand/ftl.h Normal file
View File

@@ -0,0 +1,51 @@
#ifndef __FTL_H
#define __FTL_H
#include "stm32h7xx_hal.h"
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//NAND FLASH FTL<54><4C><EFBFBD><EFBFBD><E3B7A8><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/1/15
//<2F><EFBFBD><E6B1BE>V1.3
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾ 2014-2024
//All rights reserved
//********************************************************************************
//<2F><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
//V1.1 20160124
//<2F>޸<EFBFBD>FTL_CopyAndWriteToBlock<63><6B>FTL_WriteSectors<72><73><EFBFBD><EFBFBD>,<2C><><EFBFBD>߷<EFBFBD>0XFFʱ<46><CAB1>д<EFBFBD><D0B4><EFBFBD>ٶ<EFBFBD>.
//V1.2 20160520
//1,<2C>޸<EFBFBD>FTL_ReadSectors,<2C><><EFBFBD><EFBFBD>ECC<43><43><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><E9B4A6>,<2C><><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
//2,<2C><><EFBFBD><EFBFBD>FTL_BlockCompare<72><65>FTL_SearchBadBlock<63><6B><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѱ<EFBFBD><D1B0><EFBFBD><EFBFBD>
//3,<2C>޸<EFBFBD>FTL_Format<61><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ,<2C><><EFBFBD><EFBFBD>FTL_USE_BAD_BLOCK_SEARCH<43><48>
//V1.3 20160530
//<2F>޸ĵ<DEB8>1bit ECC<43><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ȡ2<C8A1>Σ<EFBFBD><CEA3><EFBFBD>ȷ<EFBFBD><C8B7>1bit <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ1,<2C><><EFBFBD><EFBFBD>FTL_Format<61><74>ʱ<EFBFBD><CAB1>,<2C><>Ѱ<EFBFBD><D1B0><EFBFBD><EFBFBD>,<2C><>ʱ<EFBFBD><CAB1>(512M,3<><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>),<2C>һ<D2BB><E1B5BC>RGB<47><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define FTL_USE_BAD_BLOCK_SEARCH 0 //<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ʹ<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef uint32_t u32;
typedef uint16_t u16;
typedef uint8_t u8;
u8 FTL_Init(void);
void FTL_BadBlockMark(u32 blocknum);
u8 FTL_CheckBadBlock(u32 blocknum);
u8 FTL_UsedBlockMark(u32 blocknum);
u32 FTL_FindUnusedBlock(u32 sblock,u8 flag);
u32 FTL_FindSamePlaneUnusedBlock(u32 sblock);
u8 FTL_CopyAndWriteToBlock(u32 Source_PageNum,u16 ColNum,u8 *pBuffer,u32 NumByteToWrite);
u16 FTL_LBNToPBN(u32 LBNNum);
u8 FTL_WriteSectors(u8 *pBuffer,u32 SectorNo,u16 SectorSize,u32 SectorCount);
u8 FTL_ReadSectors(u8 *pBuffer,u32 SectorNo,u16 SectorSize,u32 SectorCount);
u8 FTL_CreateLUT(u8 mode);
u8 FTL_BlockCompare(u32 blockx,u32 cmpval);
u32 FTL_SearchBadBlock(void);
u8 FTL_Format(void);
#endif