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.
[in] | nand_addr_t | start_block: address of start block to unlock (column is ignored) |
[in] | nand_addr_t | end_block: address of end block to unlock (column is ignored) |
DRIVER_NOT_INITIALIZED | |
INVALID_NAND_ADDRESS | |
NAND_SUCCESS |
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; }