26#include "sdio_registers.h"
27#include "syna_device.h"
28#include "io_expander.h"
141#define SDIO_BLOCK_SIZE (512UL)
143#define SDIO_SDSC_ADDR_SHIFT (9U)
149#define SDIO_CLK_400K (400UL * 1000UL)
150#define SDIO_CLK_10M (10UL * 1000UL * 1000UL)
151#define SDIO_CLK_20M (20UL * 1000UL * 1000UL)
152#define SDIO_CLK_25M (25UL * 1000UL * 1000UL)
153#define SDIO_CLK_50M (50UL * 1000UL * 1000UL)
154#define SDIO_CLK_100M (100UL * 1000UL * 1000UL)
156#define SDIO_CLK_RAMP_UP_TIME_MS (100UL)
158#ifndef SDIO_CLK_RAMP_UP_TIME_US_WAKEUP
162#ifndef SDIO_CLK_RAMP_UP_TIME_MS_WAKEUP
167#define SDIO_CLK_RAMP_UP_TIME_US_WAKEUP (1U)
171#define SDIO_CLK_RAMP_UP_TIME_US_WAKEUP (SDIO_CLK_RAMP_UP_TIME_MS_WAKEUP * 1000U)
176#define SDIO_INIT_CLK_FREQUENCY_KHZ (400U)
179#define SDIO_3_PERIODS_US (((1000U * 3U) / SDIO_INIT_CLK_FREQUENCY_KHZ) + 1U)
181#define SDIO_CARD_IDLE (0x0UL)
182#define SDIO_CARD_READY (0x1UL)
183#define SDIO_CARD_IDENT (0x2UL)
184#define SDIO_CARD_STBY (0x3UL)
185#define SDIO_CARD_TRAN (0x4UL)
186#define SDIO_CARD_DATA (0x5UL)
187#define SDIO_CARD_RCV (0x6UL)
188#define SDIO_CARD_PRG (0x7UL)
189#define SDIO_CARD_DIS (0x8UL)
191#define SDIO_CMD13_OUT_OF_RANGE (31U)
192#define SDIO_CMD13_ADDRESS_ERROR (30U)
193#define SDIO_CMD13_BLOCK_LEN_ERROR (29U)
194#define SDIO_CMD13_ERASE_SEQ_ERROR (28U)
197#define SDIO_CMD13_ERASE_PARAM (27U)
200#define SDIO_CMD13_WP_VIOLATION (26U)
203#define SDIO_CMD13_CARD_IS_LOCKED (25U)
204#define SDIO_CMD13_LOCK_ULOCK_FAILED (24U)
207#define SDIO_CMD13_COM_CRC_ERROR (23U)
208#define SDIO_CMD13_ILLEGAL_COMMAND (22U)
209#define SDIO_CMD13_CARD_ECC_FAILED (21U)
210#define SDIO_CMD13_CC_ERROR (20U)
211#define SDIO_CMD13_ERROR (19U)
212#define SDIO_CMD13_CSD_OVERWRITE (16U)
220#define SDIO_CMD13_WP_ERASE_SKIP (15U)
226#define SDIO_CMD13_CARD_ECC_DISABLED (14U)
230#define SDIO_CMD13_CURRENT_STATE (9U)
231#define SDIO_CMD13_READY_FOR_DATA (8U)
232#define SDIO_CMD13_APP_CMD (5U)
236#define SDIO_CMD13_AKE_SEQ_ERROR (3U)
240#define SDIO_CMD13_CURRENT_STATE_MSK (0x00001E00UL)
250#define SDIO_CMD_COMPLETE (0x0001U)
256#define SDIO_XFER_COMPLETE (0x0002U)
263#define SDIO_BGAP (0x0004U)
274#define SDIO_DMA_INTERRUPT (0x0008U)
280#define SDIO_BUF_WR_READY (0x0010U)
286#define SDIO_BUF_RD_READY (0x0020U)
293#define SDIO_CARD_INSERTION (0x0040U)
300#define SDIO_CARD_REMOVAL (0x0080U)
306#define SDIO_CARD_INTERRUPT (0x0100U)
314#define SDIO_FX_EVENT (0x2000U)
321#define SDIO_ERR_INTERRUPT (0x8000U)
328#define SDIO_CUR_LMT_ERR (0x0080U)
340#define SDIO_ADMA_ERR (0x0200U)
346#define SDIO_TUNING_ERR (0x0400U)
354#define SDIO_DAT_7_4 (0x000000F0UL)
361#define SDIO_BUF_WR_ENABLE (0x00000400UL)
368#define SDIO_BUF_RD_ENABLE (0x00000800UL)
376#define SDIO_CARD_INSERTED (0x00010000UL)
384#define SDIO_CARD_STABLE (0x00020000UL)
391#define SDIO_CARD_DETECT_PIN_LEVEL (0x00040000UL)
399#define SDIO_WR_PROTECT_SW_LVL (0x00080000UL)
407#define SDIO_DAT_3_0 (0x00F00000UL)
415#define SDIO_DAT_0_Msk (0x00100000UL)
423#define SDIO_CMD_LINE_LVL (0x01000000UL)
432#define SDIO_HOST_REG_VOL (0x02000000UL)
440#define SDIO_CMD_ISSU_ERR (0x08000000UL)
447#define SDIO_SUB_CMD_STAT (0x10000000UL)
1212 bool enable18VSignal);
1262 uint32_t *responsePtr,
1263 bool largeResponse);
1699 uint32_t functionNumber,
1701 uint32_t registerAddress,
1723 uint32_t cmdArgument);
sdio_instance_en
SDIO Instances.
Definition sr110.h:896
sdio_reset_en
SD Host reset types.
Definition sdio.h:486
sdio_auto_cmd_status_en
Auto CMD Status error codes.
Definition sdio.h:516
sdio_write_protect_en
Write Protect type enum.
Definition sdio.h:673
sdio_card_type_en
Card type.
Definition sdio.h:613
sdio_response_type_en
SDHC response types.
Definition sdio.h:635
sdio_dma_type_en
The DMA type enum.
Definition sdio.h:664
sdio_erase_type_en
Erase type.
Definition sdio.h:581
sdio_status_en
SD host error codes.
Definition sdio.h:530
sdio_r1_response_en
Card status in R1 response type enum.
Definition sdio.h:683
sdio_bus_width_en
The widths of the data bus.
Definition sdio.h:554
sdio_adma_error_en
SD Host error interrupt types..
Definition sdio.h:496
sdio_bus_speed_mode_en
The bus speed modes.
Definition sdio.h:563
sdio_card_capacity_en
The card capacity type.
Definition sdio.h:624
sdio_cmd_type_en
SD command types.
Definition sdio.h:464
sdio_auto_cmd_en
SD Host auto command enable selection..
Definition sdio.h:475
@ SDIO_RESET_ALL
Definition sdio.h:489
@ SDIO_RESET_DATALINE
Definition sdio.h:487
@ SDIO_RESET_CMD_LINE
Definition sdio.h:488
@ SDIO_AUTO_CMD_EBIT_ERR
Definition sdio.h:520
@ SDIO_AUTO_CMD12_NOT_EXEC
Definition sdio.h:517
@ SDIO_AUTO_CMD_CRC_ERR
Definition sdio.h:519
@ SDIO_AUTO_CMD_RESP_ERR
Definition sdio.h:522
@ SDIO_AUTO_CMD_IDX_ERR
Definition sdio.h:521
@ SDIO_AUTO_CMD_TOUT_ERR
Definition sdio.h:518
@ SDIO_CMD_NOT_ISSUED_AUTO_CMD12
Definition sdio.h:523
@ SDIO_DISABLE_TEMPORARY
Definition sdio.h:676
@ SDIO_PERMANENT
Definition sdio.h:674
@ SDIO_ENABLE_TEMPORARY
Definition sdio.h:675
@ SDIO_COMBO
Definition sdio.h:616
@ SDIO_UNUSABLE
Definition sdio.h:617
@ SDIO_SDIO
Definition sdio.h:615
@ SDIO_SD
Definition sdio.h:614
@ SDIO_RESPONSE_LEN_136
Definition sdio.h:641
@ SDIO_RESPONSE_NONE
Definition sdio.h:636
@ SDIO_RESPONSE_LEN_48
Definition sdio.h:645
@ SDIO_RESPONSE_LEN_48B
Definition sdio.h:653
@ SDIO_DMA_ADMA2
Definition sdio.h:666
@ SDIO_DMA_SDMA
Definition sdio.h:665
@ SDIO_ERASE_SECURE_TRIM_STEP_1
Definition sdio.h:599
@ SDIO_ERASE_FULE
Definition sdio.h:584
@ SDIO_ERASE_DISCARD
Definition sdio.h:583
@ SDIO_ERASE_TRIM
Definition sdio.h:603
@ SDIO_ERASE_ERASE
Definition sdio.h:582
@ SDIO_ERASE_SECURE
Definition sdio.h:585
@ SDIO_ERASE_SECURE_TRIM_STEP_2
Definition sdio.h:591
@ SDIO_ERROR_DATA_END_BIT
Definition sdio.h:544
@ SDIO_ERROR
Definition sdio.h:532
@ SDIO_ERROR_UNUSABLE_CARD
Definition sdio.h:541
@ SDIO_ERROR_UNINITIALIZED
Definition sdio.h:537
@ SDIO_ERROR_OPERATION_IN_PROGRESS
Definition sdio.h:534
@ SDIO_ERROR_CRC
Definition sdio.h:543
@ SDIO_ERROR_GENERAL
Definition sdio.h:545
@ SDIO_ERROR_TIMEOUT
Definition sdio.h:540
@ SDIO_ERROR_INVALID_PARAMETER
Definition sdio.h:533
@ SDIO_ERROR_DISCONNECTED
Definition sdio.h:542
@ SDIO_ERROR_NOT_SUPPORTED
Definition sdio.h:546
@ SDIO_OK
Definition sdio.h:531
@ SDIO_ERROR_DATA_INTEGRITY
Definition sdio.h:547
@ SDIO_CURRENT_STATE_3_R1_RESP
Definition sdio.h:708
@ SDIO_READY_FOR_DATA_R1_RESP
Definition sdio.h:693
@ SDIO_ERASE_RESET_R1_RESP
Definition sdio.h:712
@ SDIO_COM_CRC_ERROR_R1_RESP
Definition sdio.h:736
@ SDIO_APP_CMD_R1_RESP
Definition sdio.h:687
@ SDIO_CARD_ECC_FAILED_R1_RESP
Definition sdio.h:732
@ SDIO_ERASE_SEQ_ERROR_R1_RESP
Definition sdio.h:750
@ SDIO_CURRENT_STATE_2_R1_RESP
Definition sdio.h:704
@ SDIO_CARD_ECC_DISABLED_R1_RESP
Definition sdio.h:716
@ SDIO_ILLEGAL_COMMAND_R1_RESP
Definition sdio.h:735
@ SDIO_CURRENT_STATE_1_R1_RESP
Definition sdio.h:700
@ SDIO_WP_ERASE_SKIP_R1_RESP
Definition sdio.h:719
@ SDIO_OUT_OF_RANGE_R1_RESP
Definition sdio.h:760
@ SDIO_AKE_SEQ_ERROR_R1_RESP
Definition sdio.h:684
@ SDIO_ERROR_R1_RESP
Definition sdio.h:728
@ SDIO_LOCK_UNLOCK_FAILED_R1_RESP
Definition sdio.h:737
@ SDIO_ERASE_PARAM_R1_RESP
Definition sdio.h:747
@ SDIO_BLOCK_LEN_ERROR_R1_RESP
Definition sdio.h:753
@ SDIO_FX_EVENT_R1_RESP
Definition sdio.h:690
@ SDIO_CURRENT_STATE_0_R1_RESP
Definition sdio.h:696
@ SDIO_CC_ERROR_R1_RESP
Definition sdio.h:731
@ SDIO_CSD_OVERWRITE_R1_RESP
Definition sdio.h:724
@ SDIO_ADDRESS_ERROR_R1_RESP
Definition sdio.h:757
@ SDIO_CARD_IS_LOCKED_R1_RESP
Definition sdio.h:740
@ SDIO_WP_VIOLATION_R1_RESP
Definition sdio.h:743
@ SDIO_BUS_WIDTH_1_BIT
Definition sdio.h:555
@ SDIO_BUS_WIDTH_4_BIT
Definition sdio.h:556
@ SDIO_ADMA_ST_STOP
Definition sdio.h:497
@ SDIO_ADMA_LEN_ERR
Definition sdio.h:509
@ SDIO_ADMA_ST_FDS
Definition sdio.h:501
@ SDIO_ADMA_ST_TFR
Definition sdio.h:505
@ SDIO_BUS_SPEED_HIGHSPEED
Definition sdio.h:565
@ SDIO_BUS_SPEED_DEFAULT
Definition sdio.h:564
@ SDIO_BUS_SPEED_SDR12_5
Definition sdio.h:566
@ SDIO_BUS_SPEED_SDR25
Definition sdio.h:569
@ SDIO_BUS_SPEED_SDR50
Definition sdio.h:572
@ SDIO_UNSUPPORTED
Definition sdio.h:628
@ SDIO_SDSC
Definition sdio.h:625
@ SDIO_SDXC
Definition sdio.h:627
@ SDIO_SDHC
Definition sdio.h:626
@ SDIO_CMD_RESUME
Definition sdio.h:467
@ SDIO_CMD_ABORT
Definition sdio.h:468
@ SDIO_CMD_SUSPEND
Definition sdio.h:466
@ SDIO_CMD_NORMAL
Definition sdio.h:465
@ SDIO_AUTO_CMD_AUTO
Definition sdio.h:479
@ SDIO_AUTO_CMD_12
Definition sdio.h:477
@ SDIO_AUTO_CMD_23
Definition sdio.h:478
@ SDIO_AUTO_CMD_NONE
Definition sdio.h:476
uint32_t sdio_get_present_state(sdio_instance_en id)
void sdio_clear_error_interrupt_status(sdio_instance_en id, uint32_t status)
uint32_t sdio_get_ocr(sdio_instance_en id)
ISR_CODE uint32_t sdio_isr(sdio_instance_en id)
sdio_status_en sdio_ops_select_card(sdio_instance_en id)
sdio_status_en sdio_ops_go_idle(sdio_instance_en id)
sdio_status_en sdio_set_sd_clk_div(sdio_instance_en id, uint16_t clkDiv)
sdio_status_en sdio_ops_sdio_send_op_cond(sdio_instance_en id, uint32_t *ocrReg, uint32_t cmdArgument)
sdio_status_en sdio_software_reset(sdio_instance_en id, sdio_reset_en reset)
sdio_status_en sdio_send_command(sdio_instance_en id, sdio_cmd_config_t const *config)
uint32_t sdio_buffer_read(sdio_instance_en id)
sdio_status_en sdio_set_bus_width(sdio_instance_en id, sdio_bus_width_en width)
sdio_status_en sdio_set_bus_speed_mode(sdio_instance_en id, sdio_bus_speed_mode_en speedMode)
void sdio_disable_card_voltage(sdio_instance_en id)
sdio_status_en sdio_write_protect(sdio_instance_en id, sdio_write_protect_en writeProtect)
sdio_status_en sdio_cmd_rx_data(sdio_instance_en id, sdio_data_config_t *pcmd)
uint32_t sdio_get_normal_interrupt_status(sdio_instance_en id)
sdio_status_en sdio_config(sdio_instance_en id, const sdio_config_t *config)
sdio_status_en sdio_abort_transfer(sdio_instance_en id)
void sdio_set_normal_interrupt_mask(sdio_instance_en id, uint32_t interruptMask)
sdio_status_en sdio_get_cid(sdio_instance_en id, uint32_t *cid)
void sdio_enable_card_voltage(sdio_instance_en id)
sdio_status_en sdio_init_data_transfer(sdio_instance_en id, sdio_data_config_t const *dataConfig)
uint32_t sdio_get_card_status(sdio_instance_en id)
sdio_status_en sdio_get_csd(sdio_instance_en id, uint32_t *csd)
sdio_status_en sdio_ops_send_io_rw_direct_cmd(sdio_instance_en id, uint32_t rwFlag, uint32_t functionNumber, uint32_t rawFlag, uint32_t registerAddress, uint32_t data)
sdio_status_en sdio_get_scr(sdio_instance_en id, uint32_t *scr)
sdio_status_en sdio_get_response(sdio_instance_en id, uint32_t *responsePtr, bool largeResponse)
sdio_status_en sdio_change_clock(sdio_instance_en id, uint32_t frequency)
void sdio_set_block_size_count(sdio_instance_en id)
sdio_status_en sdio_fetch_rca(sdio_instance_en id)
void sdio_set_error_interrupt_enable(sdio_instance_en id, uint32_t interrupt)
sdio_status_en sdio_get_block_count(sdio_instance_en id, uint32_t *block_count)
uint32_t sdio_get_rca(sdio_instance_en id)
sdio_status_en sdio_sd_card_read(sdio_instance_en id, sdio_write_read_config_t *config)
sdio_status_en sdio_buffer_write(sdio_instance_en id, uint32_t data)
sdio_status_en sdio_deinit(sdio_instance_en id)
sdio_status_en sdio_set_host_bus_width(sdio_instance_en id, sdio_bus_width_en width)
sdio_status_en sdio_sd_card_erase(sdio_instance_en id, uint32_t startAddr, uint32_t endAddr, sdio_erase_type_en eraseType)
sdio_status_en sdio_init(sdio_instance_en id)
sdio_status_en sdio_cmd_tx_data(sdio_instance_en id, sdio_data_config_t *pcmd)
sdio_status_en sdio_set_host_speed_mode(sdio_instance_en id, sdio_bus_speed_mode_en speedMode)
bool sdio_is_card_connected(sdio_instance_en id)
sdio_status_en sdio_disable(sdio_instance_en id)
sdio_status_en sdio_set_host_voltage(sdio_instance_en id)
sdio_status_en sdio_enable(sdio_instance_en id)
sdio_status_en sdio_sd_card_write(sdio_instance_en id, sdio_write_read_config_t *config)
bool sdio_is_wp_set(sdio_instance_en id)
void sdio_clear_normal_interrupt_status(sdio_instance_en id, uint32_t status)
sdio_status_en sdio_sel_bus_voltage(sdio_instance_en id, bool enable18VSignal)
sdio_status_en sdio_sd_card_init(sdio_instance_en id, sdio_sd_card_config_t *config)
void sdio_set_normal_interrupt_enable(sdio_instance_en id, uint32_t interrupt)
SD Host command configuration structure.
Definition sdio.h:815
bool enableCrcCheck
Definition sdio.h:822
bool dataPresent
Definition sdio.h:834
bool enableAutoResponseErrorCheck
Definition sdio.h:825
sdio_cmd_type_en cmdType
Definition sdio.h:838
sdio_response_type_en respType
Definition sdio.h:828
uint32_t commandArgument
Definition sdio.h:819
bool enableIdxCheck
Definition sdio.h:831
uint32_t commandIndex
Definition sdio.h:816
SD Host initialization configuration structure.
Definition sdio.h:780
sdio_dma_type_en dmaType
Definition sdio.h:781
The SD Host data transfer configuration structure.
Definition sdio.h:847
uint32_t * data
Definition sdio.h:859
uint32_t dataTimeout
Definition sdio.h:862
uint32_t blockSize
Definition sdio.h:848
bool enableDma
Definition sdio.h:850
bool read
Definition sdio.h:856
sdio_auto_cmd_en autoCommand
Definition sdio.h:853
bool enableIntAtBlockGap
Definition sdio.h:865
bool enReliableWrite
Definition sdio.h:868
uint32_t numberOfBlock
Definition sdio.h:849
SD card configuration structure.
Definition sdio.h:790
uint32_t * rca
Definition sdio.h:798
uint32_t busSpeed
Definition sdio.h:805
sdio_card_type_en * cardType
Definition sdio.h:795
sdio_card_capacity_en * cardCapacity
Definition sdio.h:801
sdio_bus_width_en busWidth
Definition sdio.h:794
bool lowVoltageSignaling
Definition sdio.h:791
uint32_t clockSpeed
Definition sdio.h:804
SD Host Write/Read structure.
Definition sdio.h:877
sdio_auto_cmd_en autoCommand
Definition sdio.h:885
bool enReliableWrite
Definition sdio.h:891
uint32_t numberOfBlocks
Definition sdio.h:884
bool enableDma
Definition sdio.h:894
uint32_t * data
Definition sdio.h:878
uint32_t dataTimeout
Definition sdio.h:888
uint32_t address
Definition sdio.h:881