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

📄 nand.c

📁 周立公开发板
💻 C
📖 第 1 页 / 共 2 页
字号:
    __COMMAND       = K9FXX_BLOCK_PROGRAM_1;                            /* 页编程指令1,为80H            */
       
    __ADDR          = uiCol;                                            /* 一字节列地址                 */
    
    __ADDR          = (uint8)(uiRow & 0xff);                            /* 两字节的行地址               */
      
    __ADDR          = (uint8)((uiRow >> 8) & 0xff);  
   
    i = uiNum;
    
    do {                                                                /* 写入数据                     */
         
        __DATA = *pucStr++;
    
    } while(--i != 0);  
    
    __COMMAND       = K9FXX_BLOCK_PROGRAM_2;                            /* 页编程指令2,为10H            */    
   
    
    return nandOK();                                                    /* 返回编程结果                 */
   
}

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

uint8 nandSectorCProgram (uint8 *pucBuf, uint32 uiCol, uint8 uiRow, uint32 uiCNum)
{
    uint32  i;
    
    __COMMAND       = K9FXX_SET_ADDR_C;                                 /* 定位到C区指令50H             */
    __COMMAND       = K9FXX_BLOCK_PROGRAM_1;                            /* 编程页操作空闲区(C)的指令80H */
    __ADDR          = uiCol;                                            /* 一字节列地址                 */
    __ADDR          = (uint8)(uiRow & 0xff);                            /* 两字节的行地址               */
    __ADDR          = (uint8)((uiRow >> 8) & 0xff); 
    
    i = uiCNum;
    
    do {
        __DATA = *pucBuf++;                                             /* 写入数据                     */
    } while(--i != 0);  
    
    __COMMAND       = K9FXX_BLOCK_PROGRAM_2;                            /* 页编程指令2,为10H            */
     
    return nandOK();                                                    /* 返回编程结果                 */
}

/*********************************************************************************************************
** Function name:			nandBlockErase
**
** Descriptions:			块擦除
**							
**
** input parameters:		uiRow : 以页面为单位的索引
**                          
** Returned value:			TURE:   成功
**                          FALSE:  失败
** Created by:				杨市平
** Created Date:			2008/03/18
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

uint8 nandBlockErase (uint32 uiRow)
{
    uint8 temp;
    __COMMAND       = K9FXX_BLOCK_ERASE_1;                              /* 块擦除操作指令1,为60H        */
    
    temp = (uint8)(uiRow & 0xff);
    __ADDR          = temp;                                             /* 两字节的行地址               */
    
    temp = (uint8)((uiRow >> 8) & 0xff);
    __ADDR          = temp;  
    __COMMAND       = K9FXX_BLOCK_ERASE_2;                              /* 块擦除操作指令2,为D0H        */
    
    return nandOK();                                                    /* 返回块擦除结果               */
}
/*********************************************************************************************************
** Function name:			nandReadID
**
** Descriptions:			读芯片ID
**							
**
** input parameters:		无
**                          
** Returned value:			芯片的ID号
**
** Created by:				杨市平
** Created Date:			2008/03/18
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

uint16 nandReadID (void)
{
    uint8   ucA, ucB;
    
    __COMMAND       = K9FXX_READ_ID;                                    /* 读芯片ID指令,为90H           */
    __ADDR          = 0x00;                                             /* 一个字节的地址,为00H         */
    
    ucA             = __DATA;                                           /* 读芯片ID                     */
    ucB             = __DATA;
    
    return          (uint16)((ucA << 8) | ucB);   
}
/*********************************************************************************************************
** Function name:			nandSectorCheck
**
** Descriptions:			校验扇区数据
**							
**
** input parameters:		pucBuf: 要校验的数据,大小必须>=512字节
**                          uiCoL : 以列地址的索引
                            uiRow : 以页面为单位的索引
                            uiNum : 写入的字节数
** Returned value:			TURE: 数据正确
**                          FALSE:数据错误
**                          
** Created by:				杨市平
** Created Date:			2008/03/18
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

uint8 nandSectorCheck (uint8 *pucBuf, uint32 uiCol, uint8 uiRow, uint32 uiNum)
{
   
      
    uint32  i;
    
    __COMMAND     = K9FXX_SET_ADDR_A;
    __ADDR        = uiCol;
    __ADDR        = (uint8)(uiRow & 0xff);
    __ADDR        = (uint8)((uiRow >> 8) & 0xff); 
    
    while (1) {
        if ((nandReadStatus() & K9FXX_BUSY) != 0) {
        
            break;
        }
    }
    
    __COMMAND     = K9FXX_SET_ADDR_A;
    
    i = uiNum;
    
    do {
        if (*pucBuf++ != __DATA) {
            return FALSE;
        }
    } while(--i != 0);  
    
    return TRUE;  
   
}
/*********************************************************************************************************
** Function name:			nandSectorCCheck
**
** Descriptions:			校验C区数据
**							
**
** input parameters:		pucBuf: 要校验的数据,大小必须>=16字节
**                          uiCoL : 以列地址的索引
                            uiRow : 以页面为单位的索引
                            uiCNum : 写入的字节数
** Returned value:			TURE: 数据正确
**                          FALSE:数据错误
**                          
** Created by:				杨市平
** Created Date:			2008/03/18
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

uint8 nandSectorCCheck (uint8 *pucBuf, uint32 uiCol, uint8 uiRow, uint32 uiCNum)
{
    uint32  i;
    
    __COMMAND     = K9FXX_SET_ADDR_C;
    __ADDR        = uiCol;
    __ADDR        = (uint8)(uiRow & 0xff);
    __ADDR        = (uint8)((uiRow >> 8) & 0xff); 
    
    while (1) {
        if ((nandReadStatus() & K9FXX_BUSY) != 0) {
        
            break;
        }
    }
    
    __COMMAND     = K9FXX_SET_ADDR_C;
    
    i = uiCNum;
    
    do {
        if (*pucBuf++ != __DATA) {
            return FALSE;
        }
    } while(--i != 0);  
    
    return TRUE;  
   
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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