This file contains the implementation of XSdPs driver. This driver is used initialize read from and write to the SD card. Features such as switching bus width to 4-bit and switching to high speed, changing clock frequency, block size etc. are supported. SD 2.0 uses 1/4 bus width and speeds of 25/50KHz. Initialization, however is done using 1-bit bus width and 400KHz clock frequency. SD commands are classified as broadcast and addressed. Commands can be those with response only (using only command line) or response + data (using command and data lines). Only one command can be sent at a time. During a data transfer however, when dsta lines are in use, certain commands (which use only the command line) can be sent, most often to obtain status. This driver does not support multi card slots at present.
Intialization: This includes initialization on the host controller side to select clock frequency, bus power and default transfer related parameters. The default voltage is 3.3V. On the SD card side, the initialization and identification state diagram is implemented. This resets the card, gives it a unique address/ID and identifies key card related specifications.
Data transfer: The SD card is put in tranfer state to read from or write to it. The default block size is 512 bytes and if supported, default bus width is 4-bit and bus speed is High speed. The read and write functions are implemented in polled mode using ADMA2.
At any point, when key parameters such as block size or clock/speed or bus width are modified, this driver takes care of maintaining the same selection on host and card. All error bits in host controller are monitored by the driver and in the event one of them is set, driver will clear the interrupt status and communicate failure to the upper layer.
File system use: This driver can be used with xilffs library to read and write files to SD. (Please refer to procedure in diskio.c). The file system read/write example in polled mode can used for reference.
There is no example for using SD driver without file system at present. However, the driver can be used without the file system. The glue layer in filesytem can be used as reference for the same. The block count passed to the read/write function in one call is limited by the ADMA2 descriptor table and hence care will have to be taken to call read/write API's in a loop for large file sizes.
Interrupt mode is not supported because it offers no improvement when used with file system.
eMMC support: SD driver supports SD and eMMC based on the "enable MMC" parameter in SDK. The features of eMMC supported by the driver will depend on those supported by the host controller. The current driver supports read/write on eMMC card using 4-bit and high speed mode currently.
Features not supported include - card write protect, password setting, lock/unlock, interrupts, SDMA mode, programmed I/O mode and 64-bit addressed ADMA2, erase/pre-erase commands.
MODIFICATION HISTORY:
Ver Who Date Changes ----- --- -------- ----------------------------------------------- 1.00a hk/sg 10/17/13 Initial release 2.0 hk 03/07/14 Version number revised. 2.1 hk 04/18/14 Increase sleep for eMMC switch command. Add sleep for microblaze designs. CR# 781117.
Copyright @ 1995-2014 Xilinx, Inc. All rights reserved.