1. ValidateFlashImage --> ReadFlashSize --> DeviceIDCommand = 0x9F 2. EraseFlash(FlashWriteStartAddress, TotalFlashWriteSize, IsSlaveController) for (RemainingBytes = EraseSize, Offset = EraseStartAddress; RemainingBytes > 0; RemainingBytes -= FlashEraseChunkSize, Offset += FlashEraseChunkSize) { Write Enable --> WriteEnableCommand = 0x06 WaitForFlashWriteEnable --> DeviceStatusCommand = 0x05 EraseCommand = 0x20 WaitForFlashOperationToComplete --> DeviceStatusCommand = 0x05 } 3. InitFlashOperation for (RemainingBytes = TotalFlashWriteSize, Offset = 0; RemainingBytes > 0; RemainingBytes -= FlashWriteChunkSize, Offset += FlashWriteChunkSize) { StartWrite --> WriteEnableCommand = 0x06 WaitForFlashWriteEnable --> DeviceStatusCommand = 0x05 PageProgramCommand = 0x02 WaitForFlashOperationToComplete --> DeviceStatusCommand = 0x05 } 4. Verify --> FastReadCommand = 0x0B