GD32F470入门教程(十二)SDIO

24k 词

SDIO

简介

安全的数字输入/输出接口(SDIO)定义了SD 卡、SD I/O 卡、多媒体卡(MMC)和CE-ATA卡主机接口,提供APB2 系统总线与SD 存储卡、SD I/O 卡、MMC 和CE-ATA 设备之间的数据传输。
所支持的SD 存储卡和SD I/O 卡系统规格书可以通过SD 卡协会网站(www.sdcard.org)获取。
所支持的多媒体卡(MMC)系统规格书可以通过多媒体卡协会网站(www.jedec.org)获取,由JEDEC 固态技术协会出版。
所支持的CE-ATA 系统规格书可以通过CE-ATA 工作组网站(www.ce-ata.org)获取。

主要特性

image-20260228131033625

SDIO总线拓补

SD卡使用9-pin接口通信,其中3根电源线、1根时钟线、1根命令线和4根数据线,具体说明如下:

  • CLK:时钟线,由SDIO主机产生,即由STM32控制器输出;
  • CMD:命令控制线,SDIO主机通过该线发送命令控制SD卡,如果命令要求SD卡提供应答(响应),SD卡也是通过该线传输应答信息;
  • D0-3:数据线,传输读写数据;SD卡可将D0拉低表示忙状态;
  • VDD、VSS1、VSS2:电源和地信号。

在之前的I2C以及SPI章节都有详细讲解了对应的通信时序,实际上,SDIO的通信时序简单许多,SDIO不管是从主机控制器 向SD卡传输,还是SD卡向主机控制器传输都只以CLK时钟线的上升沿为有效。SD卡操作过程会使用两种不同频率 的时钟同步数据,一个是识别卡阶段时钟频率FOD,最高为400kHz,另外一个是数据传输模式下时钟频率FPP,默认最高 为25MHz,如果通过相关寄存器配置使SDIO工作在高速模式,此时数据传输模式最高频率为50MHz。

总线上的基本操作是命令/响应操作(参考图24-1. SDIO “无响应” 和 “无数据” 操作)。这种类型的总线事务直接在命令或响应结构中传递它们的信息。此外,有些操作还有数据令牌。卡与设备之间的数据传输通过块完成。

image-20260228131456782

多块操作模式比单块操作速度更快。当CMD 信号线上出现停止命令时,多块传输终止。主机数据传输可以使用单个或多个数据线。多个块的读操作如图24-2. SDIO 多块读操作所示,多个块的写操作如图24-3. SDIO 多块写操作所示。块的写操作在数据(DAT0)信号线上使用忙信号。CE-ATA 设备在准备接收数据之前有一个可选的忙信号。

image-20260228131515381

image-20260228131524160

SD 存储卡、SD I/O 卡(包括仅IO 卡和组合卡)和CE-ATA 设备直接的数据传输是以数据块的方式完成的。MMC 卡以数据块或数据流方式进行数据传输。图24-4. SDIO 数据流读操作和图24-5. SDIO 数据流写操作分别是数据流的读和写操作。

image-20260228131539445

卡命令类

命令 类描述 basic Stream read Block read Stream write Block write erase write protection Lock card application specific I/O mode switch reserved
CMD0 M +
CMD1 M +
CMD2 M +
CMD3 M +
CMD4 M +
CMD5 O +
CMD6 M +
CMD7 M +
CMD8 M +
CMD9 M +
CMD10 M +
CMD11 M +
CMD13 M +
CMD14 M +
CMD15 M +
CMD16 M + + +
CMD17 M +
CMD18 M +
CMD19 M +
CMD20 M +
CMD23 M + +
CMD24 M +
CMD25 M +
CMD26 M +
CMD27 M +
CMD28 M +
CMD29 M +
CMD30 M +
CMD32 M +
CMD33 M +
CMD34 O +
CMD36 O +
CMD37 O +
CMD38 M +
CMD39 M +
CMD40 M +
CMD42 M +
CMD50 O +
CMD52 O +
CMD53 O +
CMD55 M +
CMD57 O +
CMD60 M +
CMD61 M +
ACMD6 M +
ACMD13 M +
ACMD22 M +
ACMD23 M +
ACMD41 M +
ACMD42 M +
ACMD51 M +

注意

  1. CMD1、CMD11、CMD14、CMD19、CMD20、CMD23、CMD26、CMD39 和 CMD40 仅用于 MMC 卡。
  2. CMD5、CMD32-34、CMD50、CMD52、CMD53、CMD57 和 ACMDx 仅用于 SD 存储卡。
  3. CMD60、CMD61 仅用于 CE-ATA 设备。

SD卡主要寄存器

SD卡内部包含多个寄存器,主机可以通过这些寄存器读取卡的状态、特性或控制卡的行为。常用的寄存器如下表所示:

寄存器 宽度 (bits) 描述 说明
CID (Card Identification) 128 卡识别寄存器 包含卡的唯一标识号,如制造商ID、产品名称、序列号、生产日期等。在卡识别阶段读取(CMD2/CMD10)。
RCA (Relative Card Address) 16 相对卡地址寄存器 包含卡在初始化过程中由卡发布的本地系统地址。主机使用该地址寻址卡(CMD3)。
CSD (Card Specific Data) 128 卡特定数据寄存器 包含卡的具体操作条件信息,如容量、最大读写电流、最大时钟频率、块长度等(CMD9)。
SCR (SD Configuration) 64 SD配置寄存器 包含SD卡的特殊功能信息,如支持的数据宽度(1位/4位)、SD版本规范等(ACMD51)。
OCR (Operation Condition) 32 操作条件寄存器 保存卡的电压支持范围和供电状态位。上电时主机需读取此寄存器确认电压匹配(CMD1)。
SSR (SD Status) 512 SD状态寄存器 包含卡的专有特性信息,如速度等级、分配单元大小等(ACMD13)。
CSR (Card Status) 32 卡状态寄存器 包含卡当前的状态信息(传输中、编程中、错误等),作为命令的响应返回(CMD13)。

SDIO 响应格式

SDIO 定义了多种响应格式(Response),不同的命令会触发不同类型的响应。常见的响应类型如下:

  • R1: 32位。包含卡状态(Card Status)。大多数读写命令和状态查询命令都使用此响应。
  • R1b: 与 R1 格式相同,但 SD 卡会在 DATA0 线上传输忙信号(Busy),直到操作完成。
  • R2: 136位。用于返回 CID 或 CSD 寄存器的全部内容。CMD2, CMD9, CMD10 使用此响应。
  • R3: 32位。用于返回 OCR 寄存器的内容。CMD58 或 ACMD41 使用此响应。
  • R6: 32位。SD 卡发布其相对地址 (RCA)。CMD3 使用此响应。
  • R7: 32位。包含电压范围和校验模式。仅 CMD8 使用。

SD 卡初始化流程详解

SD 卡的上电初始化是一个标准且严格的过程,必须按照特定顺序发送命令。

  1. 上电与时钟配置
    • 主机将时钟设置为 < 400kHz
    • 发送至少 74 个时钟周期,确保 SD 卡完成内部复位。
  2. 复位 (CMD0):
    • 发送 CMD0,使卡进入空闲状态 (Idle State)。
  3. 接口条件检测 (CMD8):
    • 仅 SD 2.0 及以上版本支持。发送 CMD8 检查电压范围和物理连接。如果卡有响应,说明是 V2.0 卡;无响应可能是 V1.x 或 MMC 卡。
  4. 初始化与电压确认 (ACMD41):
    • 循环发送 ACMD41(注意:发送 ACMD 之前必须先发送 CMD55)。
    • 在参数中设置主机支持的电压窗口(HCS 位设置是否支持高容量卡 SDHC/SDXC)。
    • 检查响应中的忙信号位,直到卡准备就绪 (Busy位为1)。
  5. 读取唯一标识 (CMD2):
    • 发送 CMD2,获取 CID 寄存器内容(136位)。
  6. 获取相对地址 (CMD3):
    • 发送 CMD3,让卡发布一个新的相对地址 (RCA)。主机后续使用此 RCA 寻址该卡。
  7. 读取卡参数 (CMD9):
    • 使用 RCA 发送 CMD9,获取 CSD 寄存器,从而计算卡容量、最大速率等信息。
  8. 选中卡 (CMD7):
    • 使用 RCA 发送 CMD7,选中该卡,使其进入传输状态 (Transfer State)。
  9. 配置总线宽度 (ACMD6):
    • 发送 ACMD6,将总线宽度从默认的 1-bit 切换为 4-bit(前提是硬件支持且已初始化 GPIO)。
  10. 提速:
    • 将 SDIO 时钟频率提高到 25MHz (或 50MHz),进入高速传输模式。

开发实战

GD32F470 标准库提供了完善的 SDIO 驱动函数,位于 gd32f4xx_sdio.cgd32f4xx_sdio.h 中。开发 SDIO 通常涉及 GPIO 配置、SDIO 参数初始化、命令发送、数据传输以及 DMA 配置。

1. 硬件引脚配置

SDIO 信号线通常复用在 PC8-PC12 和 PD2 上。需要配置为复用推挽输出(由 SDIO 控制器驱动)。

SDIO信号 GPIO引脚 描述
SDIO_D0 PC8 数据线 0
SDIO_D1 PC9 数据线 1
SDIO_D2 PC10 数据线 2
SDIO_D3 PC11 数据线 3
SDIO_CK PC12 时钟线
SDIO_CMD PD2 命令线
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/* 使能时钟 */
rcu_periph_clock_enable(RCU_GPIOC);
rcu_periph_clock_enable(RCU_GPIOD);
rcu_periph_clock_enable(RCU_SDIO);

/* 配置 PC8-PC12, PD2 为复用功能 */
gpio_af_set(GPIOC, GPIO_AF_12, GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12);
gpio_af_set(GPIOD, GPIO_AF_12, GPIO_PIN_2);

/* 配置 GPIO 模式 */
gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12);
gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12);

gpio_mode_set(GPIOD, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_2);
gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_2);

2. SDIO 初始化

初始化主要配置时钟分频、总线宽度、时钟边缘等。

关键结构体 sdio_parameter_struct

  • sdio_clock_edge: 时钟沿选择(SDIO_CLOCK_EDGE_RISING / FALLING)。
  • sdio_clock_bypass: 是否旁路时钟分频器(通常不旁路)。
  • sdio_clock_power_save: 省电模式,总线空闲时关闭时钟。
  • sdio_bus_mode: 总线位宽(1位/4位/8位)。初始化时通常先用1位宽,卡识别完成后再切换为4位宽
  • sdio_hardware_flow_control: 硬件流控,防止 FIFO 溢出。
  • sdio_clock_divider: 时钟分频系数。$SDIO_CK = SDIO_CLK / (分频系数 + 2)$。
    • 初始化频率不能超过 400kHz。
    • 数据传输频率可达 25MHz 或 50MHz。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
sdio_parameter_struct sdio_init_struct;

/* 复位 SDIO */
sdio_deinit();

/* 配置 SDIO 参数 - 初始化阶段使用低速时钟 (<= 400kHz) */
/* 假设系统时钟足够高,分频系数设大一点,例如 118 */
/* 48MHz / (118 + 2) = 400kHz */
sdio_init_struct.sdio_clock_edge = SDIO_CLOCK_EDGE_RISING;
sdio_init_struct.sdio_clock_bypass = SDIO_CLOCK_BYPASS_DISABLE;
sdio_init_struct.sdio_clock_power_save = SDIO_CLOCK_POWER_SAVE_DISABLE;
sdio_init_struct.sdio_bus_mode = SDIO_BUSMODE_1BIT; // 初始必须为1位
sdio_init_struct.sdio_hardware_flow_control = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
sdio_init_struct.sdio_clock_divider = 118;

sdio_init(&sdio_init_struct);

/* 使能 SDIO 电源 */
sdio_power_enable(SDIO_POWERMODE_ON);

/* 使能 SDIO 时钟 */
sdio_clock_enable();

3. 命令发送与响应

SDIO 通信的核心是命令-响应机制。

1
2
3
4
5
6
7
8
9
10
11
12
13
sdio_command_struct sdio_command_init_struct;

/* 发送 CMD0: 复位所有卡到空闲状态 */
sdio_command_init_struct.sdio_argument = 0x00;
sdio_command_init_struct.sdio_cmd_index = SDIO_CMD_0;
sdio_command_init_struct.sdio_response = SDIO_RESPONSE_NO; // 无响应
sdio_command_init_struct.sdio_wait = SDIO_WAIT_NO;
sdio_command_init_struct.sdio_cpsm = SDIO_CPSM_ENABLE; // 命令通道状态机使能

sdio_command_init(&sdio_command_init_struct);

/* 获取响应 (如有) */
/* uint32_t resp = sdio_response_get(SDIO_RESP1); */

4. 数据传输配置

在读写数据块时,需要告诉 SDIO 控制器数据的长度、块大小和传输方向。这通常配合 DMA 使用,但也支持轮询或中断。

1
2
3
4
5
6
7
8
9
10
sdio_data_struct sdio_data_init_struct;

sdio_data_init_struct.sdio_data_timeout_parameter = 0xFFFFFFFF;
sdio_data_init_struct.sdio_data_length = 512; // 传输 512 字节
sdio_data_init_struct.sdio_data_block_size = SDIO_DATABLOCK_SIZE_512B;
sdio_data_init_struct.sdio_transfer_direction = SDIO_DATA_TRANSFER_TO_CONTROLLER; // 读操作:卡 -> 控制器
sdio_data_init_struct.sdio_transfer_mode = SDIO_DATA_TRANSFER_MODE_BLOCK;
sdio_data_init_struct.sdio_dma_enable = SDIO_DMA_ENABLE; // 使能 DMA

sdio_data_config(&sdio_data_init_struct);

实战流程:读取 SD 卡扇区示例

SD 卡的初始化流程非常复杂(CMD0 -> CMD8 -> ACMD41 -> CMD2 -> CMD3 -> …)。通常我们会移植现成的 SD 卡驱动(如 GD32 官方示例中的 sd_card.c)。这里展示一个基于库函数的、简化后的单块读取函数的核心逻辑。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include "gd32f4xx.h"

/* 假设已经完成了 SD 卡的初始化、选卡(CMD7) 和 4位宽配置(ACMD6) */

/**
* @brief 使用 DMA 读取一个扇区 (512字节)
* @param buffer: 数据接收缓冲区 (需4字节对齐)
* @param sector_addr: 扇区地址
* @retval 状态
*/
ErrStatus sd_read_single_block(uint8_t *buffer, uint32_t sector_addr)
{
sdio_command_struct sdio_command;
sdio_data_struct sdio_data;

/* 1. 配置 DMA (DMA2_Channel4_Stream3 or Stream6 for SDIO) */
dma_single_data_parameter_struct dma_init_struct;

rcu_periph_clock_enable(RCU_DMA1);
dma_deinit(DMA1, DMA_CH4); // 注意:GD32F4 SDIO 通常在 DMA1, 具体查DataSheet
/* 修正:GD32F4 SDIO 通常连接 DMA1 Channel 4 */

dma_init_struct.periph_addr = (uint32_t)&SDIO_FIFO;
dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
dma_init_struct.memory0_addr = (uint32_t)buffer;
dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
dma_init_struct.periph_memory_width = DMA_PERIPH_WIDTH_32BIT; // FIFO 是32位的
dma_init_struct.circular_mode = DMA_CIRCULAR_MODE_DISABLE;
dma_init_struct.direction = DMA_PERIPH_TO_MEMORY;
dma_init_struct.number = 512 / 4; // 传输字数 (128 words)
dma_init_struct.priority = DMA_PRIORITY_HIGH;

dma_single_data_mode_init(DMA1, DMA_CH4, &dma_init_struct);
dma_channel_subperipheral_select(DMA1, DMA_CH4, DMA_SUBPERI4);

dma_channel_enable(DMA1, DMA_CH4);

/* 2. 配置 SDIO 数据路径 */
sdio_data.sdio_data_timeout_parameter = 0xFFFFFFFF;
sdio_data.sdio_data_length = 512;
sdio_data.sdio_data_block_size = SDIO_DATABLOCK_SIZE_512B;
sdio_data.sdio_transfer_direction = SDIO_DATA_TRANSFER_TO_CONTROLLER;
sdio_data.sdio_transfer_mode = SDIO_DATA_TRANSFER_MODE_BLOCK;
sdio_data.sdio_dma_enable = SDIO_DMA_ENABLE;
sdio_data_config(&sdio_data);

/* 3. 发送 CMD17 (READ_SINGLE_BLOCK) */
/* SDHC 卡地址是块地址,SDSC 卡是字节地址。这里假设是 SDHC/SDXC */
sdio_command.sdio_argument = sector_addr;
sdio_command.sdio_cmd_index = SDIO_CMD_17;
sdio_command.sdio_response = SDIO_RESPONSE_SHORT;
sdio_command.sdio_wait = SDIO_WAIT_NO;
sdio_command.sdio_cpsm = SDIO_CPSM_ENABLE;
sdio_command_init(&sdio_command);

/* 4. 等待命令响应和传输完成 */
/* Check command response errors... */

/* 等待 DMA 传输完成 */
while(RESET == dma_flag_get(DMA1, DMA_CH4, DMA_FLAG_FTF));

return SUCCESS;
}

SDIO库函数

库函数名称 库函数描述
sdio_deinit 复位 SDIO
sdio_clock_config 配置 SDIO 时钟
sdio_hardware_clock_enable 使能硬件时钟控制
sdio_hardware_clock_disable 禁能硬件时钟控制
sdio_bus_mode_set 设置多种 SDIO 卡总线模式
sdio_power_state_set 设置 SDIO 电源状态
sdio_power_state_get 获取 SDIO 电源状态
sdio_clock_enable 使能 SDIO_CLK 时钟
sdio_clock_disable 禁能 SDIO_CLK 时钟
sdio_command_response_config 配置命令和响应
sdio_wait_type_set 设置命令状态机等待类型
sdio_csm_enable 使能命令状态机
sdio_csm_disable 禁能命令状态机
sdio_command_index_get 获取上一次响应的命令索引
sdio_response_get 获取上一次响应的接收命令
sdio_data_config 配置数据超时、数据长度和数据块大小
sdio_data_transfer_config 配置数据传输模式和方向
sdio_dsm_enable 使能数据传输的数据状态机
sdio_dsm_disable 禁能数据传输的数据状态机
sdio_data_write 在发送 FIFO 里写入数据(一个字)
sdio_data_read 在接收 FIFO 里读取数据(一个字)
sdio_data_counter_get 获取要传输到卡的剩余数据字节的数目
sdio_fifo_counter_get 从 FIFO 中获取要写入或读取的字数
sdio_dma_enable 使能 SDIO 的 DMA 请求
sdio_dma_disable 禁能 SDIO 的 DMA 请求
sdio_flag_get 获取 SDIO 的标志位状态
sdio_flag_clear 清除 SDIO 的标志位状态
sdio_interrupt_enable 使能 SDIO 中断
sdio_interrupt_disable 禁能 SDIO 中断
sdio_interrupt_flag_get 获取 SDIO 的中断标志位状态
sdio_interrupt_flag_clear 清除 SDIO 的中断标志位状态
sdio_readwait_enable 使能读等待模式(仅限 SD I/O 模式)
sdio_readwait_disable 禁能读等待模式(仅限 SD I/O 模式)
sdio_stop_readwait_enable 使能停止读等待过程的功能(仅限 SD I/O 模式)
sdio_stop_readwait_disable 禁能停止读等待过程的功能(仅限 SD I/O 模式)
sdio_readwait_type_set 设置读等待类型(仅限 SD I/O 模式)
sdio_operation_enable 使能 SD I/O 模式特定操作(仅限 SD I/O 模式)
sdio_operation_disable 禁能 SD I/O 模式特定操作(仅限 SD I/O 模式)
sdio_suspend_enable 使能 SD I/O 暂停模式(仅限 SD I/O 模式)
sdio_suspend_disable 禁能 SD I/O 暂停模式(仅限 SD I/O 模式)
sdio_ceata_command_enable 使能 CE-ATA 命令 (仅限 CE-ATA 模式)
sdio_ceata_command_disable 禁能 CE-ATA 命令 (仅限 CE-ATA 模式)
sdio_ceata_interrupt_enable 使能 CE-ATA 中断 (仅限 CE-ATA 模式)
sdio_ceata_interrupt_disable 禁能 CE-ATA 中断 (仅限 CE-ATA 模式)
sdio_ceata_command_completion_enable 使能 CE-ATA 命令完成信号 (仅限 CE-ATA 模式)
sdio_ceata_command_completion_disable 禁能 CE-ATA 命令完成信号 (仅限 CE-ATA 模式)

1. 函数 sdio_deinit

  • 函数名称sdio_deinit
  • 函数原型void sdio_deinit(void);
  • 功能描述:复位SDIO外设。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:无
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* deinitialize the SDIO */
    sdio_deinit();

2. 函数 sdio_clock_config

  • 函数名称sdio_clock_config
  • 函数原型void sdio_clock_config(uint32_t clock_edge, uint32_t clock_bypass, uint32_t clock_powersave, uint32_t clock_division);
  • 功能描述:配置SDIO时钟。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:
    • clock_edge:SDIO_CLK时钟边沿选择
      • SDIO_SDIOCLKEDGE_RISING:选择SDIO_CLK的上升沿产生SDIO_CK
      • SDIO_SDIOCLKEDGE_FALLING:选择SDIO_CLK的下降沿产生SDIO_CK
    • clock_bypass:旁路边时钟使能
      • SDIO_CLOCKBYPASS_ENABLE:使能旁路时钟
      • SDIO_CLOCKBYPASS_DISABLE:失能旁路时钟
    • clock_powersave:SDIO_CLK时钟动态开启/关闭以节省功耗
      • SDIO_CLOCKPWR_SAVE_ENABLE:SDIO_CLK时钟在总线空闲时关闭
      • SDIO_CLOCKPWR_SAVE_DISABLE:SDIO_CLK时钟总是开启
    • clock_division:时钟分频,小于512
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* configure the SDIO clock */
    sdio_clock_config(SDIO_SDIOCLKEDGE_RISING, SDIO_CLOCKBYPASS_DISABLE, SDIO_CLOCKPWR_SAVE_DISABLE, SD_CLK_DIV_TRANS);

3. 函数 sdio_hardware_clock_enable

  • 函数名称sdio_hardware_clock_enable
  • 函数原型void sdio_hardware_clock_enable(void);
  • 功能描述:使能硬件时钟控制。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:无
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* enable hardware clock control */
    sdio_hardware_clock_enable();

4. 函数 sdio_hardware_clock_disable

  • 函数名称sdio_hardware_clock_disable
  • 函数原型void sdio_hardware_clock_disable(void);
  • 功能描述:禁能硬件时钟控制。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:无
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* disable hardware clock control */
    sdio_hardware_clock_disable();

5. 函数 sdio_bus_mode_set

  • 函数名称sdio_bus_mode_set
  • 函数原型void sdio_bus_mode_set(uint32_t bus_mode);
  • 功能描述:设置SDIO总线模式。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:
    • bus_mode:SDIO总线模式
      • SDIO_BUSMODE_1BIT:1位SDIO总线模式
      • SDIO_BUSMODE_4BIT:4位SDIO总线模式
      • SDIO_BUSMODE_8BIT:8位SDIO总线模式
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* set SDIO bus mode */
    sdio_bus_mode_set(SDIO_BUSMODE_1BIT);

6. 函数 sdio_power_state_set

  • 函数名称sdio_power_state_set
  • 函数原型void sdio_power_state_set(uint32_t power_state);
  • 功能描述:设置SDIO电源状态。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:
    • power_state:SDIO电源状态
      • SDIO_POWER_ON:SDIO上电
      • SDIO_POWER_OFF:SDIO下电
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* set SDIO power state */
    sdio_power_state_set(SDIO_POWER_ON);

7. 函数 sdio_power_state_get

  • 函数名称sdio_power_state_get
  • 函数原型uint32_t sdio_power_state_get(void);
  • 功能描述:获取SDIO电源状态。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:无
  • **输出参数(out)**:无
  • 返回值
    • SDIO_POWER_ON / SDIO_POWER_OFF
  • 示例
    1
    2
    /* get the SDIO power state */
    uint32_t power_value = sdio_power_state_get();

8. 函数 sdio_clock_enable

  • 函数名称sdio_clock_enable
  • 函数原型void sdio_clock_enable(void);
  • 功能描述:使能SDIO_CLK时钟。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:无
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* enable SDIO_CLK clock output */
    sdio_clock_enable();

9. 函数 sdio_clock_disable

  • 函数名称sdio_clock_disable
  • 函数原型void sdio_clock_disable(void);
  • 功能描述:禁能SDIO_CLK时钟。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:无
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* disable SDIO_CLK clock output */
    sdio_clock_disable();

10. 函数 sdio_command_response_config

  • 函数名称sdio_command_response_config
  • 函数原型void sdio_command_response_config(uint32_t cmd_index, uint32_t cmd_argument, uint32_t response_type);
  • 功能描述:配置命令和响应。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:
    • cmd_index:命令索引
    • cmd_argument:命令参数
    • response_type:响应类型
      • SDIO_RESPONSE_NO:无响应
      • SDIO_RESPONSE_SHORT:短响应
      • SDIO_RESPONSE_LONG:长响应
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    sdio_command_response_config(CMD_ALL_SEND_CID, (uint32_t)0x00, SDIO_RESPONSE_LONG);

11. 函数 sdio_wait_type_set

  • 函数名称sdio_wait_type_set
  • 函数原型void sdio_wait_type_set(uint32_t wait_type);
  • 功能描述:设置等待类型。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:
    • wait_type:等待类型
      • SDIO_WAITTYPE_NO:不等待中断
      • SDIO_WAITTYPE_INTERRUPT:等待中断
      • SDIO_WAITTYPE_TRANSFER:等待数据传输结束
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* set the command wait type */
    sdio_wait_type_set(SDIO_WAITTYPE_NO);

12. 函数 sdio_csm_enable

  • 函数名称sdio_csm_enable
  • 函数原型void sdio_csm_enable(void);
  • 功能描述:使能命令状态机。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:无
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* enable the CSM (command state machine) */
    sdio_csm_enable();

13. 函数 sdio_csm_disable

  • 函数名称sdio_csm_disable
  • 函数原型void sdio_csm_disable(void);
  • 功能描述:禁能命令状态机。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:无
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* disable the CSM (command state machine) */
    sdio_csm_disable();

14. 函数 sdio_command_index_get

  • 函数名称sdio_command_index_get
  • 函数原型uint8_t sdio_command_index_get(void);
  • 功能描述:获取命令索引。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:无
  • **输出参数(out)**:无
  • 返回值:命令索引
  • 示例
    1
    uint8_t cmd_index = sdio_command_index_get();

15. 函数 sdio_suspend_disable

  • 函数名称sdio_suspend_disable
  • 函数原型void sdio_suspend_disable(void);
  • 功能描述:禁能SD I/O休眠模式(仅限SD I/O模式)。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:无
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* disable the SD I/O suspend operation(SD I/O only) */
    sdio_suspend_disable();

16. 函数 sdio_ceata_command_enable

  • 函数名称sdio_ceata_command_enable
  • 函数原型void sdio_ceata_command_enable(void);
  • 功能描述:使能CE-ATA命令(仅限CE-ATA模式)。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:无
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* enable the CE-ATA command(CE-ATA only) */
    sdio_ceata_command_enable();

17. 函数 sdio_ceata_command_disable

  • 函数名称sdio_ceata_command_disable
  • 函数原型void sdio_ceata_command_disable(void);
  • 功能描述:禁能CE-ATA命令(仅限CE-ATA模式)。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:无
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* disable the CE-ATA command(CE-ATA only) */
    sdio_ceata_command_disable();

18. 函数 sdio_ceata_interrupt_enable

  • 函数名称sdio_ceata_interrupt_enable
  • 函数原型void sdio_ceata_interrupt_enable(void);
  • 功能描述:使能CE-ATA中断(仅限CE-ATA模式)。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:无
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* enable the CE-ATA interrupt(CE-ATA only) */
    sdio_ceata_interrupt_enable();

19. 函数 sdio_ceata_interrupt_disable

  • 函数名称sdio_ceata_interrupt_disable
  • 函数原型void sdio_ceata_interrupt_disable(void);
  • 功能描述:禁能CE-ATA中断(仅限CE-ATA模式)。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:无
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* disable the CE-ATA interrupt(CE-ATA only) */
    sdio_ceata_interrupt_disable();

20. 函数 sdio_ceata_command_completion_enable

  • 函数名称sdio_ceata_command_completion_enable
  • 函数原型void sdio_ceata_command_completion_enable(void);
  • 功能描述:使能CE-ATA命令完成信号(仅限CE-ATA模式)。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:无
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* enable the CE-ATA command completion signal(CE-ATA only) */
    sdio_ceata_command_completion_enable();

21. 函数 sdio_ceata_command_completion_disable

  • 函数名称sdio_ceata_command_completion_disable
  • 函数原型void sdio_ceata_command_completion_disable(void);
  • 功能描述:禁能CE-ATA命令完成信号(仅限CE-ATA模式)。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:无
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* disable the CE-ATA command completion signal(CE-ATA only) */
    sdio_ceata_command_completion_disable();

22. 函数 sdio_interrupt_enable

  • 函数名称sdio_interrupt_enable
  • 函数原型void sdio_interrupt_enable(uint32_t int_flag);
  • 功能描述:使能SDIO中断。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:
    • int_flag:SDIO中断标志位状态,可组合使用:
      • SDIO_INT_CCRCERR:命令响应CRC错误中断
      • SDIO_INT_DCRCERR:数据CRC错误中断
      • SDIO_INT_CMDTIMEOUT:命令响应超时中断
      • SDIO_INT_DTTMO:数据超时中断
      • SDIO_INT_TXFIFOERR:发送FIFO下溢错误中断
      • SDIO_INT_RXFIFOERR:接收FIFO上溢错误中断
      • SDIO_INT_CMDRECV:命令响应已接收中断
      • SDIO_INT_CMDSEND:命令已发送中断
      • SDIO_INT_DTEND:数据结束中断
      • SDIO_INT_STBITE:起始位错误中断
      • SDIO_INT_DTBLKE:数据块已发送/已接收中断
      • SDIO_INT_CMDRUN:正在传输命令中断
      • SDIO_INT_TXRUN:正在传输数据中断
      • SDIO_INT_RXRUN:正在接收数据中断
      • SDIO_INT_TFHF:发送FIFO半满中断
      • SDIO_INT_RFHF:接收FIFO半满中断
      • SDIO_INT_TFNE:发送FIFO空中断
      • SDIO_INT_RFNE:接收FIFO空中断
      • SDIO_INT_TXDAVL:发送FIFO中的数据有效中断
      • SDIO_INT_RXDAVL:接收FIFO中的数据有效中断
      • SDIO_INT_SDIOIN:SD I/O中断已接收中断
      • SDIO_INT_ATAEN:CE-ATA命令完成信号已接收中断
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* enable the SDIO corresponding interrupts */
    sdio_interrupt_enable(SDIO_INT_DTEND | SDIO_INT_STBITE | SDIO_INT_TFHF | SDIO_INT_TXFIFOERR | SDIO_INT_DCRCERR);

23. 函数 sdio_interrupt_disable

  • 函数名称sdio_interrupt_disable
  • 函数原型void sdio_interrupt_disable(uint32_t int_flag);
  • 功能描述:禁能SDIO中断。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:
    • int_flag:SDIO中断标志位状态,可组合使用(同sdio_interrupt_enable
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* disable the SDIO interrupt */
    sdio_interrupt_disable(SDIO_INT_DCRCERR);

24. 函数 sdio_interrupt_flag_get

  • 函数名称sdio_interrupt_flag_get
  • 函数原型FlagStatus sdio_interrupt_flag_get(uint32_t int_flag);
  • 功能描述:获取SDIO的中断标志位状态。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:
    • int_flag:SDIO中断标志位状态(同sdio_interrupt_enable
  • **输出参数(out)**:无
  • 返回值SETRESET
  • 示例
    1
    2
    /* get the interrupt flag state of SDIO */
    FlagStatus flag_status = sdio_interrupt_flag_get(SDIO_INT_DTEND);

25. 函数 sdio_interrupt_flag_clear

  • 函数名称sdio_interrupt_flag_clear
  • 函数原型void sdio_interrupt_flag_clear(uint32_t int_flag);
  • 功能描述:清除SDIO的中断标志位状态。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:
    • int_flag:SDIO中断标志位状态(同sdio_interrupt_enable
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* clear the interrupt flag state of SDIO */
    sdio_interrupt_flag_clear(SDIO_INT_DTEND);

26. 函数 sdio_read_wait_enable

  • 函数名称sdio_read_wait_enable
  • 函数原型void sdio_read_wait_enable(void);
  • 功能描述:使能读等待模式(仅限SD I/O模式)。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:无
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* enable read wait mode (SD I/O only) */
    sdio_read_wait_enable();

27. 函数 sdio_read_wait_disable

  • 函数名称sdio_read_wait_disable
  • 函数原型void sdio_read_wait_disable(void);
  • 功能描述:禁能读等待模式(仅限SD I/O模式)。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:无
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* disable read wait mode (SD I/O only) */
    sdio_read_wait_disable();

28. 函数 sdio_stop_read_wait

  • 函数名称sdio_stop_read_wait
  • 函数原型void sdio_stop_read_wait(void);
  • 功能描述:禁止停止读等待的功能(仅限SD I/O模式)。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:无
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* enable the function to halt the read wait process (SD I/O only) */
    sdio_stop_read_wait();

29. 函数 sdio_read_wait_type_set

  • 函数名称sdio_read_wait_type_set
  • 函数原型void sdio_read_wait_type_set(uint32_t read_wait_type);
  • 功能描述:设置读等待类型。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:
    • read_wait_type:读等待类型
      • SDIO_READWAITTYPE_FULL:通过FIFO满中断等待
      • SDIO_READWAITTYPE_EMPTY:通过FIFO空中断等待
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* set the read wait type */
    sdio_read_wait_type_set(SDIO_READWAITTYPE_FULL);

30. 函数 sdio_response_get

  • 函数名称sdio_response_get
  • 函数原型uint32_t sdio_response_get(uint32_t resp_sex);
  • 功能描述:获取上一次响应的接收命令。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:
    • resp_sex:SDIO响应
      • SDIO_RESPONSE0:卡响应[31:0]
      • SDIO_RESPONSE1:卡响应[63:32]
      • SDIO_RESPONSE2:卡响应[95:64]
      • SDIO_RESPONSE3:卡响应[127:96]
  • **输出参数(out)**:无
  • 返回值:上一次响应的接收命令
  • 示例
    1
    2
    3
    4
    5
    /* get the SDIO response numbers */
    uint32_t resp0 = sdio_response_get(SDIO_RESPONSE0);
    uint32_t resp1 = sdio_response_get(SDIO_RESPONSE1);
    uint32_t resp2 = sdio_response_get(SDIO_RESPONSE2);
    uint32_t resp3 = sdio_response_get(SDIO_RESPONSE3);

31. 函数 sdio_data_config

  • 函数名称sdio_data_config
  • 函数原型void sdio_data_config(uint32_t data_timeout, uint32_t data_length, uint32_t data_blocksize);
  • 功能描述:配置数据超时、数据长度和数据块大小。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:
    • data_timeout:超时周期(数据超时周期)
    • data_length:要传输的数据字节数
    • data_blocksize:传输中数据块的大小
      • SDIO_DATABLOCKSIZE_1BYTE:块大小 = 1字节
      • SDIO_DATABLOCKSIZE_2BYTES:块大小 = 2字节
      • SDIO_DATABLOCKSIZE_4BYTES:块大小 = 4字节
      • SDIO_DATABLOCKSIZE_8BYTES:块大小 = 8字节
      • SDIO_DATABLOCKSIZE_16BYTES:块大小 = 16字节
      • SDIO_DATABLOCKSIZE_32BYTES:块大小 = 32字节
      • SDIO_DATABLOCKSIZE_64BYTES:块大小 = 64字节
      • SDIO_DATABLOCKSIZE_128BYTES:块大小 = 128字节
      • SDIO_DATABLOCKSIZE_256BYTES:块大小 = 256字节
      • SDIO_DATABLOCKSIZE_512BYTES:块大小 = 512字节
      • SDIO_DATABLOCKSIZE_1024BYTES:块大小 = 1024字节
      • SDIO_DATABLOCKSIZE_2048BYTES:块大小 = 2048字节
      • SDIO_DATABLOCKSIZE_4096BYTES:块大小 = 4096字节
      • SDIO_DATABLOCKSIZE_8192BYTES:块大小 = 8192字节
      • SDIO_DATABLOCKSIZE_16384BYTES:块大小 = 16384字节
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* configure the SDIO data */
    sdio_data_config(0, SDIO_DATABLOCKSIZE_1BYTE);

32. 函数 sdio_data_transfer_config

  • 函数名称sdio_data_transfer_config
  • 函数原型void sdio_data_transfer_config(uint32_t transfer_mode, uint32_t transfer_direction);
  • 功能描述:配置数据传输模式和方向。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:
    • transfer_mode:数据传输模式
      • SDIO_BLOCKSMOD:块传输模式
      • SDIO_STREAMMOD:流传输(SD I/O多字节传输模式)
    • transfer_direction:数据传输方向
      • SDIO_TRANSDIRE_CARDTOIO:写数据到卡上(从卡中读取数据)
      • SDIO_TRANSDIRE_IOTOCARD:从卡中读取数据(向卡发送数据)
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* configure the SDIO data transfer mode and direction */
    sdio_data_transfer_config(SDIO_BLOCKSMOD, SDIO_TRANSDIRE_CARDTOIO);

33. 函数 sdio_dsm_enable

  • 函数名称sdio_dsm_enable
  • 函数原型void sdio_dsm_enable(void);
  • 功能描述:使能数据传输的状态机。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:无
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* enable the DSM(data state machine) */
    sdio_dsm_enable();

34. 函数 sdio_dsm_disable

  • 函数名称sdio_dsm_disable
  • 函数原型void sdio_dsm_disable(void);
  • 功能描述:禁能数据传输的状态机。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:无
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* disable the DSM(data state machine) */
    sdio_dsm_disable();

35. 函数 sdio_data_write

  • 函数名称sdio_data_write
  • 函数原型void sdio_data_write(uint32_t data);
  • 功能描述:在发送FIFO里写入数据(一个字)。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:
    • data:往下里写入32位数据
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* write data(one word) to the transmit FIFO */
    sdio_data_write(0x00000001);

36. 函数 sdio_data_read

  • 函数名称sdio_data_read
  • 函数原型uint32_t sdio_data_read(void);
  • 功能描述:在接收FIFO里提取数据(一个字)。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:无
  • **输出参数(out)**:无
  • 返回值:接收的数据
  • 示例
    1
    2
    /* read data(one word) from the receive FIFO */
    uint32_t data = sdio_data_read();

37. 函数 sdio_data_counter_get

  • 函数名称sdio_data_counter_get
  • 函数原型uint32_t sdio_data_counter_get(void);
  • 功能描述:获取要传输到卡/从卡剩余数据字节的数目。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:无
  • **输出参数(out)**:无
  • 返回值:要传输的剩余数据字节数
  • 示例
    1
    2
    /* get the number of remaining data bytes to be transferred to card */
    uint32_t data_value = sdio_data_counter_get();

38. 函数 sdio_fifo_counter_get

  • 函数名称sdio_fifo_counter_get
  • 函数原型uint32_t sdio_fifo_counter_get(void);
  • 功能描述:从FIFO中获取写入或读取的空字数。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:无
  • **输出参数(out)**:无
  • 返回值:剩余字数
  • 示例
    1
    2
    /* get the number of words remaining to be written or read from FIFO */
    uint32_t fifo_value = sdio_fifo_counter_get();

39. 函数 sdio_dma_enable

  • 函数名称sdio_dma_enable
  • 函数原型void sdio_dma_enable(void);
  • 功能描述:使能SDIO的DMA请求。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:无
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* enable the SDIO DMA */
    sdio_dma_enable();

40. 函数 sdio_dma_disable

  • 函数名称sdio_dma_disable
  • 函数原型void sdio_dma_disable(void);
  • 功能描述:禁能SDIO的DMA请求。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:无
  • **输出参数(out)**:无
  • 返回值:无
  • 示例
    1
    2
    /* disable the SDIO DMA */
    sdio_dma_disable();

41. 函数 sdio_flag_get

  • 函数名称sdio_flag_get
  • 函数原型FlagStatus sdio_flag_get(uint32_t flag);
  • 功能描述:获取SDIO的标志位状态。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数(in)**:
    • flag:SDIO标志位状态
      • SDIO_FLAG_CCRCERR:命令响应(CRC检测)
      • SDIO_FLAG_DCRCERR:数据已发送/接收(CRC检测)
      • SDIO_FLAG_CMDTMO:命令超时(CRC检测)
      • SDIO_FLAG_DTTMO:数据超时(CRC检测)
      • SDIO_FLAG_TXFIFOERR:发送FIFO下溢错误发生
      • SDIO_FLAG_RXFIFOERR:接收FIFO上溢错误发生
      • SDIO_FLAG_CMDRECV:命令响应(CRC检测)
      • SDIO_FLAG_CMDSEND:命令已发送(CRC检测)
      • SDIO_FLAG_DTEND:数据结束(CRC检测)
      • SDIO_FLAG_STBITE:起始位错误(CRC检测)
      • SDIO_FLAG_DTBLKE:数据块已发送/接收(CRC检测)
      • SDIO_FLAG_CMDRUN:正在传输命令(CRC检测)
      • SDIO_FLAG_TXRUN:正在传输数据(CRC检测)
      • SDIO_FLAG_RXRUN:正在接收数据(CRC检测)
      • SDIO_FLAG_TFHF:发送FIFO半满(CRC检测)
      • SDIO_FLAG_RFHF:接收FIFO半满(CRC检测)
      • SDIO_FLAG_TFNE:发送FIFO空(CRC检测)
      • SDIO_FLAG_RFNE:接收FIFO空(CRC检测)
      • SDIO_FLAG_TXDAVL:发送FIFO中的数据有效(CRC检测)
      • SDIO_FLAG_RXDAVL:接收FIFO中的数据有效(CRC检测)
      • SDIO_FLAG_SDIOIN:SD I/O中断已接收(CRC检测)
      • SDIO_FLAG_ATAEN:CE-ATA命令完成信号已接收(CRC检测)
  • **输出参数(out)**:无
  • 返回值SETRESET
  • 示例
    1
    2
    /* get the flags of SDIO */
    FlagStatus flag_status = sdio_flag_get(SDIO_FLAG_DTEND);
留言