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

📄 samsung_nand.h

📁 新一代基于事件的嵌入式操作系统dyos在三星的s3c44b0的arm芯片上的完整移植代码
💻 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 + -