📄 k9f1g08.h
字号:
// K9F1G08.h
// NAND FLASH: K9F1G08U0A
#ifndef _K9F1G08_H
#define _K9F1G08_H
#include "config.h"
#include "board.h"
// CPU 分配给第一片 FLASH 的地址: CLE->A0, ALE->A1
#define K9F1G08_DATA1 &BANK1_0(0) // ALE=0, CLE=0
#define K9F1G08_CLE1 &BANK1_0(1) // ALE=0, CLE=1
#define K9F1G08_ALE1 &BANK1_0(2) // ALE=1, CLE=0
// CPU 分配给第二片 FLASH 的地址
#define K9F1G08_DATA2 &BANK2_0(0) // ALE=0, CLE=0
#define K9F1G08_CLE2 &BANK2_0(1) // ALE=0, CLE=1
#define K9F1G08_ALE2 &BANK2_0(2) // ALE=1, CLE=0
// K9F1G08U0A 内部结构
#define BYTESPERPAGE 2048 // 每页字节数
#define BYTESPERPAGESPARE 64 // 页附加字节数
#define PAGEPERBLOCK 64 // 每块页数
#define BLOCKPERCHIP 1024 // 芯片包含的块数
#ifdef __cplusplus
extern "C" {
// #define __inline inline // in c and c++, inline isn't compatible
#endif
// Chip==0 为第一片NAND FLASH, 其它值为第二片NAND FLASH
// xIndex 为0序
// 芯片复位
void K9F1G_Reset(uint8 Chip);
// 读芯片状态
uint8 K9F1G_ReadStatus(uint8 Chip);
// 读芯片ID
uint32 K9F1G_ReadID(uint8 Chip);
// 判断操作是否完成, 返回FALSE为失败, 返回TRUE为成功
uint8 K9F1G08OK(uint8 Chip);
// 页读, size<=BYTESPERPAGE(2048)+BYTESPERPAGESPARE(64)
uint8 K9F1G_PageRead(uint8 *Buf, uint32 size, uint32 PageIndex, uint8 Chip);
// 读页附加数据, size<=BYTESPERPAGESPARE(64)
uint8 K9F1G_PageSpareRead(uint8 *Buf, uint32 size, uint32 PageIndex, uint8 Chip);
// 页内随机读, start+size<=BYTESPERPAGE(2048)+BYTESPERPAGESPARE(64)
uint8 K9F1G_PageRandRead(uint8 *Buf, uint32 size, uint32 start, uint32 PageIndex, uint8 Chip);
// 页编程, size<=BYTESPERPAGE(2048)+BYTESPERPAGESPARE(64)
// 返回FALSE为失败, 返回TRUE为成功
uint8 K9F1G_PageProgram(uint8 *Buf, uint32 size, uint32 PageIndex, uint8 Chip);
// 编程页附加数据, size<=BYTESPERPAGESPARE(64)
// 返回FALSE为失败, 返回TRUE为成功
uint8 K9F1G_PageSpareProgram(uint8 *Buf, uint32 size, uint32 PageIndex, uint8 Chip);
// 页内随机编程, start+size<=BYTESPERPAGE(2048)+BYTESPERPAGESPARE(64)
// 返回FALSE为失败, 返回TRUE为成功
uint8 K9F1G_PageRandProgram(uint8 *Buf, uint32 size, uint32 start, uint32 PageIndex, uint8 Chip);
// 芯片内页拷贝, 包括附加数据, 返回FALSE表示失败, TRUE为成功
uint8 K9F1G_PageCopyBackProgram(uint32 SourcePageIndex, uint32 DestPageIndex, uint8 Chip);
// 块擦除, 返回FALSE为失败, 返回TRUE为成功
uint8 K9F1G_BlockErase(uint32 BlockIndex, uint8 Chip);
// 可用块检测, 返回FALSE为坏块, TRUE为可用块
uint8 K9F1G_BlockCheck(uint32 BlockIndex, uint8 Chip);
// end of K9F1G08U0A basic operation
///////////////////////////////////////////////////////////////////////////
// customer board operation
// 初始化CPU与nand flash连接的管脚
void K9F1G_init(void);
// 写保护, Chip==0为第一片NAND FLASH, 其它值为第二片NAND FLASH
void K9F1G_lock(uint8 Chip);
void K9F1G_unlock(uint8 Chip);
uint8 K9F1G_chkbusy(uint8 Chip);
///////////////////////////////////////////////////////////////////////////
#ifdef __cplusplus
}
#endif
#endif // #ifndef _K9F1G08_H
// end of K9F1G08.h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -