summaryrefslogtreecommitdiff
path: root/memories/nandflash/RawNandFlash.h
blob: 64a48ddf8ffd39c5a8747aee39f16281dfe1d328 (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
135
136
137
138
139
/* ----------------------------------------------------------------------------
 *         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 "RawNandflash"
///
/// !!!Purpose
/// 
/// RawNandflash is a bl Nandflash driver, it directly interacts with hardware's register to 
/// operate Nandflash interface, and it is called by upper layer drivers, such as EccNandFlash
///  
/// !!!Usage
///
/// -# RawNandFlash_Initialize is used to initializes a RawNandFlash instance based on the given
///      model and physical interface. If no model is provided, then the function tries to autodetect
///      it.
/// -# RawNandFlash_Reset is used to reset a Nandflash device.
/// -# RawNandFlash_ReadId is used to read a Nandflash's id.
/// -# RawNandFlash_EraseBlock is used to erase a certain Nandflash device's block.
/// -# RawNandFlash_ReadPage and RawNandFlash_WritePage is used to do read/write operation.
/// -# RawNandFlash_CopyPage is used to issue copypage command to Nandflash device.
/// -# RawNandFlash_CopyBlock calls RawNandFlash_CopyPage to do a Nandflash block copy.
//------------------------------------------------------------------------------


#ifndef RAWNANDFLASH_H
#define RAWNANDFLASH_H

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

#include "NandFlashModel.h"
#include <pio/pio.h>

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

//------------------------------------------------------------------------------
/// Describes a physical NandFlash chip connected to the SAM microcontroller.
//------------------------------------------------------------------------------
struct RawNandFlash {

    /// Model describing this NandFlash characteristics.
    struct NandFlashModel model;
    /// Address for sending commands to the NandFlash.
    unsigned int commandAddress;
    /// Address for sending addresses to the NandFlash
    unsigned int addressAddress;
    /// Address for sending data to the NandFlash.
    unsigned int dataAddress;
    /// Pin used to enable the NandFlash chip.
    Pin pinChipEnable;
    /// Pin used to monitor the ready/busy signal from the NandFlash.
    Pin pinReadyBusy;
};

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

extern unsigned char RawNandFlash_Initialize(
    struct RawNandFlash *raw,
    const struct NandFlashModel *model,
    unsigned int commandAddress,
    unsigned int addressAddress,
    unsigned int dataAddress,
    const Pin pinChipEnable,
    const Pin pinReadyBusy);

extern void RawNandFlash_Reset(const struct RawNandFlash *raw);

extern unsigned int RawNandFlash_ReadId(const struct RawNandFlash *raw);

extern unsigned char RawNandFlash_EraseBlock(
    const struct RawNandFlash *raw,
    unsigned short block);

extern unsigned char RawNandFlash_ReadPage(
    const struct RawNandFlash *raw,
    unsigned short block,
    unsigned short page,
    void *data,
    void *spare);

extern unsigned char RawNandFlash_WritePage(
    const struct RawNandFlash *raw,
    unsigned short block,
    unsigned short page,
    void *data,
    void *spare);

extern unsigned char RawNandFlash_CopyPage(
    const struct RawNandFlash *raw,
    unsigned short sourceBlock,
    unsigned short sourcePage,
    unsigned short destBlock,
    unsigned short destPage);

extern unsigned char RawNandFlash_CopyBlock(
    const struct RawNandFlash *raw,
    unsigned short sourceBlock,
    unsigned short destBlock);

#if defined(CHIP_NAND_CTRL)
extern void RawNandlfash_SetDma(void);
extern void RawNandlfash_ClearDma(void);
extern unsigned char RawNandlfash_GetDma(void);
#endif

#endif //#ifndef RAWNANDFLASH_H

personal git repositories of Harald Welte. Your mileage may vary