Micron MT29F NAND driver
|
MT_uint8 NAND_OTP_Page_Program | ( | nand_addr_t | addr, |
flash_width * | buffer, | ||
MT_uint32 | lenght | ||
) |
The PROGRAM PAGE (80h-10h) command enables the host to input data to a cache register, and moves the data from the cache register to the specified block and page address in the array of the selected die (LUN). Use this function only to program OTP area!
[in] | nand_addr_t | addr: address where start reading |
[in] | flash_width | *buffer: the buffer contains the data to program into the flash [in] MT_uint32 lenght: number of byte (or word) to program |
DRIVER_STATUS_NOT_INITIALIZED | |
NAND_INVALID_NAND_ADDRESS | |
NAND_PROGRAM_FAILED_WRITE_PROTECT | |
NAND_PROGRAM_FAILED | |
NAND_SUCCESS | |
NAND_TIMEOUT |
Definition at line 1657 of file nand_MT29F_lld.c.
References __build_cycle_addr(), CMD_PAGE_PROGRAM, CMD_PAGE_PROGRAM_CONFIRM, parameter_page_t::data_bytes_per_page, device_info, driver_status, DRIVER_STATUS_INITIALIZED, DRIVER_STATUS_NOT_INITIALIZED, parameter_page_t::feature, NAND_INVALID_LENGHT, NAND_Read_Status(), NAND_SUCCESS, NUM_OF_ADDR_CYCLE, PLATFORM_Close(), PLATFORM_Open(), PLATFORM_SendAddr(), PLATFORM_SendCmd(), PLATFORM_SendData(), and SUPPORTED_16_BIT_DATA_BUS_WIDTH.
{ MT_uint8 address[5]; MT_uint8 status_reg; MT_uint32 k; int i; /* verify if driver is initialized */ if(DRIVER_STATUS_INITIALIZED != driver_status) return DRIVER_STATUS_NOT_INITIALIZED; /* x16 */ if((device_info.feature & SUPPORTED_16_BIT_DATA_BUS_WIDTH) != 0) { if(lenght > (device_info.data_bytes_per_page >> 1) ) return NAND_INVALID_LENGHT; } /* x8 */ if(lenght > device_info.data_bytes_per_page) return NAND_INVALID_LENGHT; __build_cycle_addr(addr, address); /* init board transfer */ PLATFORM_Open(); /* send command */ PLATFORM_SendCmd(CMD_PAGE_PROGRAM); /* send address */ for(i=0; i<NUM_OF_ADDR_CYCLE; i++) PLATFORM_SendAddr(address[i]); /* send data */ for(k=0; k<lenght; k++) PLATFORM_SendData(buffer[k]); /* send command */ PLATFORM_SendCmd(CMD_PAGE_PROGRAM_CONFIRM); status_reg = NAND_Read_Status(); /* close board transfer */ PLATFORM_Close(); return NAND_SUCCESS; }