69 lines
2.3 KiB
C
69 lines
2.3 KiB
C
#ifndef PARALLEL_NAND_H
|
|
#define PARALLEL_NAND_H
|
|
|
|
#include "parallel_nand_port.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define PNAND_MT29F1G08_PAGE_MAIN 2048UL
|
|
#define PNAND_MT29F1G08_PAGE_OOB 64UL
|
|
#define PNAND_MT29F1G08_PAGES_PER_BLOCK 64UL
|
|
#define PNAND_MT29F1G08_BLOCKS 1024UL
|
|
#define PNAND_MT29F1G08_COLUMN_CYCLES 2U
|
|
#define PNAND_MT29F1G08_ROW_CYCLES 2U
|
|
#define PNAND_MT29F1G08_PAGE_TOTAL \
|
|
(PNAND_MT29F1G08_PAGE_MAIN + PNAND_MT29F1G08_PAGE_OOB)
|
|
|
|
typedef enum {
|
|
PNAND_OK = 0,
|
|
PNAND_ERROR_ARGUMENT = -1,
|
|
PNAND_ERROR_PORT = -2,
|
|
PNAND_ERROR_TIMEOUT = -3,
|
|
PNAND_ERROR_RANGE = -4,
|
|
PNAND_ERROR_BUFFER = -5
|
|
} parallel_nand_result_t;
|
|
|
|
typedef struct {
|
|
unsigned long page_main_size;
|
|
unsigned long page_oob_size;
|
|
unsigned long pages_per_block;
|
|
unsigned long block_count;
|
|
unsigned int column_cycles;
|
|
unsigned int row_cycles;
|
|
unsigned long ready_timeout_us;
|
|
} parallel_nand_geometry_t;
|
|
|
|
typedef struct {
|
|
const parallel_nand_port_t *port;
|
|
parallel_nand_geometry_t geometry;
|
|
} parallel_nand_t;
|
|
|
|
extern const parallel_nand_geometry_t parallel_nand_mt29f1g08_geometry;
|
|
|
|
int parallel_nand_init(parallel_nand_t *nand,
|
|
const parallel_nand_port_t *port,
|
|
const parallel_nand_geometry_t *geometry);
|
|
int parallel_nand_reset(parallel_nand_t *nand);
|
|
int parallel_nand_read_status(parallel_nand_t *nand, pnand_octet_t *status);
|
|
int parallel_nand_read_id(parallel_nand_t *nand, pnand_octet_t address,
|
|
pnand_octet_t *id, unsigned int count);
|
|
int parallel_nand_read_page(parallel_nand_t *nand, unsigned long page,
|
|
pnand_octet_t *main_data,
|
|
unsigned long main_capacity,
|
|
pnand_octet_t *oob,
|
|
unsigned long oob_capacity);
|
|
int parallel_nand_read_page_slice(parallel_nand_t *nand, unsigned long page,
|
|
unsigned long column, pnand_octet_t *out,
|
|
unsigned long count);
|
|
int parallel_nand_is_bad_block(parallel_nand_t *nand, unsigned long block,
|
|
int *is_bad);
|
|
unsigned long parallel_nand_page_count(const parallel_nand_t *nand);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|