Multimedia Card Driver
[Block Devices]

Collaboration diagram for Multimedia Card Driver:

Detailed Description

Block device driver for MM/SD Cards.

Basic block device driver for multimedia cards.

The driver uses SPI mode, but doesn't include any low level hardware access. This must be provided by some additional routines.

 *
 * $Log: mmcard.c,v $
 * Revision 1.12  2008/08/11 06:59:42  haraldkipp
 * BSD types replaced by stdint types (feature request #1282721).
 *
 * Revision 1.11  2008/07/14 13:09:30  haraldkipp
 * Allow small MultiMedia Cards without partition table.
 *
 * Revision 1.10  2007/08/30 12:15:06  haraldkipp
 * Configurable MMC timings.
 *
 * Revision 1.9  2006/10/08 16:48:09  haraldkipp
 * Documentation fixed
 *
 * Revision 1.8  2006/07/05 08:03:12  haraldkipp
 * Bugfix. Trailing slash in mount path not properly handled.
 * Thanks to Michael Fischer.
 *
 * Revision 1.7  2006/06/18 16:34:46  haraldkipp
 * Mutex deadlock fixed.
 *
 * Revision 1.6  2006/05/25 09:34:21  haraldkipp
 * Added mutual exclusion lock for multithreaded access.
 *
 * Revision 1.5  2006/04/07 12:29:03  haraldkipp
 * Number of read retries increased. Memory hole fixed.
 * Added ioctl(NUTBLKDEV_MEDIAAVAIL).
 * Card change ioctl() will also return 1 if no card is available.
 *
 * Revision 1.4  2006/02/23 15:43:56  haraldkipp
 * Timeout value increased. Some cards have long write latencies.
 *
 * Revision 1.3  2006/01/22 17:36:31  haraldkipp
 * Some cards need more time to enter idle state.
 * Card access now returns an error after card change detection.
 *
 * Revision 1.2  2006/01/19 18:40:08  haraldkipp
 * Timeouts increased and long time sleeps decreased for better performance.
 *
 * Revision 1.1  2006/01/05 16:30:49  haraldkipp
 * First check-in.
 *
 *
 * 


Data Structures

struct  _MMCIFC
 Low level access information structure. More...
struct  _MMC_CID
 Multimedia card identification register. More...
struct  _MMC_CSD
 Multimedia card identification register. More...

Control Codes

#define MMCARD_GETSTATUS   0x2001
 Retrieve card status.
#define MMCARD_GETOCR   0x2002
 Retrieve operation condition register.
#define MMCARD_GETCID   0x2003
 Retrieve card identification.
#define MMCARD_GETCSD   0x2004
 Retrieve card specific data.

Defines

#define MMCMD_HOST   0x40
#define MMCMD_RESET_CRC   0x95
#define MMCMD_GO_IDLE_STATE   0
 Reset card to idle state.
#define MMCMD_SEND_OP_COND   1
 Activate card's initialization process.
#define MMCMD_ALL_SEND_CID   2
 Send operation condition register.
#define MMCMD_SEND_RELATIVE_ADDR   3
 Assign relative card address.
#define MMCMD_SELECT_CARD   7
 Assign relative card address.
#define MMCMD_SEND_CSD   9
 Query card's CSD.
#define MMCMD_SEND_CID   10
 Query card's CID.
#define MMCMD_STOP_TRANSMISSION   12
 Stop multiple block transmission.
#define MMCMD_SEND_STATUS   13
 Query card's status register.
#define MMCMD_SET_BLOCKLEN   16
 Select block length for following read/write commands.
#define MMCMD_READ_SINGLE_BLOCK   17
 Initiate single block read.
#define MMCMD_READ_MULTIPLE_BLOCK   18
 Initiate continuous block read.
#define MMCMD_WRITE_BLOCK   24
 Initiate single block write.
#define MMCMD_WRITE_MULTIPLE_BLOCK   25
 Initiate continuous block write.
#define MMCMD_PROGRAM_CSD   27
 Initiate programming of programmable CSD bits.
#define MMCMD_SET_WRITE_PROTECT   28
 Enable card's optional write protection.
#define MMCMD_CLR_WRITE_PROTECT   29
 Disable card's write protection.
#define MMCMD_SEND_WRITE_PROTECT   30
 Query card's write protect status.
#define MMCMD_TAG_ERASE_GROUP_START   35
 Set address of the first erase group.
#define MMCMD_TAG_ERASE_GROUP_END   36
 Set address of the last erase group.
#define MMCMD_ERASE   38
 Erase previously selected sectors.
#define MMCMD_LOCK_UNLOCK   42
 Set/clear password or lock/unlock the card.
#define MMCMD_READ_OCR   58
 Query card's operating condition register.
#define MMCMD_CRC_ON_OFF   59
 Enable or disable CRC mode.
#define MMR1_IDLE_STATE   0x00
 Card is idle.
#define MMR1_NOT_IDLE   0x01
 Card is busy.
#define MMR1_ERASE_RESET   0x02
 Erase sequence was cleared before execution.
#define MMR1_ILLEGAL_COMMAND   0x04
 Illegal command code detected.
#define MMR1_COM_CRC_ERROR   0x08
 Bad command CRC detected.
#define MMR1_ERASE_SEQ_ERROR   0x10
 Bad erase sequence.
#define MMR1_ADDRESS_ERROR   0x20
 Misaligned address did not match block length.
#define MMR1_PARAMETER_ERROR   0x40
 Command parameter is out of range.
#define MMR2_CARD_LOCKED   0x01
 Card is locked.
#define MMR2_WP_ERASE_SKIP   0x02
 Erasing write protected sector or password error.
#define MMR2_ERROR   0x04
 General or unknown error occured.
#define MMR2_CC_ERROR   0x08
 Internal card controller error.
#define MMR2_ECC_FAILED   0x10
 Bad internal ECC.
#define MMR2_WP_VIOLATION   0x20
 Failed to write to protected block.
#define MMR2_ERASE_PARAMETER   0x40
 Invalid erase parameter.
#define MMR2_OUT_OF_RANGE   0x80
 Command parameter is out of range.
#define MMCSR_OUT_OF_RANGE   0x80000000
#define MMCSR_ADDRESS_ERROR   0x40000000
#define MMCSR_BLOCK_LEN_ERROR   0x20000000
#define MMCSR_ERASE_SEQ_ERROR   0x10000000
#define MMCSR_ERASE_PARAM   0x08000000
#define MMCSR_WP_VIOLATION   0x04000000
#define MMCSR_COM_CRC_ERROR   0x00800000
#define MMCSR_ILLEGAL_COMMAND   0x00400000
#define MMCSR_ERROR   0x00080000
#define MMCSR_CIDCSD_OVERWRITE   0x00010000
#define MMCSR_WP_ERASE_SKIP   0x00008000
#define MMCSR_CARD_ECC_DISABLED   0x00004000
#define MMCSR_ERASE_RESET   0x00002000
#define MMCSR_STATE_MASK   0x00001E00
#define MMCSR_READY_FOR_DATA   0x00000100
#define MMCSR_IS_IDLE   0x00000000
#define MMCSR_IS_READY   0x00000200
#define MMCSR_IS_IDENT   0x00000400
#define MMCSR_IS_STBY   0x00000600
#define MMCSR_IS_TRAN   0x00000800
#define MMCSR_IS_DATA   0x00000A00
#define MMCSR_IS_RCV   0x00000C00
#define MMCSR_IS_PRG   0x00000E00
#define MMCSR_IS_DIS   0x00001000
#define MMDR_ACCEPTED
#define MMDR_CRC_ERROR
#define MMDR_WRITE_ERROR
#define MMCERR_TIMEOUT   0x00000001
#define MMCOP_NBUSY   0x80000000
#define MMCARD_CIDR_SIZE   16
 Number of bytes in the CID register.
#define MMCARD_CSDR_SIZE   16
 Number of bytes in the CSD register.
#define MMCARD_OCR_SIZE   32
 Number of bytes in the operating condition register.
#define MMC_BLOCK_SIZE   512
 Block size.
#define MMC_MAX_INIT_POLLS   512
 Card init timeout.
#define MMC_MAX_RESET_POLLS   255
 Card reset timeout.
#define MMC_MAX_WRITE_POLLS   1024
 Card write timeout.
#define MMC_MAX_WRITE_RETRIES   32
 Card write retries.
#define MMC_MAX_READ_RETRIES   8
 Card read retries.
#define MMC_MAX_REG_POLLS   512
 Register read timeout.
#define MMC_MAX_CMDACK_POLLS   1024
 Command acknowledge timeout.
#define MMC_MAX_R1_POLLS   1024
 R1 response timeout.

Typedefs

typedef struct _MMCIFC MMCIFC
typedef struct _MMC_CID MMC_CID
typedef struct _MMC_CSD MMC_CSD
typedef struct _MMCFCB MMCFCB

Functions

int MmCardBlockRead (NUTFILE *nfp, void *buffer, int num)
 Read data blocks from a mounted partition.
int MmCardBlockWrite (NUTFILE *nfp, CONST void *buffer, int num)
 Write data blocks to a mounted partition.
int MmCardBlockWrite_P (NUTFILE *nfp, PGM_P buffer, int num)
 Write data blocks from program space to a mounted partition.
NUTFILEMmCardMount (NUTDEVICE *dev, CONST char *name, int mode, int acc)
 Mount a partition.
int MmCardUnmount (NUTFILE *nfp)
 Unmount a previously mounted partition.
int MmCardIOCtl (NUTDEVICE *dev, int req, void *conf)
 Perform MMC control functions.
int MmCardDevInit (NUTDEVICE *dev)
 Initialize high level MMC driver.


Define Documentation

#define MMCMD_HOST   0x40

Definition at line 83 of file mmcard.h.

#define MMCMD_RESET_CRC   0x95

Definition at line 84 of file mmcard.h.

#define MMCMD_GO_IDLE_STATE   0

Reset card to idle state.

In idle state the card will not accept any other commands than MMCMD_SEND_OP_COND or MMCMD_READ_OCR.

Definition at line 91 of file mmcard.h.

#define MMCMD_SEND_OP_COND   1

Activate card's initialization process.

Definition at line 94 of file mmcard.h.

#define MMCMD_ALL_SEND_CID   2

Send operation condition register.

Queries the operation condition register content from all cards, which are in idle state.

Definition at line 101 of file mmcard.h.

#define MMCMD_SEND_RELATIVE_ADDR   3

Assign relative card address.

Definition at line 104 of file mmcard.h.

#define MMCMD_SELECT_CARD   7

Assign relative card address.

Definition at line 107 of file mmcard.h.

#define MMCMD_SEND_CSD   9

Query card's CSD.

Definition at line 110 of file mmcard.h.

Referenced by MmCardIOCtl().

#define MMCMD_SEND_CID   10

Query card's CID.

Definition at line 113 of file mmcard.h.

Referenced by MmCardIOCtl().

#define MMCMD_STOP_TRANSMISSION   12

Stop multiple block transmission.

Definition at line 116 of file mmcard.h.

#define MMCMD_SEND_STATUS   13

Query card's status register.

Definition at line 119 of file mmcard.h.

Referenced by MmCardIOCtl().

#define MMCMD_SET_BLOCKLEN   16

Select block length for following read/write commands.

Definition at line 122 of file mmcard.h.

#define MMCMD_READ_SINGLE_BLOCK   17

Initiate single block read.

Definition at line 125 of file mmcard.h.

#define MMCMD_READ_MULTIPLE_BLOCK   18

Initiate continuous block read.

Definition at line 128 of file mmcard.h.

#define MMCMD_WRITE_BLOCK   24

Initiate single block write.

Definition at line 131 of file mmcard.h.

#define MMCMD_WRITE_MULTIPLE_BLOCK   25

Initiate continuous block write.

Definition at line 134 of file mmcard.h.

#define MMCMD_PROGRAM_CSD   27

Initiate programming of programmable CSD bits.

Definition at line 137 of file mmcard.h.

#define MMCMD_SET_WRITE_PROTECT   28

Enable card's optional write protection.

Definition at line 140 of file mmcard.h.

#define MMCMD_CLR_WRITE_PROTECT   29

Disable card's write protection.

Definition at line 143 of file mmcard.h.

#define MMCMD_SEND_WRITE_PROTECT   30

Query card's write protect status.

Definition at line 146 of file mmcard.h.

#define MMCMD_TAG_ERASE_GROUP_START   35

Set address of the first erase group.

Definition at line 149 of file mmcard.h.

#define MMCMD_TAG_ERASE_GROUP_END   36

Set address of the last erase group.

Definition at line 152 of file mmcard.h.

#define MMCMD_ERASE   38

Erase previously selected sectors.

Definition at line 155 of file mmcard.h.

#define MMCMD_LOCK_UNLOCK   42

Set/clear password or lock/unlock the card.

Definition at line 158 of file mmcard.h.

#define MMCMD_READ_OCR   58

Query card's operating condition register.

Definition at line 161 of file mmcard.h.

Referenced by MmCardIOCtl().

#define MMCMD_CRC_ON_OFF   59

Enable or disable CRC mode.

In SPI mode CRC is disabled by default.

Definition at line 167 of file mmcard.h.

#define MMR1_IDLE_STATE   0x00

Card is idle.

Definition at line 170 of file mmcard.h.

Referenced by MmCardIOCtl().

#define MMR1_NOT_IDLE   0x01

Card is busy.

Definition at line 172 of file mmcard.h.

#define MMR1_ERASE_RESET   0x02

Erase sequence was cleared before execution.

Definition at line 174 of file mmcard.h.

#define MMR1_ILLEGAL_COMMAND   0x04

Illegal command code detected.

Definition at line 176 of file mmcard.h.

#define MMR1_COM_CRC_ERROR   0x08

Bad command CRC detected.

Definition at line 178 of file mmcard.h.

#define MMR1_ERASE_SEQ_ERROR   0x10

Bad erase sequence.

Definition at line 180 of file mmcard.h.

#define MMR1_ADDRESS_ERROR   0x20

Misaligned address did not match block length.

Definition at line 182 of file mmcard.h.

#define MMR1_PARAMETER_ERROR   0x40

Command parameter is out of range.

Definition at line 184 of file mmcard.h.

#define MMR2_CARD_LOCKED   0x01

Card is locked.

Definition at line 188 of file mmcard.h.

#define MMR2_WP_ERASE_SKIP   0x02

Erasing write protected sector or password error.

Definition at line 190 of file mmcard.h.

#define MMR2_ERROR   0x04

General or unknown error occured.

Definition at line 192 of file mmcard.h.

#define MMR2_CC_ERROR   0x08

Internal card controller error.

Definition at line 194 of file mmcard.h.

#define MMR2_ECC_FAILED   0x10

Bad internal ECC.

Definition at line 196 of file mmcard.h.

#define MMR2_WP_VIOLATION   0x20

Failed to write to protected block.

Definition at line 198 of file mmcard.h.

#define MMR2_ERASE_PARAMETER   0x40

Invalid erase parameter.

Definition at line 200 of file mmcard.h.

#define MMR2_OUT_OF_RANGE   0x80

Command parameter is out of range.

Definition at line 202 of file mmcard.h.

#define MMCSR_OUT_OF_RANGE   0x80000000

Definition at line 205 of file mmcard.h.

#define MMCSR_ADDRESS_ERROR   0x40000000

Definition at line 206 of file mmcard.h.

#define MMCSR_BLOCK_LEN_ERROR   0x20000000

Definition at line 207 of file mmcard.h.

#define MMCSR_ERASE_SEQ_ERROR   0x10000000

Definition at line 208 of file mmcard.h.

#define MMCSR_ERASE_PARAM   0x08000000

Definition at line 209 of file mmcard.h.

#define MMCSR_WP_VIOLATION   0x04000000

Definition at line 210 of file mmcard.h.

#define MMCSR_COM_CRC_ERROR   0x00800000

Definition at line 211 of file mmcard.h.

#define MMCSR_ILLEGAL_COMMAND   0x00400000

Definition at line 212 of file mmcard.h.

#define MMCSR_ERROR   0x00080000

Definition at line 213 of file mmcard.h.

#define MMCSR_CIDCSD_OVERWRITE   0x00010000

Definition at line 214 of file mmcard.h.

#define MMCSR_WP_ERASE_SKIP   0x00008000

Definition at line 215 of file mmcard.h.

#define MMCSR_CARD_ECC_DISABLED   0x00004000

Definition at line 216 of file mmcard.h.

#define MMCSR_ERASE_RESET   0x00002000

Definition at line 217 of file mmcard.h.

#define MMCSR_STATE_MASK   0x00001E00

Definition at line 218 of file mmcard.h.

#define MMCSR_READY_FOR_DATA   0x00000100

Definition at line 219 of file mmcard.h.

#define MMCSR_IS_IDLE   0x00000000

Definition at line 221 of file mmcard.h.

#define MMCSR_IS_READY   0x00000200

Definition at line 222 of file mmcard.h.

#define MMCSR_IS_IDENT   0x00000400

Definition at line 223 of file mmcard.h.

#define MMCSR_IS_STBY   0x00000600

Definition at line 224 of file mmcard.h.

#define MMCSR_IS_TRAN   0x00000800

Definition at line 225 of file mmcard.h.

#define MMCSR_IS_DATA   0x00000A00

Definition at line 226 of file mmcard.h.

#define MMCSR_IS_RCV   0x00000C00

Definition at line 227 of file mmcard.h.

#define MMCSR_IS_PRG   0x00000E00

Definition at line 228 of file mmcard.h.

#define MMCSR_IS_DIS   0x00001000

Definition at line 229 of file mmcard.h.

#define MMDR_ACCEPTED

Definition at line 231 of file mmcard.h.

#define MMDR_CRC_ERROR

Definition at line 232 of file mmcard.h.

#define MMDR_WRITE_ERROR

Definition at line 233 of file mmcard.h.

#define MMCERR_TIMEOUT   0x00000001

Definition at line 235 of file mmcard.h.

#define MMCOP_NBUSY   0x80000000

Definition at line 237 of file mmcard.h.

#define MMCARD_CIDR_SIZE   16

Number of bytes in the CID register.

Definition at line 240 of file mmcard.h.

#define MMCARD_CSDR_SIZE   16

Number of bytes in the CSD register.

Definition at line 243 of file mmcard.h.

#define MMCARD_OCR_SIZE   32

Number of bytes in the operating condition register.

Definition at line 246 of file mmcard.h.

#define MMCARD_GETSTATUS   0x2001

Retrieve card status.

Definition at line 254 of file mmcard.h.

Referenced by MmCardIOCtl().

#define MMCARD_GETOCR   0x2002

Retrieve operation condition register.

Definition at line 256 of file mmcard.h.

Referenced by MmCardIOCtl().

#define MMCARD_GETCID   0x2003

Retrieve card identification.

Definition at line 258 of file mmcard.h.

Referenced by MmCardIOCtl().

#define MMCARD_GETCSD   0x2004

Retrieve card specific data.

Definition at line 260 of file mmcard.h.

Referenced by MmCardIOCtl().

#define MMC_BLOCK_SIZE   512

Block size.

Block size in bytes. Do not change unless you are sure that both, the file system and the hardware support it.

Definition at line 119 of file mmcard.c.

#define MMC_MAX_INIT_POLLS   512

Card init timeout.

Max. number of loops waiting for card's idle mode after initialization. An additional delay of 1 ms is added to each loop after one quarter of this value elapsed.

Definition at line 130 of file mmcard.c.

#define MMC_MAX_RESET_POLLS   255

Card reset timeout.

Max. number of loops waiting for card's idle mode after resetting it.

Definition at line 139 of file mmcard.c.

#define MMC_MAX_WRITE_POLLS   1024

Card write timeout.

Max. number of loops waiting for card's idle mode after resetting it. An additional delay of 1 ms is added to each loop after 31/32 of this value elapsed.

Definition at line 150 of file mmcard.c.

#define MMC_MAX_WRITE_RETRIES   32

Card write retries.

Max. number of retries while writing.

Definition at line 159 of file mmcard.c.

#define MMC_MAX_READ_RETRIES   8

Card read retries.

Max. number of retries while reading.

Definition at line 168 of file mmcard.c.

Referenced by MmCardBlockRead(), and MmCardBlockWrite().

#define MMC_MAX_REG_POLLS   512

Register read timeout.

Max. number of loops while reading a card's register.

Definition at line 177 of file mmcard.c.

#define MMC_MAX_CMDACK_POLLS   1024

Command acknowledge timeout.

Max. number of loops waiting for card's acknowledge of a command. An additional delay of 1 ms is added to each loop after three quarter of this value elapsed.

Definition at line 188 of file mmcard.c.

#define MMC_MAX_R1_POLLS   1024

R1 response timeout.

Max. number of loops waiting for card's R1 response.

Definition at line 197 of file mmcard.c.


Typedef Documentation

typedef struct _MMCIFC MMCIFC

typedef struct _MMC_CID MMC_CID

typedef struct _MMC_CSD MMC_CSD

typedef struct _MMCFCB MMCFCB


Function Documentation

int MmCardBlockRead ( NUTFILE nfp,
void *  buffer,
int  num 
)

Read data blocks from a mounted partition.

Applications should not call this function directly, but use the stdio interface.

Parameters:
nfp Pointer to a NUTFILE structure, obtained by a previous call to MmCardMount().
buffer Pointer to the data buffer to fill.
num Maximum number of blocks to read. However, reading multiple blocks is not yet supported by this driver.
Returns:
The number of blocks actually read. A return value of -1 indicates an error.

Definition at line 583 of file mmcard.c.

References MMC_MAX_READ_RETRIES, _MMCIFC::mmcifc_cd, _NUTFILE::nf_dev, and _NUTFILE::nf_fcb.

int MmCardBlockWrite ( NUTFILE nfp,
CONST void *  buffer,
int  num 
)

Write data blocks to a mounted partition.

Applications should not call this function directly, but use the stdio interface.

Parameters:
nfp Pointer to a NUTFILE structure, obtained by a previous call to MmCardMount().
buffer Pointer to the data to be written.
num Maximum number of blocks to write. However, writing multiple blocks is not yet supported by this driver.
Returns:
The number of blocks written. A return value of -1 indicates an error.

Definition at line 636 of file mmcard.c.

References MMC_MAX_READ_RETRIES, _MMCIFC::mmcifc_cd, _NUTFILE::nf_dev, and _NUTFILE::nf_fcb.

int MmCardBlockWrite_P ( NUTFILE nfp,
PGM_P  buffer,
int  num 
)

Write data blocks from program space to a mounted partition.

This function is not yet implemented and will always return -1.

Similar to MmCardBlockWrite() except that the data is located in program memory.

Applications should not call this function directly, but use the stdio interface.

Parameters:
nfp File pointer to a previously opened device.
buffer Pointer to the data bytes in program space to be written.
num Maximum number of blocks to write. However, writing multiple blocks is not yet supported by this driver.
Returns:
The number of blocks written. A return value of -1 indicates an error.

Definition at line 694 of file mmcard.c.

NUTFILE* MmCardMount ( NUTDEVICE dev,
CONST char *  name,
int  mode,
int  acc 
)

Mount a partition.

Nut/OS doesn't provide specific routines for mounting. Instead routines for opening files are used.

Applications should not directly call this function, but use the high level stdio routines for opening a file.

Parameters:
dev Pointer to the MMC device.
name Partition number followed by a slash followed by a name of the file system device. Both items are optional. If no file system driver name is given, the first file system driver found in the list of registered devices will be used. If no partition number is specified or if partition zero is given, the first active primary partition will be used.
mode Opening mode. Currently ignored, but should be used for compatibility with future enhancements.
acc File attributes, ignored.
Returns:
Pointer to a newly created file pointer to the mounted partition or NUTFILE_EOF in case of any error.

Definition at line 725 of file mmcard.c.

References atoi(), _NUTDEVICE::dev_icb, _NUTDEVICE::dev_ioctl, _NUTDEVICE::dev_name, _NUTDEVICE::dev_next, _NUTDEVICE::dev_type, DOSPART_MAGICPOS, DOSPART_SECTORPOS, DOSPART_TYPEPOS, ENODEV, ENOMEM, errno, FS_VOL_MOUNT, IFTYP_FS, MmCardUnmount(), _MMCIFC::mmcifc_cd, _NUTFILE::nf_dev, _NUTFILE::nf_fcb, _NUTFILE::nf_next, nutDeviceList, NUTFILE_EOF, NutHeapAlloc(), NutHeapAllocClear(), NutHeapFree(), _DOSPART::part_state, printf, PTYPE_EMPTY, PTYPE_FAT12, and strcmp().

int MmCardUnmount ( NUTFILE nfp  ) 

Unmount a previously mounted partition.

Applications should not directly call this function, but use the high level stdio routines for closing a previously opened file.

Returns:
0 on success, -1 otherwise.

Definition at line 861 of file mmcard.c.

References _NUTDEVICE::dev_icb, FS_VOL_UNMOUNT, _MMCIFC::mmcifc_cd, _NUTFILE::nf_dev, _NUTFILE::nf_fcb, and NutHeapFree().

Referenced by MmCardMount().

int MmCardIOCtl ( NUTDEVICE dev,
int  req,
void *  conf 
)

Perform MMC control functions.

This function is called by the ioctl() function of the C runtime library. Applications should not directly call this function.

Todo:
Card change detection should verify the serial card number.
Parameters:
dev Identifies the device that receives the device-control function.
req Requested control function. May be set to one of the following constants:
conf Points to a buffer that contains any data required for the given control function or receives data from that function.
Returns:
0 on success, -1 otherwise.

Definition at line 955 of file mmcard.c.

References _NUTDEVICE::dev_icb, MMCARD_GETCID, MMCARD_GETCSD, MMCARD_GETOCR, MMCARD_GETSTATUS, _MMCIFC::mmcifc_cd, MMCMD_READ_OCR, MMCMD_SEND_CID, MMCMD_SEND_CSD, MMCMD_SEND_STATUS, MMR1_IDLE_STATE, _NUTFILE::nf_fcb, NUTBLKDEV_INFO, NUTBLKDEV_MEDIAAVAIL, NUTBLKDEV_MEDIACHANGE, NUTBLKDEV_SEEK, NutEventPost(), NutEventWait(), _BLKPAR_INFO::par_blkbp, _BLKPAR_SEEK::par_blknum, _BLKPAR_INFO::par_blksz, _BLKPAR_INFO::par_nblks, _BLKPAR_SEEK::par_nfp, and _BLKPAR_INFO::par_nfp.

int MmCardDevInit ( NUTDEVICE dev  ) 

Initialize high level MMC driver.

Applications should not directly call this function. It is automatically executed during during device registration by NutRegisterDevice().

Parameters:
dev Identifies the device to initialize.
Returns:
Always zero.

Definition at line 1045 of file mmcard.c.


© 2000-2007 by egnite Software GmbH - visit http://www.ethernut.de/