Micron MT29F NAND driver
MT_uint8 NAND_Unlock ( nand_addr_t  start_block,
nand_addr_t  end_block 
)

By default at power-on, if LOCK is HIGH, all the blocks are locked and protected from PROGRAM and ERASE operations. If portions of the device are unlocked using the UNLOCK (23h) command, they can be locked again using the LOCK (2Ah) command.

Parameters:
[in]nand_addr_tstart_block: address of start block to unlock (column is ignored)
[in]nand_addr_tend_block: address of end block to unlock (column is ignored)
Returns:
Return code
Return values:
DRIVER_NOT_INITIALIZED
INVALID_NAND_ADDRESS
NAND_SUCCESS
Pseudo Code Steps
  1. Send unlock low command (23h)
  2. Send start block address (row only cycles)
  3. Send unlock command (24h)
  4. Send end block address (row only cycles)

Definition at line 1320 of file nand_MT29F_lld.c.

References __build_cycle_addr(), __compare_addr(), __is_valid_addr(), ADDR_A_GT_B, CMD_BLOCK_UNLOCK_HIGH, CMD_BLOCK_UNLOCK_LOW, driver_status, DRIVER_STATUS_INITIALIZED, DRIVER_STATUS_NOT_INITIALIZED, NAND_INVALID_NAND_ADDRESS, NAND_SUCCESS, NUM_OF_ADDR_CYCLE, PLATFORM_Close(), PLATFORM_Open(), PLATFORM_SendAddr(), and PLATFORM_SendCmd().

                                                                     {
   MT_uint8 start_address_stream[NUM_OF_ADDR_CYCLE];
   MT_uint8 end_address_stream[NUM_OF_ADDR_CYCLE];

   /* 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(start_block)) || (NAND_SUCCESS != __is_valid_addr(end_block)))
      return NAND_INVALID_NAND_ADDRESS;

   /* verify if start_block < end_block */
   if(ADDR_A_GT_B == __compare_addr(start_block, end_block) )
      return NAND_INVALID_NAND_ADDRESS;

   /* build address cycles for start and end block */
   __build_cycle_addr(start_block, start_address_stream);
   __build_cycle_addr(end_block, end_address_stream);

   /* init board transfer */
   PLATFORM_Open();

   /* send command */
   PLATFORM_SendCmd(CMD_BLOCK_UNLOCK_LOW);

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

   /* send command */
   PLATFORM_SendCmd(CMD_BLOCK_UNLOCK_HIGH);

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

   /* close board transfer */
   PLATFORM_Close();

   return NAND_SUCCESS;

}