- // Set up data flash programming functions.
- fd->open = dataflash_open;
- fd->close = dataflash_close;
- fd->read = dataflash_read;
- fd->write = dataflash_write;
- fd->seek = dataflash_seek;
-
- // Init data flash memory and micro pin.
- ASSERT(dataflash_pin_init());
-}
\ No newline at end of file
+ uint8_t stat;
+
+ MOD_CHECK(dataflash_hw);
+
+ ASSERT(fd);
+ ASSERT(ch);
+ ASSERT(setCS);
+ ASSERT(dev < DFT_CNT);
+
+ memset(fd, 0, sizeof(*fd));
+ DB(fd->fd._type = KFT_DATAFLASH);
+ fd->dev = dev;
+ fd->channel = ch;
+ fd->setReset = setReset;
+ fd->setCS = setCS;
+
+ // Setup data flash programming functions.
+ fd->fd.reopen = dataflash_reopen;
+ fd->fd.close = dataflash_close;
+ fd->fd.read = dataflash_read;
+ fd->fd.write = dataflash_write;
+ fd->fd.seek = kfile_genericSeek;
+ fd->fd.flush = dataflash_flush;
+
+ dataflash_reset(fd);
+
+ stat = dataflash_stat(fd);
+
+ /*
+ * 2,3,4,5 bits of 1 byte status register
+ * indicate a device density of dataflash memory
+ * (see datasheet for more detail.)
+ */
+ if (GET_ID_DESITY_DEVICE(stat) != mem_info[fd->dev].density_id)
+ return false;
+
+ fd->current_page = 0;
+ fd->fd.seek_pos = 0;
+ fd->fd.size = mem_info[fd->dev].page_size * mem_info[fd->dev].page_cnt;
+
+ /* Load selected page from dataflash memory */
+ dataflash_loadPage(fd, fd->current_page);
+ MOD_INIT(dataflash);
+ return true;
+}