⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 common.h

📁 对nand_flash的擦除、编程算法源码
💻 H
字号:
#define		uchar	unsigned char
#define		uint	unsigned int
#define		ushort	unsigned short 
#define		ulong	unsigned long

#define	RESET_CTRL		(ulong)0x00000000
#define	READ_DATA		(ulong)0x00000001
#define	READ_FLAG		(ulong)0x00000002 // spare area
#define	PROGRAM_CMD		(ulong)0x00000003
#define	ERASE_CMD		(ulong)0x00000004
#define	ID_CMD			(ulong)0x00000005
//#define	ERASE_CONFIRM	(uchar)0xD0
#define	STATUS_CMD		(ulong)0x00000006
#define	RESET_CMD		(ulong)0x00000007

#define FS_NAND_READ_ECC_ERR_MASK 0x80000000
#define FS_NAND_OP_RESULT_MASK 0x80
#define FS_NAND_ECC_SELF_ERR_MASK 0x40
#define FS_NAND_OP_ERR_MASK 0x8
#define FS_NAND_CNFG_VAL  (ushort)0x010E
#define FS_NAND_ECC_UC_ERR_MASK 0x20000000

#define FPROGRAM	0
#define FERASEALL	1
#define FERASESEC	2
#define FREADID		3
#define FREADMEM	4
#define FWRITE_BIB	5
#define FINIT		6



#define  CRC_30_OK  0x0B105AA5

/* Mask for CRC-30 polynomial:
**
**      x^30+x^29+x^21+x^20+x^15+x^13+x^12+x^11+x^8+x^7+x^6+x^2+x^1+1
**
** Note:  the x^30 tap is left off, it's implicit.
*/
#define CRC_30_POLYNOMIAL       0x6030B9C7

/* Seed value for CRC register.  The all ones seed allows detection of
** an entire data stream of zeroes.
*/
#define CRC_30_SEED             0x3FFFFFFF

/* Seed value for CRC30 register.  The CRC30 seed is inverted prior to
** being used in the step-wise CRC-30.  This behaves as CRC_30_SEED.
*/
#define CRC_30_STEP_SEED        (~((ulong) CRC_30_SEED))

#define MAGIC1 0x48E3DB5e
#define MAGIC2 0xEE55AA73

#define BIB_VERSION 2



#define BUFFER_SIZE		0x8000
typedef struct  {
	ulong Command;
	ulong Result;
	ulong Reserved1[4];
	ulong Reserved2;
	ulong TargetAddr;
	ulong Length;
	ulong Reserved3;
	ulong Reserved4;
	ulong Reserved5;
	ulong Reserved6;
	ulong Reserved7;
	ulong Reserved8;
	uchar Buf[BUFFER_SIZE];
} FLASH_INFO;

struct boot_info_block {
  ulong		magic1;      /* MAGIC1 */
  ulong		magic2;      /* MAGIC2 */
  ulong		version;     /* BIB version number */
  ulong		startaddr;   /* Start address in RAM */
  ulong		length;      /* length of image */
  ulong		crc;         /* CRC of image */
};


// flash.c
extern void Main(void);
extern void Program(void);
extern void EraseAll(void);
extern void EraseSector(void);
extern void ReadChipID(void);
extern int BlankCheck(ulong *targetP,ulong targetSize);
extern int Verification(ulong *targetP, ulong limit, ulong *srcAddr);
extern int OneBlockErase(ulong targetAddr);
extern int WriteChar(uchar *data, ulong page_addr);
extern int ReadChar(uchar *data, ulong targetAddr, ulong size);
extern void ReadMem(void);
extern void InitFlash(void);
extern void WriteBIB(void);
extern void AutoKick(void);
extern int Bad_Block_Check(ulong block);
extern ulong PrepareBlock(void);
extern ulong crc_30_step
(
  ulong seed,
    /* Either the result of a previous crc_30_step() or CRC_16_STEP_SEED
    ** the first time the routine is called.  Note that the input is
    ** inverted prior to use, to counteract the inversion applied when
    ** it was returned as a result of the previous step.
    */

  uchar *buf_ptr,
    /* Pointer to bytes containing the data to CRC.  The bit stream starts
    ** in the MS bit of the first byte.
    */

  ushort len
    /* Number of data bits to calculate the CRC over */
);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -