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

📄 nand.c

📁 周立公开发板
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			Nand.c
** Last modified Date:  2007-9-20
** Last Version:		1.0
** Descriptions:		对Nand型Flash K9F28XXUOC进行编程、擦除等操作 
**
**------------------------------------------------------------------------------------------------------
** Created by:			Yuping  Wang    
** Created date:		2007-9-20
** Version:				1.0
** Descriptions:		The original version    初始版本
**
**------------------------------------------------------------------------------------------------------
** Modified by:         杨市平
** Modified date:       2008-03-18
** Version:             V1.1
** Descriptions:        
**
********************************************************************************************************/
#include "config.h"

#define  __GLOBAL_NAND

#define __DATA        (*((volatile uint8 *)0x83000000))                 /* 数据操作的存储器地址         */
#define __ADDR        (*((volatile uint8 *)0x83080000))                 /* 地址输入的存储器地址         */
#define __COMMAND     (*((volatile uint8 *)0x83100000))                 /* 命令输入的存储器地址         */


/*********************************************************************************************************
** Function name:			nandReadStatus
**
** Descriptions:			读Nand Flash的状态
**							
**
** input parameters:		无
** Returned value:			当前Nand
**
** Created by:				杨市平
** Created Date:			2008/03/18
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

uint8   nandReadStatus (void)
{
    uint8 ucReturn;
    
    ucReturn  = 0xff;       
   
    __COMMAND = K9FXX_READ_STATUS;                                      /* 输入读状态命令70H            */
   
    ucReturn  = __DATA;                                                 /* 读状态数据                   */
        
    return ucReturn;
}
/*********************************************************************************************************
** Function name:			nandOK
**
** Descriptions:			判断芯片操作是否完成
**							
**
** input parameters:		无
** Returned value:			TURE:   完成
**                          FALSE:  失败
** Created by:				杨市平
** Created Date:			2008/03/18
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

uint8 nandOK (void)
{
    uint8 ucTemp;    
       
    while (1) {
               
        ucTemp = nandReadStatus();                                      /* 读Nand Flash的当前状态       */
        
        ucTemp = ucTemp & K9FXX_BUSY;
         
        if ((ucTemp & K9FXX_BUSY) != 0) {
        
            break;
        }
    }
 
    ucTemp = nandReadStatus();                                          /* 读Nand Flash的操作是否成功   */
    if ((ucTemp & K9FXX_OK) == 0) {
        return TRUE;
    }
    else {
        return FALSE;
    }
}
/*********************************************************************************************************
** Function name:			nandSectorReadA
**
** Descriptions:			读芯片扇区
**							
**
** input parameters:		pucBuf: 指向缓存的指针,大小必须>=512字节
**                          uiCoL : 以列地址的索引
                            uiRow : 以页面为单位的索引
                            uiNum : 写入的字节数
** Returned value:			无
**                          
** Created by:				杨市平
** Created Date:			2008/03/18
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

void nandSectorReadA (uint8 *pucBuf, uint32 uiCol, uint8 uiRow, uint32 uiNum)
{

    uint32  i;
    
    __COMMAND     = K9FXX_SET_ADDR_A;                                   /* 读页操作的指令00H            */
    __ADDR        = uiCol;
                                                                        /* 一字节列地址                 */
    __ADDR        = (uint8)(uiRow & 0xff);                              /* 两字节的行地址               */
    __ADDR        = (uint8)((uiRow >> 8) & 0xff);  
    
   
    
    while (1) {
        if ((nandReadStatus() & K9FXX_BUSY) != 0) {                     // 读Nand Flash的当前状态       
        
            break;
        }
    }
    
    __COMMAND     = K9FXX_SET_ADDR_A;  
    
    i = uiNum;
    
    do {                                                                /* 读出数据                     */
        *pucBuf++ = __DATA;
    } while(--i != 0);    
   
}

/*********************************************************************************************************
** Function name:			nandSectorCRead
**
** Descriptions:			读芯片C区
**							
**
** input parameters:		pucBuf: 指向缓存的指针,大小必须>=16字节
**                          uiCoL : 以列地址的索引
                            uiRow : 以页面为单位的索引
                            uiCNum : 写入的字节数
** Returned value:			无
** Created by:				杨市平
** Created Date:			2008/03/18
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

void nandSectorCRead (uint8 *pucBuf, uint32 uiCol, uint8 uiRow, uint32 uiCNum)
{

    uint32  i;
    
    __COMMAND     = K9FXX_SET_ADDR_C;                                   /* 读页操作空闲区(C)的指令50H   */
    __ADDR        = uiCol;                                              /* 一字节列地址                 */
    __ADDR        = (uint8)(uiRow & 0xff);                              /* 两字节的行地址               */
    __ADDR        = (uint8)((uiRow >> 8) & 0xff);
        
  
    while (1) {
        if ((nandReadStatus() & K9FXX_BUSY) != 0) {                     // 读Nand Flash的当前状态       
        
            break;
        }
    }
    
    __COMMAND     = K9FXX_SET_ADDR_C;
   
       
    i = uiCNum;
    
    do {
        *pucBuf++ = __DATA;                                             /* 读出数据                     */
    } while(--i != 0);    
   
}

/*********************************************************************************************************
** Function name:			nandSectorProgram
**
** Descriptions:			编程芯片扇区
**							
**
** input parameters:		pucBuf: 指向要存数据的指针,大小必须>=512字节
**                          uiCoL : 以列地址的索引
                            uiRow : 以页面为单位的索引
                            uiNum : 写入的字节数
** Returned value:			TURE:   成功
**                          FALSE:  失败
** Created by:				杨市平
** Created Date:			2008/03/18
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

uint8 nandSectorProgram (uint8 *pucBuf, uint32 uiCol, uint8 uiRow, uint32 uiNum)
{
    uint32  i;   
    uint8   *pucStr;
   
   
    pucStr = pucBuf;
    
    __COMMAND       = K9FXX_SET_ADDR_A;                                 /* 定位到A区指令00H             */
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -