📄 samsung_nand.h
字号:
//----------------------------------------------------
//Copyright (C), 2004-2009, lst.
//版权所有 (C), 2004-2009, lst.
//所属模块: 文件系统芯片驱动
//作者:lst
//版本:V1.0.0
//文件描述: 用于三星nand flash的文件系统驱动模块
//其他说明:
//修订历史:
// 2. ...
// 1. 日期:
// 作者:
// 新版本号:
// 修改说明:
//------------------------------------------------------
#ifndef _2808U0B_H_
#define _2808U0B_H_
#ifdef __cplusplus
extern "C" {
#endif
#include "inc_os.h"
#include "gpio.h"
#define SamsungNand (0xec << 16)
#define k9f2808u0b 0x73
#define k9f2808q0b 0x33
#define cn_block_size 16384
#define cn_sector_size 512
#define cn_oob_size 16
#define cn_blocks_sum 1024
#define cn_fs_buf_len cn_block_size //文件缓冲区尺寸,
#define cn_reserve_blocks 0 //定义一个保留区,紧跟MDR表
//下面定义各操作等待时间,单位微秒
#define cn_wait_address_ready 10
#define cn_wait_page_write 200
#define cn_wait_block_erase 2000
#define cn_wait_reset 500
//ecc校验操作结果
#define cn_all_right_verify 0 //完全正确
#define cn_ecc_right_verify 1 //经ecc纠正正确
#define cn_ecc_error_verify 2 //错误,不能纠正
#define cn_other_error_verify cn_limit_uint32 //其他错误,一般是非法参数
#define nand_ce_port pg_gpio_reg->PDATC
#define nand_ce_bit (0x02)
#define nand_busy_port pg_gpio_reg->PDATC
#define nand_busy_bit (0x01)
#define nand_cle_port pg_gpio_reg->PDATC
#define nand_cle_bit (0x04)
#define nand_ale_port pg_gpio_reg->PDATC
#define nand_ale_bit (0x08)
#define nand_rw_address 0x2000000
#define ce_active() nand_ce_port &= ~nand_ce_bit
#define ce_inactive() nand_ce_port |= nand_ce_bit
#define address_start() nand_ale_port |= nand_ale_bit
#define address_end() nand_ale_port &= ~nand_ale_bit
#define command_start() nand_cle_port |= nand_cle_bit
#define command_end() nand_cle_port &= ~nand_cle_bit
#define CN_FS_BUF_TICKS (1000) //文件自动写入时间,降低掉电损失
#define CN_FS_BUF_BLOCKS (16) //文件缓冲块数,
// Flash commands:
#define cn_2808_select_page0 0x00
#define cn_2808_select_page1 0x01
#define cn_2808_select_oob 0x50
#define cn_2808_reset 0xff
#define cn_2808_page_program 0x80
#define cn_2808_startup_write 0x10
#define cn_2808_block_erase 0x60
#define cn_2808_startup_erase 0xd0
#define cn_2808_read_status 0x70
#define cn_2808_read_id 0x90
#define cn_2808_failure 0x01
#define RB 0x40
void __read_sector_and_oob(uint32_t sector,uint8_t *data);
bool_t write_PCRB_2808(uint32_t PCRB_block,
uint32_t protected_block,uint8_t *buf);
bool_t restore_PCRB_2808(uint32_t PCRB_block,uint32_t *restored);
bool_t __wait_ready_2808(void);
bool_t __wait_ready_2808_slow(uint16_t wait_time);
void __write_command_2808(uint8_t val);
uint32_t __read_sector_2808_no_ecc(uint32_t sector,uint32_t offset,
uint8_t *data,uint32_t size);
uint32_t read_block_ss_no_ecc(uint32_t block,uint32_t offset,
uint8_t *buf,uint32_t size);
uint32_t __correct_sector(uint8_t *data,const uint8_t *old_ecc);
uint32_t __read_sector_2808_with_ecc(uint32_t sector,uint32_t offset,
uint8_t *data,uint32_t size);
uint32_t read_block_ss_with_ecc(uint32_t block,uint32_t offset,
uint8_t *buf,uint32_t size);
uint8_t __read_status_2808(void);
uint32_t __write_sector_2808_no_ecc(uint32_t sector,uint32_t offset,
uint8_t *data,uint32_t size);
uint32_t write_block_ss_no_ecc(uint32_t block,uint32_t offset,
uint8_t *buf,uint32_t size);
uint32_t __write_sector_2808_with_ecc(uint32_t sector,uint32_t offset,
uint8_t *data,uint32_t size);
uint32_t write_block_ss_with_ecc(uint32_t block,uint32_t offset,
uint8_t *buf,uint32_t size);
bool_t erase_block_2808(uint32_t block_no);
bool_t __erase_all_2808(void);
bool_t query_block_ready_ss_with_ecc(uint32_t block,uint32_t offset,
uint8_t *buf,uint32_t size);
bool_t query_block_ready_2808_no_ecc(uint32_t block,uint32_t offset,
uint8_t *buf,uint32_t size);
bool_t query_ready_with_data_2808(uint8_t *new_data,uint8_t *org_data,
uint32_t size);
bool_t check_block_2808(uint32_t block_no);
bool_t __mark_invalid_block(uint32_t block);
uint32_t __check_all_ss(void);
void __make_sector_ecc(const uint8_t *data,uint8_t *ecc);
bool_t __read_chip_id (uint32_t *vendor_id,uint32_t *chip_id);
void __reset_2808(void);
bool_t module_init_fs_samsung_flash(void);
#ifdef __cplusplus
}
#endif
#endif // _2808U0B_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -