51 uint8 valid_partition = 0;
54 fs->currentsector.dirty = 0;
56 fs->next_free_cluster = 0;
61 if (!
fs->disk_io.read_media)
68 if (!
fs->disk_io.read_media(0,
fs->currentsector.sector, 1))
113 if (!
fs->disk_io.read_media(
fs->lba_begin,
fs->currentsector.sector, 1))
136 fs->rootdir_first_sector = reserved_sectors + (num_of_fats *
fs->fat_sectors);
140 fs->fat_begin_lba =
fs->lba_begin + reserved_sectors;
143 fs->cluster_begin_lba =
fs->fat_begin_lba + (num_of_fats *
fs->fat_sectors);
164 if (
fs->sectors_per_cluster != 0) {
165 count_of_clusters = data_sectors /
fs->sectors_per_cluster;
167 if (count_of_clusters < 4085)
170 else if (count_of_clusters < 65525) {
172 fs->rootdir_first_cluster = 0;
193 return (
fs->cluster_begin_lba + (
fs->root_entry_count * 32 /
FAT_SECTOR_SIZE) + ((Cluster_Number - 2) *
fs->sectors_per_cluster));
195 return ((
fs->cluster_begin_lba + ((Cluster_Number - 2) *
fs->sectors_per_cluster)));
201 return fs->disk_io.read_media(lba, target, count);
207 return fs->disk_io.write_media(lba, target, count);
214 uint32 sector_to_read = 0;
215 uint32 cluster_to_read = 0;
222 if (offset < fs->rootdir_sectors)
223 lba =
fs->lba_begin +
fs->rootdir_first_sector + offset;
230 cluster_chain = start_cluster;
233 cluster_to_read = offset /
fs->sectors_per_cluster;
234 sector_to_read = offset - (cluster_to_read *
fs->sectors_per_cluster);
237 for (i = 0; i < cluster_to_read; i++)
250 return fs->disk_io.read_media(lba, target, 1);
252 else if (lba !=
fs->currentsector.address) {
253 fs->currentsector.address = lba;
254 return fs->disk_io.read_media(
fs->currentsector.address,
fs->currentsector.sector, 1);
269 if (sector < fs->rootdir_sectors)
270 lba =
fs->lba_begin +
fs->rootdir_first_sector + sector;
277 return fs->disk_io.read_media(lba, target, 1);
281 fs->currentsector.address = lba;
284 return fs->disk_io.read_media(
fs->currentsector.address,
fs->currentsector.sector, 1);
295 return fs->disk_io.read_media(lba, target, 1);
302 return fs->disk_io.read_media(
fs->currentsector.address,
fs->currentsector.sector, 1);
310 #if FATFS_INC_WRITE_SUPPORT
313 if (!
fs->disk_io.write_media)
321 if (sector < fs->rootdir_sectors)
322 lba =
fs->lba_begin +
fs->rootdir_first_sector + sector;
329 return fs->disk_io.write_media(lba, target, 1);
333 fs->currentsector.address = lba;
336 return fs->disk_io.write_media(
fs->currentsector.address,
fs->currentsector.sector, 1);
347 return fs->disk_io.write_media(lba, target, 1);
354 return fs->disk_io.write_media(
fs->currentsector.address,
fs->currentsector.sector, 1);
365 FAT_PRINTF((
" Root Dir First Cluster = %x\r\n",
fs->rootdir_first_cluster));
366 FAT_PRINTF((
" FAT Begin LBA = 0x%x\r\n",
fs->fat_begin_lba));
367 FAT_PRINTF((
" Cluster Begin LBA = 0x%x\r\n",
fs->cluster_begin_lba));
368 FAT_PRINTF((
" Sectors Per Cluster = %d\r\n",
fs->sectors_per_cluster));
375 return fs->rootdir_first_cluster;
385 char *long_filename =
NULL;
386 char short_filename[13];
405 #if FATFS_INC_LFN_SUPPORT
428 memset(short_filename, 0,
sizeof(short_filename));
431 for (i = 0; i < 8; i++)
436 for (i = 8; i < 11; i++) {
445 if (short_filename[0] !=
'.')
446 short_filename[8] =
'.';
448 short_filename[8] =
' ';
451 short_filename[8] =
' ';
461 #if FATFS_INC_LFN_SUPPORT
477 #if FATFS_INC_WRITE_SUPPORT
497 #if FATFS_INC_LFN_SUPPORT
524 #if FATFS_INC_TIME_DATE_SUPPORT
528 struct tm * time_info;
536 time_info = localtime(&time_now);
577 #if FATFS_INC_WRITE_SUPPORT
585 if (!
fs->disk_io.write_media)
601 #if FATFS_INC_LFN_SUPPORT
617 #if FATFS_INC_TIME_DATE_SUPPORT
626 return fs->disk_io.write_media(
fs->currentsector.address,
fs->currentsector.sector, 1);
642 #if FATFS_INC_WRITE_SUPPORT
650 if (!
fs->disk_io.write_media)
666 #if FATFS_INC_LFN_SUPPORT
683 #if FATFS_INC_TIME_DATE_SUPPORT
692 return fs->disk_io.write_media(
fs->currentsector.address,
fs->currentsector.sector, 1);
707 #if FATFS_DIR_LIST_SUPPORT
718 #if FATFS_DIR_LIST_SUPPORT
723 char *long_filename =
NULL;
724 char short_filename[13];
743 #if FATFS_INC_LFN_SUPPORT
763 #if FATFS_INC_TIME_DATE_SUPPORT
786 memset(short_filename, 0,
sizeof(short_filename));
789 for (i = 0; i < 8; i++)
794 for (i = 8; i < 11; i++) {
803 if (short_filename[0] !=
'.')
804 short_filename[8] =
'.';
806 short_filename[8] =
' ';
809 short_filename[8] =
' ';
818 #if FATFS_INC_TIME_DATE_SUPPORT