
Added the libraries to the repository Preliminary changes to fix slow startup when no network cable is connected
317 lines
9.7 KiB
C
317 lines
9.7 KiB
C
/**
|
|
* \file
|
|
*
|
|
* \brief Common SD/MMC stack header file
|
|
*
|
|
* Copyright (c) 2012 - 2013 Atmel Corporation. All rights reserved.
|
|
*
|
|
* \asf_license_start
|
|
*
|
|
* \page License
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the following disclaimer.
|
|
*
|
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
* this list of conditions and the following disclaimer in the documentation
|
|
* and/or other materials provided with the distribution.
|
|
*
|
|
* 3. The name of Atmel may not be used to endorse or promote products derived
|
|
* from this software without specific prior written permission.
|
|
*
|
|
* 4. This software may only be redistributed and used in connection with an
|
|
* Atmel microcontroller product.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
|
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
|
* EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
|
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
* \asf_license_stop
|
|
*
|
|
*/
|
|
|
|
#ifndef SD_MMC_H_INCLUDED
|
|
#define SD_MMC_H_INCLUDED
|
|
|
|
#include "compiler.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* \ingroup common_memory
|
|
* \defgroup sd_mmc_stack_group SD/MMC/SDIO common stack
|
|
*
|
|
* SD/MMC/SDIO basic APIs used by SD/MMC/SDIO memory
|
|
* APIs (\ref sd_mmc_stack_mem_group).
|
|
* Also, it can be used by application which use the SDIO card
|
|
* or specific application which does not need of File System.
|
|
*
|
|
* For usual application which use the SD/MMC card in
|
|
* memory mode with a file system, please refer to
|
|
* \ref sd_mmc_stack_mem_group.
|
|
* @{
|
|
*/
|
|
|
|
typedef uint8_t sd_mmc_err_t; //!< Type of return error code
|
|
|
|
//! \name Return error codes
|
|
//! @{
|
|
#define SD_MMC_OK 0 //! No error
|
|
#define SD_MMC_INIT_ONGOING 1 //! Card not initialized
|
|
#define SD_MMC_ERR_NO_CARD 2 //! No SD/MMC card inserted
|
|
#define SD_MMC_ERR_UNUSABLE 3 //! Unusable card
|
|
#define SD_MMC_ERR_SLOT 4 //! Slot unknow
|
|
#define SD_MMC_ERR_COMM 5 //! General communication error
|
|
#define SD_MMC_ERR_PARAM 6 //! Illeage input parameter
|
|
#define SD_MMC_ERR_WP 7 //! Card write protected
|
|
//! @}
|
|
|
|
typedef uint8_t card_type_t; //!< Type of card type
|
|
|
|
//! \name Card Types
|
|
//! @{
|
|
#define CARD_TYPE_UNKNOWN (0) //!< Unknown type card
|
|
#define CARD_TYPE_SD (1 << 0) //!< SD card
|
|
#define CARD_TYPE_MMC (1 << 1) //!< MMC card
|
|
#define CARD_TYPE_SDIO (1 << 2) //!< SDIO card
|
|
#define CARD_TYPE_HC (1 << 3) //!< High capacity card
|
|
//! SD combo card (io + memory)
|
|
#define CARD_TYPE_SD_COMBO (CARD_TYPE_SD | CARD_TYPE_SDIO)
|
|
//! @}
|
|
|
|
typedef uint8_t card_version_t; //!< Type of card version
|
|
|
|
//! \name Card Versions
|
|
//! @{
|
|
#define CARD_VER_UNKNOWN (0) //! Unknown card version
|
|
#define CARD_VER_SD_1_0 (0x10) //! SD version 1.0 and 1.01
|
|
#define CARD_VER_SD_1_10 (0x1A) //! SD version 1.10
|
|
#define CARD_VER_SD_2_0 (0X20) //! SD version 2.00
|
|
#define CARD_VER_SD_3_0 (0X30) //! SD version 3.0X
|
|
#define CARD_VER_MMC_1_2 (0x12) //! MMC version 1.2
|
|
#define CARD_VER_MMC_1_4 (0x14) //! MMC version 1.4
|
|
#define CARD_VER_MMC_2_2 (0x22) //! MMC version 2.2
|
|
#define CARD_VER_MMC_3 (0x30) //! MMC version 3
|
|
#define CARD_VER_MMC_4 (0x40) //! MMC version 4
|
|
//! @}
|
|
|
|
//! This SD MMC stack uses the maximum block size autorized (512 bytes)
|
|
#define SD_MMC_BLOCK_SIZE 512
|
|
|
|
/**
|
|
* \brief Initialize the SD/MMC stack and low level driver required
|
|
*/
|
|
void sd_mmc_init(void);
|
|
|
|
/** \brief Return the number of slot available
|
|
*
|
|
* \return Number of card slot available
|
|
*/
|
|
uint8_t sd_mmc_nb_slot(void);
|
|
|
|
/** \brief Performs a card checks
|
|
*
|
|
* \param slot Card slot to use
|
|
*
|
|
* \retval SD_MMC_OK Card ready
|
|
* \retval SD_MMC_INIT_ONGOING Initialization on going
|
|
* \retval SD_MMC_ERR_NO_CARD Card not present in slot
|
|
* \retval Other value for error cases, see \ref sd_mmc_err_t
|
|
*/
|
|
sd_mmc_err_t sd_mmc_check(uint8_t slot);
|
|
|
|
/** \brief Get the card type
|
|
*
|
|
* \param slot Card slot
|
|
*
|
|
* \return Card type (\ref card_type_t)
|
|
*/
|
|
card_type_t sd_mmc_get_type(uint8_t slot);
|
|
|
|
/** \brief Get the card version
|
|
*
|
|
* \param slot Card slot
|
|
*
|
|
* \return Card version (\ref card_version_t)
|
|
*/
|
|
card_version_t sd_mmc_get_version(uint8_t slot);
|
|
|
|
/** \brief Get the memory capacity
|
|
*
|
|
* \param slot Card slot
|
|
*
|
|
* \return Capacity (unit KB)
|
|
*/
|
|
uint32_t sd_mmc_get_capacity(uint8_t slot);
|
|
|
|
/** \brief Get the bus width
|
|
*
|
|
* \param slot Card slot
|
|
*
|
|
* \return width, 1 or 4
|
|
*/
|
|
uint32_t sd_mmc_get_bus_width(uint8_t slot);
|
|
|
|
/** \brief Get the bus clock speed
|
|
*
|
|
* \param slot Card slot
|
|
*
|
|
* \return Clock speed(unit HZ)
|
|
*/
|
|
uint32_t sd_mmc_get_bus_clock(uint8_t slot);
|
|
|
|
/** \brief Get the card write protection status
|
|
*
|
|
* \param slot Card slot
|
|
*
|
|
* \return true, if write portected
|
|
*/
|
|
bool sd_mmc_is_write_protected(uint8_t slot);
|
|
|
|
/**
|
|
* \brief Initialize the read blocks of data from the card.
|
|
*
|
|
* \param slot Card slot to use
|
|
* \param start Start block number to to read.
|
|
* \param nb_block Total number of blocks to be read.
|
|
*
|
|
* \return return SD_MMC_OK if success,
|
|
* otherwise return an error code (\ref sd_mmc_err_t).
|
|
*/
|
|
sd_mmc_err_t sd_mmc_init_read_blocks(uint8_t slot, uint32_t start,
|
|
uint16_t nb_block);
|
|
|
|
/**
|
|
* \brief Start the read blocks of data from the card.
|
|
*
|
|
* \param dest Pointer to read buffer.
|
|
* \param nb_block Number of blocks to be read.
|
|
*
|
|
* \return return SD_MMC_OK if started,
|
|
* otherwise return an error code (\ref sd_mmc_err_t).
|
|
*/
|
|
sd_mmc_err_t sd_mmc_start_read_blocks(void *dest, uint16_t nb_block);
|
|
|
|
/**
|
|
* \brief Wait the end of read blocks of data from the card.
|
|
*
|
|
* \return return SD_MMC_OK if success,
|
|
* otherwise return an error code (\ref sd_mmc_err_t).
|
|
*/
|
|
sd_mmc_err_t sd_mmc_wait_end_of_read_blocks(void);
|
|
|
|
/**
|
|
* \brief Initialize the write blocks of data
|
|
*
|
|
* \param slot Card slot to use
|
|
* \param start Start block number to be written.
|
|
* \param nb_block Total number of blocks to be written.
|
|
*
|
|
* \return return SD_MMC_OK if success,
|
|
* otherwise return an error code (\ref sd_mmc_err_t).
|
|
*/
|
|
sd_mmc_err_t sd_mmc_init_write_blocks(uint8_t slot, uint32_t start,
|
|
uint16_t nb_block);
|
|
|
|
/**
|
|
* \brief Start the write blocks of data
|
|
*
|
|
* \param src Pointer to write buffer.
|
|
* \param nb_block Number of blocks to be written.
|
|
*
|
|
* \return return SD_MMC_OK if started,
|
|
* otherwise return an error code (\ref sd_mmc_err_t).
|
|
*/
|
|
sd_mmc_err_t sd_mmc_start_write_blocks(const void *src, uint16_t nb_block);
|
|
|
|
/**
|
|
* \brief Wait the end of write blocks of data
|
|
*
|
|
* \return return SD_MMC_OK if success,
|
|
* otherwise return an error code (\ref sd_mmc_err_t).
|
|
*/
|
|
sd_mmc_err_t sd_mmc_wait_end_of_write_blocks(void);
|
|
|
|
#ifdef SDIO_SUPPORT_ENABLE
|
|
/**
|
|
* \brief Read one byte from SDIO using RW_DIRECT command.
|
|
*
|
|
* \param slot Card slot to use
|
|
* \param func_num Function number.
|
|
* \param addr Register address to read from.
|
|
* \param dest Pointer to read buffer.
|
|
*
|
|
* \return return SD_MMC_OK if success,
|
|
* otherwise return an error code (\ref sd_mmc_err_t).
|
|
*/
|
|
sd_mmc_err_t sdio_read_direct(uint8_t slot, uint8_t func_num, uint32_t addr,
|
|
uint8_t *dest);
|
|
/**
|
|
* \brief Write one byte to SDIO using RW_DIRECT command.
|
|
*
|
|
* \param slot Card slot to use
|
|
* \param func_num Function number.
|
|
* \param addr Register address to read from.
|
|
* \param data Data to be written.
|
|
*
|
|
* \return return SD_MMC_OK if success,
|
|
* otherwise return an error code (\ref sd_mmc_err_t).
|
|
*/
|
|
sd_mmc_err_t sdio_write_direct(uint8_t slot, uint8_t func_num, uint32_t addr,
|
|
uint8_t data);
|
|
|
|
/**
|
|
* \brief Read bytes from SDIO using RW_EXTENDED command.
|
|
*
|
|
* \param slot Card slot to use
|
|
* \param func_num Function number.
|
|
* \param addr First register address to read from.
|
|
* \param inc_addr 0 - The data address is fixed.
|
|
* 1 - The data address increase automatically.
|
|
* \param dest Pointer to read buffer.
|
|
* \param size Number of bytes to read (1 ~ 512).
|
|
*
|
|
* \return return SD_MMC_OK if success,
|
|
* otherwise return an error code (\ref sd_mmc_err_t).
|
|
*/
|
|
sd_mmc_err_t sdio_read_extended(uint8_t slot, uint8_t func_num, uint32_t addr,
|
|
uint8_t inc_addr, uint8_t *dest, uint16_t size);
|
|
|
|
/**
|
|
* \brief Write bytes to SDIO using RW_EXTENDED command.
|
|
*
|
|
* \param slot Card slot to use
|
|
* \param func_num Function number.
|
|
* \param addr First register address to write to.
|
|
* \param inc_addr 0 - The data address is fixed.
|
|
* 1 - The data address increase automatically.
|
|
* \param src Pointer to write buffer.
|
|
* \param size Number of bytes to read (1 ~ 512).
|
|
*
|
|
* \return return SD_MMC_OK if success,
|
|
* otherwise return an error code (\ref sd_mmc_err_t).
|
|
*/
|
|
sd_mmc_err_t sdio_write_extended(uint8_t slot, uint8_t func_num, uint32_t addr,
|
|
uint8_t inc_addr, uint8_t *src, uint16_t size);
|
|
#endif // SDIO_SUPPORT_ENABLE
|
|
|
|
/** @} */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* SD_MMC_H_INCLUDED */
|