SD Card Interface class. Log raw data bytes to memory addresses of your choice, or format the card and use the FAT file system to write files.
FATFileSystem/Core/diskio.c@3:210eb67b260c, 2010-08-23 (annotated)
- Committer:
- Blaze513
- Date:
- Mon Aug 23 07:12:13 2010 +0000
- Revision:
- 3:210eb67b260c
- Parent:
- 2:716abfa4a4d0
- Child:
- 6:ddf09d859ed7
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Blaze513 | 3:210eb67b260c | 1 | /*-----------------------------------------------------------------------*/ |
Blaze513 | 3:210eb67b260c | 2 | /* Low level disk I/O module skeleton for FatFs (C)ChaN, 2007 */ |
Blaze513 | 3:210eb67b260c | 3 | /*-----------------------------------------------------------------------*/ |
Blaze513 | 3:210eb67b260c | 4 | /* This is a stub disk I/O module that acts as front end of the existing */ |
Blaze513 | 3:210eb67b260c | 5 | /* disk I/O modules and attach it to FatFs module with common interface. */ |
Blaze513 | 3:210eb67b260c | 6 | /*-----------------------------------------------------------------------*/ |
Blaze513 | 3:210eb67b260c | 7 | |
Blaze513 | 3:210eb67b260c | 8 | //Modified by Thomas Hamilton, Copyright 2010 |
Blaze513 | 3:210eb67b260c | 9 | |
Blaze513 | 3:210eb67b260c | 10 | #include "diskio.h" |
Blaze513 | 3:210eb67b260c | 11 | |
Blaze513 | 3:210eb67b260c | 12 | DSTATUS disk_initialize(BYTE drv) |
Blaze513 | 3:210eb67b260c | 13 | { |
Blaze513 | 3:210eb67b260c | 14 | if (FATFileSystem::DriveArray[drv]) |
Blaze513 | 3:210eb67b260c | 15 | { |
Blaze513 | 3:210eb67b260c | 16 | return (DSTATUS)FATFileSystem::DriveArray[drv]->disk_initialize(); |
Blaze513 | 3:210eb67b260c | 17 | } |
Blaze513 | 3:210eb67b260c | 18 | else |
Blaze513 | 3:210eb67b260c | 19 | { |
Blaze513 | 3:210eb67b260c | 20 | return STA_NOINIT; |
Blaze513 | 3:210eb67b260c | 21 | } |
Blaze513 | 3:210eb67b260c | 22 | } |
Blaze513 | 3:210eb67b260c | 23 | |
Blaze513 | 3:210eb67b260c | 24 | DSTATUS disk_status(BYTE drv) |
Blaze513 | 3:210eb67b260c | 25 | { |
Blaze513 | 3:210eb67b260c | 26 | if (FATFileSystem::DriveArray[drv]) |
Blaze513 | 3:210eb67b260c | 27 | { |
Blaze513 | 3:210eb67b260c | 28 | return (DSTATUS)FATFileSystem::DriveArray[drv]->disk_status(); |
Blaze513 | 3:210eb67b260c | 29 | } |
Blaze513 | 3:210eb67b260c | 30 | else |
Blaze513 | 3:210eb67b260c | 31 | { |
Blaze513 | 3:210eb67b260c | 32 | return STA_NOINIT; |
Blaze513 | 3:210eb67b260c | 33 | } |
Blaze513 | 3:210eb67b260c | 34 | } |
Blaze513 | 3:210eb67b260c | 35 | |
Blaze513 | 3:210eb67b260c | 36 | DRESULT disk_read(BYTE drv, BYTE* buff, DWORD sector, BYTE count) |
Blaze513 | 3:210eb67b260c | 37 | { |
Blaze513 | 3:210eb67b260c | 38 | if (FATFileSystem::DriveArray[drv]) |
Blaze513 | 3:210eb67b260c | 39 | { |
Blaze513 | 3:210eb67b260c | 40 | return (DRESULT)FATFileSystem::DriveArray[drv]->disk_read((unsigned char*)buff, |
Blaze513 | 3:210eb67b260c | 41 | (unsigned long)sector, (unsigned char)count); |
Blaze513 | 3:210eb67b260c | 42 | } |
Blaze513 | 3:210eb67b260c | 43 | else |
Blaze513 | 3:210eb67b260c | 44 | { |
Blaze513 | 3:210eb67b260c | 45 | return RES_NOTRDY; |
Blaze513 | 3:210eb67b260c | 46 | } |
Blaze513 | 3:210eb67b260c | 47 | } |
Blaze513 | 3:210eb67b260c | 48 | |
Blaze513 | 3:210eb67b260c | 49 | #if _READONLY == 0 |
Blaze513 | 3:210eb67b260c | 50 | DRESULT disk_write(BYTE drv, const BYTE* buff, DWORD sector, BYTE count) |
Blaze513 | 3:210eb67b260c | 51 | { |
Blaze513 | 3:210eb67b260c | 52 | if (FATFileSystem::DriveArray[drv]) |
Blaze513 | 3:210eb67b260c | 53 | { |
Blaze513 | 3:210eb67b260c | 54 | return (DRESULT)FATFileSystem::DriveArray[drv]->disk_write((const unsigned char*)buff, |
Blaze513 | 3:210eb67b260c | 55 | (unsigned long)sector, (unsigned char)count); |
Blaze513 | 3:210eb67b260c | 56 | } |
Blaze513 | 3:210eb67b260c | 57 | else |
Blaze513 | 3:210eb67b260c | 58 | { |
Blaze513 | 3:210eb67b260c | 59 | return RES_NOTRDY; |
Blaze513 | 3:210eb67b260c | 60 | } |
Blaze513 | 3:210eb67b260c | 61 | } |
Blaze513 | 3:210eb67b260c | 62 | #endif |
Blaze513 | 3:210eb67b260c | 63 | |
Blaze513 | 3:210eb67b260c | 64 | DRESULT disk_ioctl(BYTE drv, BYTE ctrl, void* buff) |
Blaze513 | 3:210eb67b260c | 65 | { |
Blaze513 | 3:210eb67b260c | 66 | switch (ctrl) |
Blaze513 | 3:210eb67b260c | 67 | { |
Blaze513 | 3:210eb67b260c | 68 | case CTRL_SYNC: |
Blaze513 | 3:210eb67b260c | 69 | if (FATFileSystem::DriveArray[drv]) |
Blaze513 | 3:210eb67b260c | 70 | { |
Blaze513 | 3:210eb67b260c | 71 | return (DRESULT)FATFileSystem::DriveArray[drv]->disk_sync(); |
Blaze513 | 3:210eb67b260c | 72 | } |
Blaze513 | 3:210eb67b260c | 73 | else |
Blaze513 | 3:210eb67b260c | 74 | { |
Blaze513 | 3:210eb67b260c | 75 | return RES_NOTRDY; |
Blaze513 | 3:210eb67b260c | 76 | } |
Blaze513 | 3:210eb67b260c | 77 | |
Blaze513 | 3:210eb67b260c | 78 | case GET_SECTOR_SIZE: |
Blaze513 | 3:210eb67b260c | 79 | if (FATFileSystem::DriveArray[drv]) |
Blaze513 | 3:210eb67b260c | 80 | { |
Blaze513 | 3:210eb67b260c | 81 | WORD Result = FATFileSystem::DriveArray[drv]->disk_sector_size(); |
Blaze513 | 3:210eb67b260c | 82 | if (Result > 0) |
Blaze513 | 3:210eb67b260c | 83 | { |
Blaze513 | 3:210eb67b260c | 84 | *((WORD*)buff) = Result; |
Blaze513 | 3:210eb67b260c | 85 | return RES_OK; |
Blaze513 | 3:210eb67b260c | 86 | } |
Blaze513 | 3:210eb67b260c | 87 | else |
Blaze513 | 3:210eb67b260c | 88 | { |
Blaze513 | 3:210eb67b260c | 89 | return RES_ERROR; |
Blaze513 | 3:210eb67b260c | 90 | } |
Blaze513 | 3:210eb67b260c | 91 | } |
Blaze513 | 3:210eb67b260c | 92 | else |
Blaze513 | 3:210eb67b260c | 93 | { |
Blaze513 | 3:210eb67b260c | 94 | return RES_NOTRDY; |
Blaze513 | 3:210eb67b260c | 95 | } |
Blaze513 | 3:210eb67b260c | 96 | |
Blaze513 | 3:210eb67b260c | 97 | case GET_SECTOR_COUNT: |
Blaze513 | 3:210eb67b260c | 98 | if (FATFileSystem::DriveArray[drv]) |
Blaze513 | 3:210eb67b260c | 99 | { |
Blaze513 | 3:210eb67b260c | 100 | DWORD Result = FATFileSystem::DriveArray[drv]->disk_sector_count(); |
Blaze513 | 3:210eb67b260c | 101 | if (Result > 0) |
Blaze513 | 3:210eb67b260c | 102 | { |
Blaze513 | 3:210eb67b260c | 103 | *((DWORD*)buff) = Result; |
Blaze513 | 3:210eb67b260c | 104 | return RES_OK; |
Blaze513 | 3:210eb67b260c | 105 | } |
Blaze513 | 3:210eb67b260c | 106 | else |
Blaze513 | 3:210eb67b260c | 107 | { |
Blaze513 | 3:210eb67b260c | 108 | return RES_ERROR; |
Blaze513 | 3:210eb67b260c | 109 | } |
Blaze513 | 3:210eb67b260c | 110 | } |
Blaze513 | 3:210eb67b260c | 111 | else |
Blaze513 | 3:210eb67b260c | 112 | { |
Blaze513 | 3:210eb67b260c | 113 | return RES_NOTRDY; |
Blaze513 | 3:210eb67b260c | 114 | } |
Blaze513 | 3:210eb67b260c | 115 | |
Blaze513 | 3:210eb67b260c | 116 | case GET_BLOCK_SIZE: |
Blaze513 | 3:210eb67b260c | 117 | if (FATFileSystem::DriveArray[drv]) |
Blaze513 | 3:210eb67b260c | 118 | { |
Blaze513 | 3:210eb67b260c | 119 | DWORD Result = FATFileSystem::DriveArray[drv]->disk_block_size(); |
Blaze513 | 3:210eb67b260c | 120 | if (Result > 0) |
Blaze513 | 3:210eb67b260c | 121 | { |
Blaze513 | 3:210eb67b260c | 122 | *((DWORD*)buff) = Result; |
Blaze513 | 3:210eb67b260c | 123 | return RES_OK; |
Blaze513 | 3:210eb67b260c | 124 | } |
Blaze513 | 3:210eb67b260c | 125 | else |
Blaze513 | 3:210eb67b260c | 126 | { |
Blaze513 | 3:210eb67b260c | 127 | return RES_ERROR; |
Blaze513 | 3:210eb67b260c | 128 | } |
Blaze513 | 3:210eb67b260c | 129 | } |
Blaze513 | 3:210eb67b260c | 130 | else |
Blaze513 | 3:210eb67b260c | 131 | { |
Blaze513 | 3:210eb67b260c | 132 | return RES_NOTRDY; |
Blaze513 | 3:210eb67b260c | 133 | } |
Blaze513 | 3:210eb67b260c | 134 | |
Blaze513 | 3:210eb67b260c | 135 | default: |
Blaze513 | 3:210eb67b260c | 136 | return RES_PARERR; |
Blaze513 | 3:210eb67b260c | 137 | } |
Blaze513 | 1:94c648931f84 | 138 | } |