History: media_drv_mmcsd_spi

This page describes all changes made to the media_drv_mmcsd_spi package, the MMCSD Media Driver for SPI, since its release.


2.5 (2018-05-18, 19:38):

  • Reading from some SD cards (for example, Swissbit SFSD016GL3BM1) for the first time meant the driver was not able to access the card any more. An additional non-standard read operation closure has been implemented as a workaround (wait busy state at the end of single sector read operations).

2.4 (2018-04-05, 12:48):

  • mmcsd_spi_release() now calls psp_spi_delete() function, ensuring that it releases the resources it allocated during initialization.

2.3 (2018-03-22, 12:23):

  • Switching to High Speed Mode (with cards supporting it) might have caused an unsuccessful card initialization.

2.2 (2018-03-21, 13:35):

  • Added SPI_MAX_BAUDRATE configuration option for limiting SPI clock speed.

2.01 (2018-03-08, 10:39):

  • Symbols containing "mmcsd" or "MMCSD" renamed to "mmcsd_spi"/"MMCSD_SPI". This allows media_drv_mmcsd_spi to be used together with media_drv_mmcsd_*.
  • Added configuration option ENABLE_HIGH_SPEED to allow switching to High Speed Mode for cards that support this.


  •  Compiler warnings removed.


  •  Buffer overrun error was fixed.
  •  Timeout of read and write operations can be changed in configuration.


  •  Card Identification (CID) can be read and decoded.


  •  Some cards expecting High level on MOSI after CS low to high transition did not work.
  •  Valid Voltage (Vdd) Range Window is sent during initialization as some cards require it for correct operation.
  •  Some cards were not usable after High Speed Mode was enabled as those incorrectly didn't change the CRC of the CSD structure (which contains information about the max. speed). The driver now ignores this faulty behavior.
  •  Driver could not execute further read/write commands after an error occurred (e.g.: CRC error) during the previous multiple read/write operation.


  •  Eliminated compiler warnings.
  •  Separated driver_param input parameter from SPI unit ID. SPI unit ID is now configurable.


  •  Multiple media cards are supported.


  •  Card initialization could fail with cards supporting SWITCH command (used to enable high-speed mode).


  •  High speed mode is switched on if the card supports it.


  •  Standard read/write timeout used in case of invalid value(s) in the CSD structure.


  •  Card change reported correctly in case card was removed at read/write.


  •  psp_spi_lock() and psp_spi_unlock() cast to void from SPI_CS_LO and SPI_CS_HI.
  •  psp_spi_start() called after psp_spi_init().


  •  Could only read 16 bit values from CSD structure, as a result cards bigger than 32GB were not used correctly.


  •  Could call CS_HI twice in a raw from initcard.


  • mmcsd_initfunc(): for() loop replaced by oal_task_sleep() when RTOS is used.
  • psp_lock(), psp_unlock() calls added to CS_HI, CS_LO.
  • mmcsd_getcsd(): calculation of number_of_sectors fixed.


  • Removed some compilation warnings.


  • Updated to use new mmcsd_hw interface (2.x).


  • Sets sector size in get_status() function.


  • Use of new SPI template.


  • Use of psp_string.h.