+ Mt29f *fls = FLASH_CAST(blk);
+ uint32_t cycle0;
+ uint32_t cycle1234;
+
+ ASSERT(offset == 0);
+ ASSERT(size == blk->blk_size);
+
+ kprintf("write direct\n");
+
+ if (!kblock_buffered(blk) && (_buf != (void *)NFC_SRAM_BASE_ADDR))
+ memcpy((void *)NFC_SRAM_BASE_ADDR, _buf, size);
+
+ mt29f_getAddrCycles(idx, 0, &cycle0, &cycle1234);
+
+ mt29f_sendCommand(
+ NFC_CMD_NFCCMD | NFC_CMD_NFCWR | NFC_CMD_NFCEN | MT29F_CSID | NFC_CMD_ACYCLE_FIVE |
+ MT29F_CMD_WRITE_1 << 2,
+ cycle0, cycle1234);
+
+ if (!mt29f_waitTransferComplete())
+ {
+ LOG_ERR("mt29f: write timeout\n");
+ fls->hw->status |= MT29F_ERR_WR_TMOUT;
+ return 0;
+ }
+
+ mt29f_sendCommand(
+ NFC_CMD_NFCCMD | MT29F_CSID | NFC_CMD_ACYCLE_NONE |
+ MT29F_CMD_WRITE_2 << 2,
+ 0, 0);
+
+ while (!mt29f_isReadyBusy());
+
+ if (!mt29f_isOperationComplete())
+ {
+ LOG_ERR("mt29f: error writing page\n");
+ fls->hw->status |= MT29F_ERR_WRITE;
+ return 0;
+ }
+
+ return size;