Difference between revisions of "MMC Card Reader Development"
Jump to navigation
Jump to search
(update development) |
|||
(One intermediate revision by the same user not shown) | |||
Line 7: | Line 7: | ||
==Development Roadmap== | ==Development Roadmap== | ||
===Phase 1=== | ===Phase 1=== | ||
− | *Create | + | *Create fatfs wrapper for file system in freertos_posix |
− | *Use existing I2C EEPROM driver for development | + | *Use existing I2C EEPROM driver for development purpose |
===Phase 2=== | ===Phase 2=== | ||
*Circuit design for interfacing MMC | *Circuit design for interfacing MMC | ||
Line 26: | Line 26: | ||
==Software Implementation== | ==Software Implementation== | ||
*Use [http://elm-chan.org/fsw/ff/00index_e.html FatFs] for accessing FAT16 file system. | *Use [http://elm-chan.org/fsw/ff/00index_e.html FatFs] for accessing FAT16 file system. | ||
− | *Create a | + | *Create a FatFs Wrapper in [http://chungyan5.no-ip.org/vc/?root=freertos_posix freertos_posix] as an intermediate layer to map API in stdio.h to API in FatFs, for example: |
+ | +--------------------------------------------+ | ||
+ | | POSIX fopen() | | ||
+ | | | | | ||
+ | | \|/ | | ||
+ | | open() | | ||
+ | | | | | ||
+ | | \|/ | | ||
+ | +--------------------------------------------+ | ||
+ | | FatFs Wrapper fatfs_open() | | ||
+ | | | | | ||
+ | | \|/ | | ||
+ | +--------------------------------------------+ | ||
+ | | FatFs f_open() | | ||
+ | | | | | ||
+ | | \|/ | | ||
+ | | disk_initialize() | | ||
+ | | | | | ||
+ | | \|/ | | ||
+ | +--------------------------------------------+ | ||
+ | | EEPROM i2c_eeprom_open() | | ||
+ | +--------------------------------------------+ | ||
− | ===Comparison of FatFs | + | |
− | *selected list | + | ===Comparison of stdio and FatFs API=== |
+ | *selected list for concern | ||
{| border="1" cellspacing="0" cellpadding="5" | {| border="1" cellspacing="0" cellpadding="5" | ||
− | |||
! Function !! stdio.h !! FatFs !! Remarks | ! Function !! stdio.h !! FatFs !! Remarks | ||
|- | |- | ||
Line 55: | Line 76: | ||
*stdio.h has no equivalent '''FRESULT''' | *stdio.h has no equivalent '''FRESULT''' | ||
|- | |- | ||
− | | Read || | + | | Read |
+ | | | ||
+ | size_t | ||
+ | [http://www.cplusplus.com/reference/clibrary/cstdio/fread/ fread] ( | ||
+ | void * ptr, | ||
+ | size_t size, | ||
+ | size_t count, | ||
+ | FILE * stream | ||
+ | ); | ||
+ | | | ||
+ | FRESULT | ||
+ | [http://elm-chan.org/fsw/ff/en/read.html f_read] ( | ||
+ | FIL* FileObject, /* Pointer to the file object structure */ | ||
+ | void* Buffer, /* Pointer to the buffer to store read data */ | ||
+ | UINT ByteToRead, /* Number of bytes to read */ | ||
+ | UINT* ByteRead /* Pointer to the variable to return number of bytes read */ | ||
+ | ); | ||
+ | | | ||
+ | *'''size_t''' matches '''ByteRead''' | ||
+ | *'''ptr''' matches '''Buffer''' | ||
+ | *'''count''' matches '''ByteToRead''' | ||
+ | *'''stream''' matches '''FileObject''' | ||
+ | *stdio.h has no equivalent '''FRESULT''' | ||
|- | |- | ||
− | | Write || | + | | Write |
+ | | | ||
+ | size_t | ||
+ | [http://www.cplusplus.com/reference/clibrary/cstdio/fwrite/ fwrite] ( | ||
+ | const void * ptr, | ||
+ | size_t size, | ||
+ | size_t count, | ||
+ | FILE * stream | ||
+ | ); | ||
+ | | | ||
+ | FRESULT | ||
+ | [http://elm-chan.org/fsw/ff/en/write.html f_write] ( | ||
+ | FIL* FileObject, /* Pointer to the file object structure */ | ||
+ | const void* Buffer, /* Pointer to the data to be written */ | ||
+ | UINT ByteToWrite, /* Number of bytes to write */ | ||
+ | UINT* ByteWritten /* Pointer to the variable to return number of bytes written */ | ||
+ | ); | ||
+ | | | ||
+ | *'''size_t''' matches '''ByteWritten''' | ||
+ | *'''ptr''' matches '''Buffer''' | ||
+ | *'''count''' matches '''ByteToWrite''' | ||
+ | *'''stream''' matches '''FileObject''' | ||
+ | *stdio.h has no equivalent '''FRESULT''' | ||
|- | |- | ||
− | | Close | | + | | Close |
− | + | | | |
− | | | + | int |
+ | [http://www.cplusplus.com/reference/clibrary/cstdio/fclose/ fclose] ( | ||
+ | FILE * stream | ||
+ | ); | ||
+ | | | ||
+ | FRESULT | ||
+ | [http://elm-chan.org/fsw/ff/en/close.html f_close] ( | ||
+ | FIL* FileObject /* Pointer to the file object structure */ | ||
+ | ); | ||
+ | | | ||
+ | *'''int''' matches '''FRESULT''' | ||
+ | *'''stream''' matches '''FileObject''' | ||
|- | |- | ||
|} | |} |
Latest revision as of 19:51, 25 August 2009
This wiki describes the development of the MMC Card Reader Project
Contents
Architecture[edit]
- See here for block diagram
Development Roadmap[edit]
Phase 1[edit]
- Create fatfs wrapper for file system in freertos_posix
- Use existing I2C EEPROM driver for development purpose
Phase 2[edit]
- Circuit design for interfacing MMC
Phase 3[edit]
- SPI driver for MMC
Phase 4[edit]
- Test for normal read/write function
- hotswap (should not hang or cause voltage dip)
- multiple file read/write (protection)
Circuit and PCB[edit]
- SD Card connector
- SPI interface to main board
Software Implementation[edit]
- Use FatFs for accessing FAT16 file system.
- Create a FatFs Wrapper in freertos_posix as an intermediate layer to map API in stdio.h to API in FatFs, for example:
+--------------------------------------------+ | POSIX fopen() | | | | | \|/ | | open() | | | | | \|/ | +--------------------------------------------+ | FatFs Wrapper fatfs_open() | | | | | \|/ | +--------------------------------------------+ | FatFs f_open() | | | | | \|/ | | disk_initialize() | | | | | \|/ | +--------------------------------------------+ | EEPROM i2c_eeprom_open() | +--------------------------------------------+
Comparison of stdio and FatFs API[edit]
- selected list for concern
Function | stdio.h | FatFs | Remarks |
---|---|---|---|
Open |
FILE * fopen ( const char * filename, const char * mode ); |
FRESULT f_open ( FIL* FileObject, /* Pointer to the blank file object structure */ const XCHAR* FileName, /* Pointer to the file neme */ BYTE ModeFlags /* Mode flags */ ); |
|
Read |
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream ); |
FRESULT f_read ( FIL* FileObject, /* Pointer to the file object structure */ void* Buffer, /* Pointer to the buffer to store read data */ UINT ByteToRead, /* Number of bytes to read */ UINT* ByteRead /* Pointer to the variable to return number of bytes read */ ); |
|
Write |
size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream ); |
FRESULT f_write ( FIL* FileObject, /* Pointer to the file object structure */ const void* Buffer, /* Pointer to the data to be written */ UINT ByteToWrite, /* Number of bytes to write */ UINT* ByteWritten /* Pointer to the variable to return number of bytes written */ ); |
|
Close |
int fclose ( FILE * stream ); |
FRESULT f_close ( FIL* FileObject /* Pointer to the file object structure */ ); |
|