📄 common.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 + -