summaryrefslogtreecommitdiff
path: root/memories/nandflash/SkipBlockNandFlash.h
blob: 26fbd2d4d66f2c5b44dd8b917a95b6d4b30ebb44 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/* ----------------------------------------------------------------------------
 *         ATMEL Microcontroller Software Support 
 * ----------------------------------------------------------------------------
 * Copyright (c) 2008, Atmel Corporation
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * - Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the disclaimer below.
 *
 * Atmel's name may not be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * ----------------------------------------------------------------------------
 */

//------------------------------------------------------------------------------
/// \page "SkipBlockNandFlash"
///
/// !!!Purpose
/// 
/// SkipBlockNandFlash layer supplies application a set of interface to operate nandflash, which include 
/// initialize, block erase, block write/read, page write/read. This layer is called by upper layer 
/// applications, and it will call lower layer drivers, such as EccNandFlash, RawNandFlash.
///
/// !!!Usage
/// -# SkipBlockNandFlash_Initialize is used to initializes a SkipBlockNandFlash instance. Scans 
///      the device to retrieve or create block status information.
/// -# SkipBlockNandFlash_EraseBlock is used to erase a certain block in the device, user can 
///      select "check block status before erase" or "erase without check"
/// -# User can use SkipBlockNandFlash_WriteBlock to write a certain block and SkipBlockNandFlash_WritePage
///      to write a certain page. The functions will check the block status before write, if the block
///      is not a good block, the write command will not be issued.
/// -# User can use SkipBlockNandFlash_ReadBlock to read a certain block and SkipBlockNandFlash_ReadPage
///      to read a certain page. The functions will check the block status before read, if the block
///      is not a good block, the read command will not be issued. ECC is also checked after read
///      operation is finished, an error will be reported if ecc check got errors.  
//------------------------------------------------------------------------------

#ifndef SKIPBLOCKNANDFLASH_H
#define SKIPBLOCKNANDFLASH_H

//------------------------------------------------------------------------------
//         Headers
//------------------------------------------------------------------------------

#include "NandCommon.h"
#include "EccNandFlash.h"

//------------------------------------------------------------------------------
//         Definitions
//------------------------------------------------------------------------------

#define NandBlockStatus_BAD   0xBA

// Erase types
/// Check block before erase
#define NORMAL_ERASE    0x00000000
/// Do NOT check the block status before erasing it
#define SCRUB_ERASE     0x0000EA11
// Values returned by the CheckBlock() function
#define BADBLOCK        255
#define GOODBLOCK       254


//------------------------------------------------------------------------------
//         Types
//------------------------------------------------------------------------------

struct SkipBlockNandFlash {
    struct EccNandFlash ecc;
};

//------------------------------------------------------------------------------
//         Exported functions
//------------------------------------------------------------------------------

extern unsigned char SkipBlockNandFlash_CheckBlock(
    const struct SkipBlockNandFlash *skipBlock,
    unsigned short block);

extern unsigned char SkipBlockNandFlash_Initialize(
    struct SkipBlockNandFlash *skipBlock,
    const struct NandFlashModel *model,
    unsigned int commandAddress,
    unsigned int addressAddress,
    unsigned int dataAddress,
    const Pin pinChipEnable,
    const Pin pinReadyBusy);

extern unsigned char SkipBlockNandFlash_EraseBlock(
    struct SkipBlockNandFlash *skipBlock,
    unsigned short block,
    unsigned int eraseType);

extern unsigned char SkipBlockNandFlash_ReadPage(
    const struct SkipBlockNandFlash *skipBlock,
    unsigned short block,
    unsigned short page,
    void *data,
    void *spare);

unsigned char SkipBlockNandFlash_ReadBlock(
    const struct SkipBlockNandFlash *skipBlock,
    unsigned short block,
    void *data);

extern unsigned char SkipBlockNandFlash_WritePage(
    const struct SkipBlockNandFlash *skipBlock,
    unsigned short block,
    unsigned short page,
    void *data,
    void *spare);

unsigned char SkipBlockNandFlash_WriteBlock(
    const struct SkipBlockNandFlash *skipBlock,
    unsigned short block,
    void *data);

#endif //#ifndef SKIPBLOCKNANDFLASH_H

personal git repositories of Harald Welte. Your mileage may vary