Micron MT29F NAND driver

Erase operations are used to clear the contents of a block in the NAND Flash array to prepare its pages for program operations.

Parameters:
[in]nand_addr_taddr: any valid address within the block to erase (column address is ignored)
Returns:
Return code
Return values:
NAND_SUCCESS
NAND_TIMEOUT
Pseudo Code Steps
  1. Send erase block command (60h)
  2. Send row address of the block
  3. Send confirm command (D0h)
  4. Wait tWB nanoseconds
  5. Wait for ready
  6. Check status register value data

Definition at line 605 of file nand_MT29F_lld.c.

References __build_cycle_addr(), __is_valid_addr(), __wait_for_ready(), CMD_ERASE_BLOCK, CMD_ERASE_BLOCK_CONFIRM, driver_status, DRIVER_STATUS_INITIALIZED, DRIVER_STATUS_NOT_INITIALIZED, NAND_ERASE_FAILED, NAND_ERASE_FAILED_WRITE_PROTECT, NAND_INVALID_NAND_ADDRESS, NAND_Read_Status(), NAND_SUCCESS, PLATFORM_Close(), PLATFORM_Open(), PLATFORM_SendAddr(), PLATFORM_SendCmd(), PLATFORM_Wait(), STATUS_FAIL, STATUS_WRITE_PROTECTED, and TIME_WB.

                                            {
   MT_uint8 row_address[5];
   MT_uint8 status_reg;
   MT_uint8 ret;

   /* verify if driver is initialized */
   if(DRIVER_STATUS_INITIALIZED != driver_status)
      return DRIVER_STATUS_NOT_INITIALIZED;

   /* check input parameters */
   if(NAND_SUCCESS != __is_valid_addr(addr))
      return NAND_INVALID_NAND_ADDRESS;

   __build_cycle_addr(addr, row_address);

   /* init board transfer */
   PLATFORM_Open();

   /* send command  */
   PLATFORM_SendCmd(CMD_ERASE_BLOCK);

   /* send row address (3rd, 4th, 5th cycle) */
   PLATFORM_SendAddr(row_address[2]);
   PLATFORM_SendAddr(row_address[3]);
   PLATFORM_SendAddr(row_address[4]);

   /* send confirm command */
   PLATFORM_SendCmd(CMD_ERASE_BLOCK_CONFIRM);

   /* wait */
   PLATFORM_Wait(TIME_WB);
   ret = __wait_for_ready();

    /* return if timeout occurs */
    if (NAND_SUCCESS != ret)
      return ret;

   status_reg = NAND_Read_Status();

   /* close board transfer */
   PLATFORM_Close();

   /* check if erase is good */
   if(!(status_reg & STATUS_WRITE_PROTECTED))
      return NAND_ERASE_FAILED_WRITE_PROTECT;

   if(status_reg & STATUS_FAIL)
      return NAND_ERASE_FAILED;

   return ret;
}