Microchip® Advanced Software Framework

mci.c File Reference

UC3 MCI driver.

Copyright (c) 2014-2018 Microchip Technology Inc. and its subsidiaries.

#include <asf.h>
#include "conf_board.h"
#include "sd_mmc_protocol.h"
#include "sysclk.h"
#include "mci.h"

Macros

#define AVR32_MCI_MR_FBYTE_MASK   AVR32_MCI_MR_PDCFBYTE_MASK
 
#define AVR32_MCI_DTOR_DTOMUL_1048576_MASK   (AVR32_MCI_DTOR_DTOMUL_1048576 << AVR32_MCI_DTOR_DTOMUL_OFFSET)
 Registers masks definitions. More...
 
#define AVR32_MCI_CSTOR_CSTOMUL_1048576_MASK   (AVR32_MCI_CSTOR_CSTOMUL_1048576 << AVR32_MCI_CSTOR_CSTOMUL_OFFSET)
 
#define AVR32_MCI_CSTOR_CSTOCYC_2_MASK   ( 2 << AVR32_MCI_CSTOR_CSTOCYC_OFFSET)
 
#define AVR32_MCI_DTOR_DTOCYC_2_MASK   ( 2 << AVR32_MCI_DTOR_DTOCYC_OFFSET)
 
#define AVR32_MCI_SDCR_SDCBUS_1_BIT_MASK   ( AVR32_MCI_SDCR_SDCBUS_1_BIT << AVR32_MCI_SDCR_SDCBUS_OFFSET)
 
#define AVR32_MCI_SDCR_SDCBUS_4_BIT_MASK   ( AVR32_MCI_SDCR_SDCBUS_4_BIT << AVR32_MCI_SDCR_SDCBUS_OFFSET)
 
#define AVR32_MCI_SDCR_SDCBUS_8_BIT_MASK   ( AVR32_MCI_SDCR_SDCBUS_8_BIT << AVR32_MCI_SDCR_SDCBUS_OFFSET)
 
#define AVR32_MCI_SDCR_SDCSEL_0_MASK   ( 0 << AVR32_MCI_SDCR_SDCSEL_OFFSET)
 
#define AVR32_MCI_SDCR_SDCSEL_1_MASK   ( 1 << AVR32_MCI_SDCR_SDCSEL_OFFSET)
 
#define AVR32_MCI_CMDR_TRCMD_START_TRANS_MASK   ( AVR32_MCI_CMDR_TRCMD_START_TRANS << AVR32_MCI_CMDR_TRCMD_OFFSET)
 
#define AVR32_MCI_CMDR_TRDIR_READ_MASK   ( AVR32_MCI_CMDR_TRDIR_READ << AVR32_MCI_CMDR_TRDIR_OFFSET)
 
#define AVR32_MCI_CMDR_TRTYP_SDIO_BYTE_MASK   ( AVR32_MCI_CMDR_TRTYP_SDIO_BYTE << AVR32_MCI_CMDR_TRTYP_OFFSET)
 
#define AVR32_MCI_CMDR_TRTYP_SDIO_BLOCK_MASK   ( AVR32_MCI_CMDR_TRTYP_SDIO_BLOCK << AVR32_MCI_CMDR_TRTYP_OFFSET)
 
#define AVR32_MCI_CMDR_TRTYP_STREAM_MASK   ( AVR32_MCI_CMDR_TRTYP_STREAM << AVR32_MCI_CMDR_TRTYP_OFFSET)
 
#define AVR32_MCI_CMDR_TRTYP_BLOCK_MASK   ( AVR32_MCI_CMDR_TRTYP_BLOCK << AVR32_MCI_CMDR_TRTYP_OFFSET)
 
#define AVR32_MCI_CMDR_TRTYP_MULTI_BLOCK_MASK   ( AVR32_MCI_CMDR_TRTYP_MULTI_BLOCK << AVR32_MCI_CMDR_TRTYP_OFFSET)
 
#define mci_debug(...)
 
#define CONF_MCI_DMACA_CHANNEL   1
 
static uint32_t mci_transfert_pos
 
static uint16_t mci_block_size
 
static uint16_t mci_nb_block
 
static void mci_reset (void)
 Reset the MCI interface. More...
 
static void mci_set_speed (uint32_t speed, uint32_t pbb_hz)
 Set speed of the MCI clock. More...
 
static bool mci_wait_busy (void)
 Wait the end of busy signal on data line. More...
 
static bool mci_wait_busy_on_line (void)
 Wait the end of busy signal on data line through GPIO. More...
 
static bool mci_send_cmd_execute (uint32_t cmdr, sdmmc_cmd_def_t cmd, uint32_t arg)
 Send a command. More...
 
void mci_init (void)
 Initialize the low level driver. More...
 
uint8_t mci_get_bus_width (uint8_t slot)
 Return the maximum bus width of a slot. More...
 
bool mci_is_high_speed_capable (void)
 Return the high speed capability of the driver. More...
 
void mci_select_device (uint8_t slot, uint32_t clock, uint8_t bus_width, bool high_speed)
 Select a slot and initialize it. More...
 
void mci_deselect_device (uint8_t slot)
 Deselect a slot. More...
 
void mci_send_clock (void)
 Send 74 clock cycles on the line of selected slot Note: It is required after card plug and before card install. More...
 
bool mci_send_cmd (sdmmc_cmd_def_t cmd, uint32_t arg)
 Send a command on the selected slot. More...
 
uint32_t mci_get_response (void)
 Return the 32 bits response of the last command. More...
 
void mci_get_response_128 (uint8_t *response)
 Return the 128-bits response of the last command. More...
 
bool mci_adtc_start (sdmmc_cmd_def_t cmd, uint32_t arg, uint16_t block_size, uint16_t nb_block, bool access_block)
 Send an ADTC command on the selected slot An ADTC (Addressed Data Transfer Commands) command is used for read/write access. More...
 
bool mci_adtc_stop (sdmmc_cmd_def_t cmd, uint32_t arg)
 Send a command to stop an ADTC command on the selected slot. More...
 
bool mci_read_word (uint32_t *value)
 Read a word on the line. More...
 
bool mci_write_word (uint32_t value)
 Write a word on the line. More...
 
bool mci_start_read_blocks (void *dest, uint16_t nb_block)
 Start a read blocks transfer on the line Note: The driver will use the DMA available to speed up the transfer. More...
 
bool mci_wait_end_of_read_blocks (void)
 Wait the end of transfer started by mci_start_read_blocks() More...
 
bool mci_start_write_blocks (const void *src, uint16_t nb_block)
 Start a write blocks transfer on the line Note: The driver will use the DMA available to speed up the transfer. More...
 
bool mci_wait_end_of_write_blocks (void)
 Wait the end of transfer started by mci_start_write_blocks() More...