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

📄 davincihd_nandflash_erase.c

📁 DM6467 Bootloader源码
💻 C
字号:
/*
 *  Copyright 2007 by Spectrum Digital Incorporated.
 *  All rights reserved. Property of Spectrum Digital Incorporated.
 */

/*
 *  NAND Flash interface
 *
 */

#include "davincihd_nandflash.h"

/*
 *  NAND Organization
 */
extern NAND_ORGANIZATION nand_org;

/*
 *  NAND Flash timeout
 */
extern Int32 nand_erase_timeout;

/* ------------------------------------------------------------------------ *
 *                                                                          *
 *  _NAND_eraseBlock( start_block, block_count )                            *
 *      Erase the blocks of Flash memory                                    *
 *                                                                          *
 *      Inputs:                                                             *
 *          start_block = start block                                       *
 *          block_count = # of blocks                                       *
 *                                                                          *
 *      Return:                                                             *
 *          =0  pass                                                        *
 *          >0  failed - bad pages                                          *
 *          -1  timeout                                                     *
 *                                                                          *
 * ------------------------------------------------------------------------ */
Int16 _NAND_eraseBlock( Uint32 start_block, Uint32 block_count )
{
    Uint32 i;
    Uint32 block_addr;
    Uint32 status;
    Uint32 retcode = 0;

    for ( i = start_block ; i < start_block + block_count ; i++ )
    {
        /* Fix for large page addressing */
        block_addr = i * nand_org.block_addr_incr;

        /* Erase a single block */
        _NAND_CMD( CMD_ERASE );             // Erase block
        _NAND_BLOCK_ADDR( block_addr );     // Block Address
        _NAND_CMD( CMD_ERASE_CONFIRM );     // Confirm Erase

        if ( _NAND_busywait( nand_erase_timeout ) )
            return NAND_ERR_TIMEOUT;

        /* Check status of erase */
        _NAND_CMD( CMD_STATUS );            // Check Status
        status = NAND_DATA;

        if ( status & CMD_STATUS_ERROR )
        {
            retcode++;
            nand_org.invalid_block_table[nand_org.invalid_blocks++] = i;
        }
    }

    return retcode;
}

⌨️ 快捷键说明

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