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

📄 nandflash.c

📁 ATMEL公司的demo程序,USB驱动程序,与识别片上flash,并进行枚举和操作.
💻 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 + -