📄 nandflash.c
字号:
// ----------------------------------------------------------------------------
// ATMEL Microcontroller Software Support - ROUSSET -
// ----------------------------------------------------------------------------
// 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.
// ----------------------------------------------------------------------------
//* File Name : NandFlash.c
//* Object : NandFlash routine
//* Creation : NLe 25/Apr/2005
//*----------------------------------------------------------------------------
// Include Standard files
#include <assert.h>
#include <stdlib.h>
#include "po_types.h"
#include "flash.h"
#include "bfsa_flash.h"
#include "Board.h"
#include "trace.h"
#include "nand.h"
#include "nand_ids.h"
#include "jffs2.h"
#include "NandFlash.h"
// extern unsigned long nand_probe(unsigned long);
//*----------------------------------------------------------------------------
//* \fn AT91F_NandFlash_Init
//* \brief NandFlash init
//*----------------------------------------------------------------------------
void AT91F_NandFlash_Init (void)
{
// Setup Smart Media, first enable the address range of CS3 in HMATRIX user interface
AT91C_BASE_MATRIX->MATRIX_EBICSA |= AT91C_MATRIX_CS3A_SM;
// Configure SMC CS3
AT91C_BASE_SMC->SMC_SETUP3 = (AT91C_SM_NWE_SETUP | AT91C_SM_NCS_WR_SETUP |
AT91C_SM_NRD_SETUP | AT91C_SM_NCS_RD_SETUP);
AT91C_BASE_SMC->SMC_PULSE3 = (AT91C_SM_NWE_PULSE | AT91C_SM_NCS_WR_PULSE |
AT91C_SM_NRD_PULSE | AT91C_SM_NCS_RD_PULSE);
AT91C_BASE_SMC->SMC_CYCLE3 = (AT91C_SM_NWE_CYCLE | AT91C_SM_NRD_CYCLE);
AT91C_BASE_SMC->SMC_CTRL3 = (AT91C_SMC_READMODE | AT91C_SMC_WRITEMODE |
AT91C_SMC_NWAITM_NWAIT_DISABLE |
AT91C_SMC_DBW_WIDTH_EIGTH_BITS | AT91C_SM_TDF);
AT91F_PIOC_CfgPMC ();
// Configure Ready/Busy signal
AT91F_PIO_CfgInput(AT91C_BASE_PIOC, AT91C_PIO_PC15);
// Enable PC0=SMOE line PC1=SMWE, A21=CLE, A22=ALE
AT91F_PIO_CfgPeriph(AT91C_BASE_PIOC, (AT91C_PC0_SMOE | AT91C_PC1_SMWE), 0);
// Enable NandFlash
AT91F_PIO_CfgOutput(AT91C_BASE_PIOC, AT91C_PIO_PC14);
// NAND_ENABLE_CE(nand);
if(nand_probe(AT91_SMARTMEDIA_BASE))
TRACE_DEBUG_H( "\nNandFlash address : 0x%x\n", AT91_SMARTMEDIA_BASE);
else
TRACE_DEBUG_H( "\nNo NandFlash detected\n");
// Erase Block
// nand_erase(nand_dev_desc + curr_device, 0, SIZEONESECTOR, 0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -