SDIO
简介
SDIO协议是在SD卡协议基础上发展和升级而来的。在许多地方,SD卡读写协议得以保留。与此同时,SDIO协议在SD卡协议的基础上新增了cmd52和cmd53命令。正因如此,SDIO与SD卡规范之间的一个重要区别在于增加了低速标准。低速卡的目标应用是:以最少的硬件开销支持低速I/O功能。
MMC是多媒体卡(multimedia card)的缩写。本质上,它是一种用于固态非易失性存储的存储卡规范,定义了诸如卡片形状、尺寸、容量、电信号以及主机间通信协议等方面的内容。
自1997年MMC规范发布以来,根据不同考量(物理尺寸、电压范围、引脚数量、最大容量、数据位宽、时钟频率、安全特性、是否支持SPI模式、是否支持DDR模式等),相继衍生出了MMC、SD、microSD、SDIO和EMMC等多种不同规格。尽管这些规格花样繁多,但其本质始终如一,这也是为什么Linux内核将它们统称为MMC的原因。
主要功能
SD/SDIO、嵌入式多媒体卡(eMMC)主机接口(SDMMC)在内部总线与SD存储卡、SDIO卡和eMMC设备之间提供接口。多媒体卡系统规范可通过多媒体卡协会网站www.jedec.org获取,该规范由MMCA技术委员会发布。SD存储卡和SD I/O卡系统规范可通过SD卡协会网站www.sdcard.org获取。SDMMC的功能包括以下几点:
符合嵌入式多媒体卡系统规范5.1版。该卡支持三种不同的数据总线模式:1位(默认)、4位和8位(不支持HS400)。
与先前版本的多媒体卡完全兼容(向后兼容)。
完全符合SD存储卡规范4.2版(不支持SPI模式和UHS-II模式)。
完全符合SDIO卡规范4.0版本。该卡支持两种不同的数据总线模式:1位(默认)和4位(不支持SPI模式和UHS-II模式)。
支持SDIO从机模式(仅IO模式)
功能描述
SDIO硬件架构
SDIO硬件架构
SDIO适配层描述
SDMMC适配器是一种多媒体/安全数字存储卡总线主控器,可为MultiMedi-aCard堆栈或安全数字存储卡提供接口。它由以下子单元组成:
时钟控制单元
适配器寄存器块
命令/响应路径
数据发送/接收路径
数据先进先出队列
私有DMA控制器
时钟控制单元
时钟控制单元通过配置分频系数对屏幕进行分频,从而输出系统时钟。输入时钟与SDCLK之间的关系由以下公式给出:
Freq_SDCLK = Freq_SDIO / (2*(div + 1))
其中,div是通过寄存器配置的频率分频系数
适配器寄存器
适配器寄存器块包含所有系统控制寄存器、SDIO命令与响应寄存器以及数据FIFO。该块还生成来自SDIO清除寄存器相应位的信号,用于清除SDIO适配器中的静态标志位。
命令/响应通路
命令/响应路径子单元在SDIO_CMD线上传输命令和响应。命令路径由SDIO_CLK时钟驱动,向卡发送命令。响应路径由SDIO_CLK时钟驱动,从卡接收响应。
以下 SDIO 命令格式表是sdio命令格式表
Field |
Start Bit |
Transmission Bit |
Command Index |
Argument |
CRC7 |
End Bit |
|---|---|---|---|---|---|---|
Bit position |
47 |
46 |
[45:40] |
[39:8] |
[7:1] |
0 |
Width (bits) |
1 |
1 |
6 |
32 |
7 |
1 |
Value |
“0” |
“1” |
x |
x |
x |
“1” |
以下 SDIO响应格式表是sdio响应格式表
Field |
Start Bit |
Transmission Bit |
Command Index |
Argument |
CRC7 |
End Bit |
|---|---|---|---|---|---|---|
Bit position |
47 |
46 |
[45:40] |
[39:8] |
[7:1] |
0 |
Width (bits) |
1 |
1 |
6 |
32 |
7 |
1 |
Value |
“0” |
“0” |
x |
x |
CRC7 |
“1” |
下图是一个经典的命令序列。以下将详细说明每个序列阶段的功能。
上电阶段:我们可以在发送命令时选择是否经过上电阶段。如果启用此阶段,我们在发送命令时将启动一个时钟空闲状态。该状态将启动sdclk,此时钟的启动时间将由power_up_cnt寄存器进行配置。
主机命令阶段:此阶段为CMD数据发送阶段,包括起始位、传输位、内容、CRC校验和结束位。主机将根据时序协议发送命令内容。
等待响应时间阶段:此阶段是等待设备返回响应所需的时间。此时间可由wait_rsp_cnt寄存器进行配置。
响应阶段:此阶段是设备返回响应的阶段。响应包括起始位、传输位、内容、CRC 和结束位。不过,某些特殊 CMD 类型并非如此定时。我们可以通过调整 rsp_type 寄存器来调整定时。
等待EOT阶段:在响应序列结束时,我们可以通过调整wait_eot_cnt来延长时钟结束时间。在此期间,我们还可以检查设备的忙碌状态。某些命令在结束之后会将数据线Data0拉低,表示设备处于忙碌状态。我们可以在wait_eot_cnt寄存器配置的时间间隔内检测这一忙碌状态。如果超过此时间范围,我们将报告错误。
SDIO命令通道时序
数据通路
SDIO 1线SDR模式数据通道时序
SDIO 4线SDR模式数据通道时序
SDIO 8线SDR模式数据通道时序
在DDR模式下,数据在SDIO的两个沿上进行采样,具体如下:
在时钟的上升沿,会采样奇数字节。
在时钟的下降沿,偶数字节被采样。
数据有效载荷大小始终是2字节的倍数。
每条数据线计算两个CRC16。奇数位的CRC16在时钟的下降沿进行采样,偶数位的CRC16在时钟的上升沿进行采样。
起始位、结束位和空闲条件均为全周期。
CRC状态/启动确认和忙信号均为完整周期,且仅在时钟的上升沿采样。
SDIO 4线DDR模式数据通道时序
SDIO 8线DDR模式数据通道时序
如下图所示,这是一个数据读取序列图:发送读取命令后,我们即可开始读取数据线。我们有一段特定的时间来检测读取数据的起始位。这段时间可通过data_timeout_cnt寄存器配置确定。如果超过此时间仍未检测到读取数据的起始位,我们将报告错误。
SDIO 读数据时序
如下图所示为写数据序列图。当命令响应结束时,我们开始发送写数据序列,包括起始位、内容和结束位。写数据序列发送完成后,我们需要等待设备返回CRC状态。在图中,这一阶段显示为等待CRC令牌阶段。在此阶段,我们可通过配置crc_token_cnt寄存器来调整接收CRC状态的时间。如果超过此时间仍未检测到CRC状态,我们将报告相应的错误。在接受到CRC状态后,设备会拉低Data0,表示其处于忙碌状态。我们将在此期间检测忙碌状态,而我们的检测时间同样由data_timeout_cnt寄存器决定。
SDIO 写数据时序
SDIO专用DMA控制器
SDIO控制器在以传输或接收模式工作时,可借助专用DMA控制器访问内存。也就是说,CPU或SoC上的任何其他主设备会在适当的内存位置准备好所需的数据(或在接收数据场景中准备足够的内存空间)。通过正确配置包括基地址、传输大小等在内的所有其他配置寄存器,再对相应的SDIO控制器的DATA_TX/DATA_RX使能位进行编程,即可启用DMA传输。
总共支持两个通道传输(DATA_TX/DATA_RX),可通过编程SDIO控制器内的相应配置和控制位来实现。为避免单个通道的数据传输持续占用物理总线,这两个通道采用轮询仲裁方案。
SDIO 从机模式说明
以下是SDIO从机模式的主要特点:
符合SD物理规范3.00版和SDIO规范4.00版。
支持1位和4位SD模式
支持SDIO中断功能
支持SD模式的所有强制性SDIO命令/响应类型(CMD3、CMD5、CMD7、CMD52、CMD53、CMD11、CMD19)
命令/响应的CRC7校验/生成
用于数据传输的CRC16校验/生成。
支持SDR12、SDR25、SDR50和SDR104工作模式
使用CMD53以多字节和多块模式进行数据传输
支持函数0和函数1
仅支持SDIO实现,不支持组合卡功能
不支持可选代码存储区(CSA)
不支持暂停/恢复功能
不支持DDR50模式
SDIO 从机模式寄存器描述
以下是SDIO从机模式所支持的寄存器说明。我们遵循SDIO 3.0协议规范,根据该协议规范,功能0 I/O寄存器被划分为三个区域:CCCR、FBR和CIS。实际上,部分区域并未得到我们的支持。以下将对这些寄存器进行说明。
SDIO Slave模式寄存器映射关系
CCCR、FBR 和 CIS 是 SDIO 协议中规定的通用控制寄存器,用于各功能的控制配置寄存器,以及与卡信息相关的状态寄存器,例如功耗和制造商信息。这些控制或配置寄存器所对应的功能是可选的,其具体含义详见 SDIO 规范。除自定义寄存器外,所有其他寄存器均属于 SDIO 4.0 协议规范定义,其中“/”未实现或未定义。
Address |
Register Name |
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
|---|---|---|---|---|---|---|---|---|---|
0x00 |
CCCR/SDIO Revision |
SDIO |
SDIO |
SDIO |
SDIO |
CCCR |
CCCR |
CCCR |
CCCR |
0x01 |
SD Specification Rev |
/ |
/ |
/ |
/ |
SD |
SD |
SD |
SD |
0x02 |
I/O Enable |
IOE7 |
IOE6 |
IOE5 |
IOE4 |
IOE3 |
IOE2 |
IOE1 |
/ |
0x03 |
I/O Ready |
IOR7 |
IOR6 |
IOR5 |
IOR4 |
IOR3 |
IOR2 |
IOR1 |
IOR0 |
0x04 |
Int Enable |
IEN7 |
IEN6 |
IEN5 |
IEN4 |
IEN3 |
IEN2 |
IEN1 |
IENM |
0x05 |
Int Pending |
/ |
/ |
/ |
/ |
/ |
/ |
/ |
/ |
0x06 |
I/O Abort |
/ |
/ |
/ |
/ |
RES |
AS2 |
AS1 |
AS0 |
0x07 |
Bus Interface Control |
/ |
/ |
/ |
/ |
/ |
/ |
Bus Width 1 |
Bus Width 0 |
0x08 |
Card Capability |
4BLS |
LSC |
E4MI |
S4MI |
SBS |
SRW |
SMB |
SDC |
0x09-0x0b |
Common CIS Pointer |
/ |
/ |
/ |
/ |
/ |
/ |
/ |
/ |
0x0c |
Bus Suspend |
/ |
/ |
/ |
/ |
/ |
/ |
/ |
/ |
0x0d |
Function Select |
/ |
/ |
/ |
/ |
FS3 |
FS2 |
FS1 |
FS0 |
0x0e |
Exec Flags |
/ |
/ |
/ |
/ |
/ |
/ |
/ |
/ |
0x0f |
Ready Flags |
RF7 |
RF6 |
RF5 |
RF4 |
RF3 |
RF2 |
RF1 |
RF0 |
0x10-0x11 |
FN0 Block Size |
/ |
/ |
/ |
/ |
/ |
/ |
/ |
/ |
0x12 |
Power Control |
/ |
/ |
/ |
/ |
/ |
/ |
/ |
/ |
0x13 |
Bus Speed Select |
/ |
/ |
/ |
/ |
BSS2 |
BSS1 |
BSS0/EH |
SSHS |
0x14 |
UHS-I Support |
/ |
/ |
/ |
/ |
/ |
/ |
/ |
/ |
0x15 |
Driver Strength |
/ |
/ |
/ |
/ |
/ |
/ |
/ |
/ |
0x16 |
Interrupt Extension |
/ |
/ |
/ |
/ |
/ |
/ |
/ |
/ |
0x17-0xef |
RFU |
/ |
/ |
/ |
/ |
/ |
/ |
/ |
/ |
0xf0 |
Status Register |
/ |
/ |
CFS |
CCE |
CIE |
GRE |
RXR |
RXV |
0xf1-0xff |
Reserved for Vendors |
/ |
/ |
/ |
/ |
/ |
/ |
/ |
/ |
需要单独说明。我们为从控制器定制了一个状态寄存器,该寄存器位于CCCR的0xf0地址。下面,我们将分别说明该寄存器的各位字段。
Register Name |
Field |
Type |
Description |
|---|---|---|---|
Status Register |
[7:6] |
/ |
保留字段(Reserved),未定义用途 |
Status Register |
5 |
RW |
FIFO 清除控制位:写 1 可清除从控制器的缓存缓冲区;写 0 无作用 |
Status Register |
4 |
RO |
CRC 校验错误标志:’0’ = 无错误,’1’ = 上一条命令 CRC 校验失败 |
Status Register |
3 |
RO |
非法命令错误标志:’0’ = 无错误,’1’ = 当前卡状态下命令非法 |
Status Register |
2 |
RO |
通用或未知错误标志:’0’ = 无错误,’1’ = 操作过程中发生未知错误 |
Status Register |
1 |
RO |
RX FIFO 就绪状态位:’1’ = FIFO 中有数据可读 |
Status Register |
0 |
RO |
RX FIFO 有效状态位:’1’ = FIFO 数据有效 |
数据包的收发过程
从从机向主机发送数据包
数据包的发送由从机发起,并通过中断通知主机(有关中断实现,请参阅SDIO协议)。主机从从机读取相关信息,并启动SDIO总线传输。整个过程如下所示。我们可以通过两种方式填充数据:一种是通过主机发送命令,远程访问从机内部的DMA配置寄存器,并激活从机端的DMA以填充数据;另一种方式是在从机端通过CPU配置DMA,然后通过DMA填充数据。
首先,我们来介绍通过主机进行远程访问以处理数据的第1种方法。
1 主机初始化卡片。(参见SDIO 4.0协议)
2 主机通过发送CMD52,将CMD52功能号字段配置为功能1。我们在功能1区域定义了一个空间,该空间可映射从机侧的DMA配置寄存器。通过此空间,我们可以访问用于启动从机侧DMA的相关寄存器。该寄存器空间的映射关系如下图所示。
SDIO Slave模式DMA寄存器映射关系
3 通过步骤2中的操作将数据移至从机端的缓冲区。当缓冲区中有数据时,从机会向主机发起中断通知,并发出读取命令以执行读取操作。
4 主机接收到从机产生的中断,通过查询开关状态,可以确定是继续进行两者操作还是仅执行写操作。
5 主机配置读取数据相关信息。
6 主机发送读取命令CMD53,等待读取结束标志。
接下来,我们将介绍通过从机端的CPU配置DMA的第二种方法。与第一种方法不同,这种准备过程由从机发起,因此需要确保系统层具备相应的机制,以保证主机能够协同工作。
1 在从机端配置带DMA的CPU,并用它将主机所需的数据移动到数据缓冲区。
2 主机初始化卡片。(参见SDIO 4.0协议)。
3 通过步骤1中的操作将数据移至从端的缓冲区。当缓冲区有数据时,从端将向主机发起中断通知,并发出读取命令以执行读取操作。
4 主机接收到从机产生的中断,通过查询开关状态,可以确定是继续进行两者操作还是仅执行写操作。
5 主机配置读取数据相关信息。
6 主机发送读取命令CMD53,等待读取结束标志。
从主机向从机发送数据包
数据包的发送由从机发起,并通过中断通知主机(有关中断实现,请参阅SDIO协议)。主机从从机读取相关信息,并启动SDIO总线传输。整个过程如下所示。我们可以通过两种方式填充数据:一种是通过主机发送命令,远程访问从机内部的DMA配置寄存器,并激活从机端的DMA进行数据填充;另一种方式是在从机端通过CPU配置DMA,然后通过DMA完成数据填充。
首先,让我们来介绍通过主机进行远程访问以处理数据的第一种方法处理
1 主机初始化卡片。(参见SDIO 4.0协议)
2 主机通过发送CMD52,将CMD52功能号字段配置为功能1。我们在功能1区域定义了一个空间,该空间可映射从机侧的DMA配置寄存器。通过此空间,我们可以访问用于启动从机侧DMA的相关寄存器。该寄存器空间的映射关系与读操作相同。
3 通过步骤2中的配置,从设备现在有了接收数据的空间,并且从设备将为写操作向主机发起中断通知。
4 主机接收到从机产生的中断,通过查询开关状态,可以确定是继续进行两者操作还是仅执行写操作。
5 主机配置写入数据相关信息。
6 主机发送写入命令CMD53,等待写入结束标志。
接下来,我们将介绍通过从机端的CPU配置DMA的第二种方法。与第一种方法不同,这种准备过程由从机发起,因此需要确保系统层具备相应的机制,以保证主机能够协同工作。
1 在从机端配置带DMA的CPU,DMA可释放缓冲区空间,从机通过中断请求将数据写入主机。
2 主机初始化卡片。(参见SDIO 4.0协议)。
3 主机接收到从机产生的中断,通过查询开关状态,可以确定是继续进行两者操作还是仅执行写操作。
4 主机配置写入数据相关信息。
5 主机发送写入命令CMD53,等待写入结束标志。
寄存器
寄存器及其对应偏移量
Offset |
Register Name |
Function Description |
|---|---|---|
0x0 |
SDIO_RX_SADDR |
uDMA RX SDIO 缓冲区基地址寄存器:若 DMA 处于链表模式,则首次配置此寄存器;之后 DMA 将从其自身的链表地址读取信息 |
0x4 |
SDIO_RX_SIZE |
uDMA RX SDIO 缓冲区大小配置寄存器:若 DMA 处于链表模式,则首次配置此寄存器;之后 DMA 将从其自身的链表地址读取信息 |
0x8 |
SDIO_RX_CFG |
uDMA RX SDIO 流配置寄存器:若 DMA 处于链表模式,则首次配置此寄存器;之后 DMA 将从其自身的链表地址读取信息。链表模式不支持连续传输 |
0xC |
SDIO_CR |
SDIO 控制寄存器 |
0x10 |
SDIO_TX_SADDR |
uDMA TX SDIO 缓冲区基地址配置寄存器:若 DMA 处于链表模式,则首次配置此寄存器;之后 DMA 将从其自身的链表地址读取信息 |
0x14 |
SDIO_TX_SIZE |
uDMA TX SDIO 缓冲区大小配置寄存器:若 DMA 处于链表模式,则首次配置此寄存器;之后 DMA 将从其自身的链表地址读取信息 |
0x18 |
SDIO_TX_CFG |
uDMA TX SDIO 流配置寄存器:若 DMA 处于链表模式,则首次配置此寄存器;之后 DMA 将从其自身的链表地址读取信息。链表模式不支持连续传输 |
0x1C |
SDIO_VERSION |
SDIO 版本号:1.5.0 |
0x20 |
SDIO_CMD_OP |
SDIO 命令操作寄存器 |
0x24 |
SDIO_CMD_ARG |
SDIO 命令参数寄存器 |
0x28 |
SDIO_DATA_SETUP |
SDIO 数据传输设置寄存器 |
0x2C |
SDIO_START |
SDIO 启动命令寄存器 |
0x30 |
SDIO_RSP0 |
SDIO 响应 0 |
0x34 |
SDIO_RSP1 |
SDIO 响应 1 |
0x38 |
SDIO_RSP2 |
SDIO 响应 2 |
0x3C |
SDIO_RSP3 |
SDIO 响应 3 |
0x40 |
SDIO_CLK_DIV |
SDIO 时钟分频寄存器 |
0x44 |
SDIO_STATUS |
SDIO 状态寄存器 |
0x48 |
SDIO_STOP_CMD_OP |
SDIO STOP 命令操作寄存器 |
0x4C |
SDIO_STOP_CMD_ARG |
SDIO STOP 命令参数寄存器 |
0x50 |
SDIO_DATA_TIMEOUT_CNT |
SDIO 数据超时延迟计数寄存器 |
0x54 |
SDIO_CMD_POWERUP_CNT |
SDIO 命令上电延迟计数寄存器 |
0x58 |
SDIO_CMD_WAIT_RSP_CNT |
SDIO 等待响应计数配置寄存器 |
0x5C |
SDIO_CMD_WAIT_EOT_CNT |
SDIO 等待结束计数配置寄存器 |
0x60 |
SDIO_TX_DATA |
SDIO 发送数据寄存器 |
0x64 |
SDIO_RX_DATA |
SDIO 接收数据寄存器 |
0x68 |
SDIO_TX_MARK |
SDIO 发送 FIFO 水位标记 |
0x6C |
SDIO_RX_MARK |
SDIO 接收 FIFO 水位标记 |
0x70 |
SDIO_IP |
SDIO 中断挂起标志 |
0x74 |
SDIO_IE |
SDIO 中断使能寄存器 |
0x78 |
SDIO_SAMPLE_DDR |
SDIO DDR 采样选择寄存器 |
0x84 |
SDIO_DATA_TX_DELAY_CNT |
SDIO 发送数据延迟计数寄存器 |
0x88 |
SDIO_DATA_CRC_TOKEN_CNT |
SDIO CRC 标记超时延迟计数寄存器 |
0x8C |
SDIO_CRC_VALUE |
SDIO 命令 CRC 值 |
0x90 |
SDIO_STATUS1 |
SDIO 状态 1 寄存器 |
0x94 |
SDIO_STOP |
SDIO 停止命令寄存器 |
0x98 |
SDIO_PAD_CTRL |
SDIO 引脚上拉控制寄存器 |
0xA0 |
SDIO_STOP_RSP0 |
SDIO Stop 响应 0 |
0xA4 |
SDIO_STOP_RSP1 |
SDIO Stop 响应 1 |
0xA8 |
SDIO_STOP_RSP2 |
SDIO Stop 响应 2 |
0xAC |
SDIO_STOP_RSP3 |
SDIO Stop 响应 3 |
0x1000 |
DMA_CFG_PCTRL |
时钟门控寄存器(仅当外设在 RTL 层启用时存在) |
0x1004 |
DMA_CFG_EVENT |
事件 ID 寄存器(仅当外设在 RTL 层支持时存在) |
0xC00 |
DMA_PCH0_IRQ_EN |
P2M Channel0 中断使能寄存器 |
0xC04 |
DMA_PCH0_IRQ_STAT |
P2M Channel0 中断状态标志寄存器 |
0xC08 |
DMA_PCH0_IRQ_CLR |
P2M Channel0 中断清除寄存器 |
0xE00 |
DMA_PCH0_CFG_RX_LLA_REG |
P2M Channel0 RX LLA 配置寄存器 |
0xF00 |
DMA_PCH0_CFG_TX_LLA_REG |
P2M Channel0 TX LLA 配置寄存器 |
SDIO_RX_SADDR
Address offset: 0x0.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
rx_saddr |
31:0 |
RW |
0 |
uDMA RX SDIO 缓冲区基地址 |
SDIO_RX_SIZE
Address offset: 0x4.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
rx_size |
19:0 |
RW |
0 |
uDMA RX SDIO 请求的数据空间大小(单位:字节) |
Reserved |
31:20 |
/ |
0x0 |
保留位 |
SDIO_RX_CFG
Address offset: 0x8.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
rx_continuous |
0 |
RW |
0 |
|
rx_datasize |
2:1 |
RW |
2 |
|
Reserved |
3 |
/ |
0x0 |
保留位 |
rx_en |
4 |
RW |
0 |
|
Reserved |
5 |
/ |
0x0 |
保留位 |
rx_clr |
6 |
W1C |
0 |
注意:清除操作不会立即执行,需等待 TXEN 拉低后才生效 |
Reserved |
4:7 |
/ |
0x0 |
保留位 |
rx_pending |
5 |
RO |
0 |
|
Reserved |
31:6 |
/ |
0x0 |
保留位 |
SDIO_CR
Address offset: 0xC.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
dma_en |
0 |
RW |
0 |
|
ddr_en |
1 |
RW |
0 |
|
auto_cmd12_en |
2 |
RW |
0 |
|
block_en |
3 |
RW |
1 |
|
Reserved |
4 |
/ |
0x0 |
保留位 |
clk_stop |
5 |
RW |
1 |
|
high_width_mode |
6 |
RW |
1 |
|
data_crc_check_en |
7 |
RW |
1 |
|
data_bus_speed |
8 |
RW |
0 |
|
irq_period_check |
9 |
RW |
0 |
|
stream_mode |
10 |
RW |
0 |
|
sleep_mode |
11 |
RW |
0 |
睡眠模式使能 |
Reserved |
17:12 |
/ |
0x0 |
保留位 |
boot_mode |
19:18 |
RW |
0 |
|
voltage_switch_mode |
20 |
RW |
0 |
|
reset_mode |
22:21 |
RW |
0 |
|
voltage_switch_start |
23 |
RW |
0 |
电压切换开始标志 |
boot_ack_req |
24 |
RW |
0 |
引导应答请求 |
read_wait_req |
25 |
RW |
0 |
读等待请求 |
boot_data_req |
26 |
RW |
1 |
引导数据请求 |
Reserved |
27 |
/ |
0x0 |
保留位 |
voltage_sdclk_resume |
31:28 |
RW |
7 |
电压切换后 SDCLK 恢复计数器(用于切换结束) |
SDIO_TX_SADDR
Address offset: 0x10.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
tx_saddr |
31:0 |
RW |
0 |
uDMA TX SDIO 缓冲区基地址 |
SDIO_TX_SIZE
Address offset: 0x14.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
tx_size |
19:0 |
RW |
0 |
uDMA TX SDIO 请求的数据空间大小(单位:字节) |
Reserved |
31:20 |
/ |
0x0 |
保留位 |
SDIO_TX_CFG
Address offset: 0x18.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
tx_continuous |
0 |
RW |
0 |
|
tx_datasize |
2:1 |
RW |
2 |
|
Reserved |
3 |
/ |
0x0 |
保留位 |
tx_en |
4 |
RW |
0 |
|
Reserved |
5 |
/ |
0x0 |
保留位 |
tx_clr |
6 |
W1C |
0 |
|
Reserved |
4:7 |
/ |
0x0 |
保留位 |
tx_pending |
5 |
RO |
0 |
|
Reserved |
31:6 |
/ |
0x0 |
保留位 |
SDIO_VERSION
Address offset: 0x1C.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
sdio_version |
31:0 |
RO |
0x00010500 |
SDIO 版本号 1.5.0 |
SDIO_CMD_OP
Address offset: 0x20.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
type_no_rsp |
0 |
RW |
0 |
|
type_136bit |
1 |
RW |
0 |
|
type_crc |
2 |
RW |
0 |
|
type_busy |
3 |
RW |
0 |
|
type_power_up |
4 |
RW |
0 |
|
type_crc_check_err |
5 |
RW |
0 |
|
type_stop_cmd |
6 |
RW |
0 |
|
type_cmd_enable |
7 |
RW |
1 |
|
cmd_op |
13:8 |
RW |
0 |
命令索引(command index) |
Reserved |
31:14 |
/ |
0x0 |
保留位 |
SDIO_CMD_ARG
Address offset: 0x24.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
cmd_arg |
31:0 |
RW |
0 |
|
SDIO_DATA_SETUP
Address offset: 0x28.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
data_en |
0 |
RW |
0 |
|
data_rwn |
1 |
RW |
0 |
|
data_mode |
3:2 |
RW |
0 |
|
block_num |
19:4 |
RW |
0 |
|
block_size |
31:20 |
RW |
0 |
|
SDIO_START
Address offset: 0x2C.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
start |
0 |
W1C |
0 |
启动传输:写 ‘1’ 生成脉冲并自动复位 |
Reserved |
31:1 |
/ |
0x0 |
保留位 |
SDIO_RSP0
Address offset: 0x30.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
rsp0 |
31:0 |
RO |
0 |
|
SDIO_RSP1
Address offset: 0x34.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
rsp1 |
31:0 |
RO |
0 |
|
SDIO_RSP2
Address offset: 0x38.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
rsp2 |
31:0 |
RO |
0 |
|
SDIO_RSP3
Address offset: 0x3C.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
rsp3 |
31:0 |
RO |
0 |
|
SDIO_CLK_DIV
Address offset: 0x40.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
div |
31:0 |
RW |
0 |
|
SDIO_STATUS
Address offset: 0x44.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
eot |
0 |
W1C |
0 |
传输结束标志:写 ‘1’ 清除为 ‘0’ |
error |
1 |
W1C |
0 |
传输错误标志:写 ‘1’ 清除为 ‘0’ |
txudr_err |
2 |
W1C |
0 |
发送缓冲区下溢错误标志:写 ‘1’ 清除为 ‘0’ |
txovf_err |
3 |
W1C |
0 |
发送缓冲区上溢错误标志:写 ‘1’ 清除为 ‘0’ |
rxudr_err |
4 |
W1C |
0 |
接收缓冲区下溢错误标志:写 ‘1’ 清除为 ‘0’ |
rxovf_err |
5 |
W1C |
0 |
接收缓冲区上溢错误标志:写 ‘1’ 清除为 ‘0’ |
busy |
6 |
RO |
0 |
SDIO 忙标志 |
clear_fifo_star |
7 |
W1C |
0 |
SDIO 清除 FIFO |
irq_check |
8 |
W1C |
0 |
SDIO 中断检查 |
block_done |
9 |
W1C |
0 |
SDIO 块传输完成标志 |
busy0_end |
10 |
W1C |
0 |
SDIO 睡眠模式完成标志 |
voltage_switch_pass |
11 |
W1C |
0 |
SDIO 电压切换成功标志 |
voltage_switch_fail |
12 |
W1C |
0 |
SDIO 电压切换失败标志 |
boot_ack_pass |
13 |
W1C |
0 |
SDIO 引导应答成功标志 |
boot_ack_fail |
14 |
W1C |
0 |
SDIO 引导应答失败标志 |
clk_stop |
15 |
RO |
1 |
SDIO 时钟停止标志 |
cmd_err_status |
21:16 |
RO |
0 |
|
voltage_switch_end |
22 |
W1C |
0 |
SDIO 电压切换结束标志 |
Reserved |
23 |
/ |
0x0 |
保留位 |
data_err_status |
29:24 |
RO |
0 |
|
data_runing |
30 |
RO |
0 |
|
slave_ready |
31 |
RW |
1 |
SDIO 从设备就绪标志 |
SDIO_STOP_CMD_OP
Address offset: 0x48.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
type_no_rsp |
0 |
RW |
0 |
|
type_136bit |
1 |
RW |
0 |
|
type_crc |
2 |
RW |
0 |
|
type_busy |
3 |
RW |
0 |
|
type_power_up |
4 |
RW |
0 |
|
type_crc_check_err |
5 |
RW |
0 |
|
Reserved |
7:6 |
/ |
0x0 |
保留位 |
cmd_op |
13:8 |
RW |
0 |
命令索引(command index) |
Reserved |
31:14 |
/ |
0x0 |
保留位 |
SDIO_STOP_CMD_ARG
Address offset: 0x4C.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
cmd_arg |
31:0 |
RW |
0 |
SDIO STOP command arg |
SDIO_DATA_TIMEOUT_CNT
Address offset: 0x50.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
data_timeout_cnt |
31:0 |
RW |
2047 |
|
SDIO_CMD_POWERUP_CNT
Address offset: 0x54.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
cmd_powerup_cnt |
31:0 |
RW |
73 |
在发送命令之前,可以配置一个上电时间;经过此寄存器配置的时钟数量后,命令开始发送 |
SDIO_CMD_WAIT_RSP_CNT
Address offset: 0x58.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
cmd_wait_rsp_cnt |
31:0 |
RW |
100 |
SDIO 等待响应计数器配置 |
SDIO_CMD_WAIT_EOT_CNT
Address offset: 0x5C.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
cmd_wait_eot_cnt |
31:0 |
RW |
16 |
SDIO 等待结束计数器配置 |
SDIO_TX_DATA
Address offset: 0x60.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
tx_data |
31:0 |
WO |
0 |
SDIO 发送数据 |
SDIO_RX_DATA
Address offset: 0x64.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
rx_data |
31:0 |
RO |
0 |
SDIO 接收数据 |
SDIO_TX_MARK
Address offset: 0x68.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
tx_mark |
5:0 |
RW |
0 |
|
Reserved |
31:6 |
/ |
0x0 |
/ |
SDIO_RX_MARK
Address offset: 0x6C.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
rx_mark |
5:0 |
RW |
0 |
|
Reserved |
31:6 |
/ |
0x0 |
/ |
SDIO_IP
Address offset: 0x70.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
tx_irq |
0 |
RO |
0 |
发送水印使能 |
rx_irq |
1 |
RO |
0 |
接收水印使能 |
rx_empty |
2 |
RO |
1 |
接收 FIFO 为空 |
tx_full |
3 |
RO |
0 |
发送 FIFO 已满 |
tx_empty |
4 |
RO |
1 |
发送 FIFO 为空 |
rx_full |
5 |
RO |
0 |
接收 FIFO 已满 |
Reserved |
31:6 |
/ |
0x0 |
/ |
SDIO_IE
Address offset: 0x74.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
tx_irq_en |
0 |
RW |
0 |
发送水印中断使能 |
rx_irq_en |
1 |
RW |
0 |
接收水印中断使能 |
eot_irq_en |
2 |
RW |
0 |
结束中断使能 |
err_irq_en |
3 |
RW |
0 |
错误中断使能 |
txudr_err_en |
4 |
RW |
0 |
TX underflow 错误中断使能 |
txovf_err_en |
5 |
RW |
0 |
TX overflow 错误中断使能 |
rxudr_err_en |
6 |
RW |
0 |
RX underflow 错误中断使能 |
rxovf_err_en |
7 |
RW |
0 |
RX overflow 错误中断使能 |
irq_check_en |
8 |
RW |
0 |
SDIO 检查中断使能 |
block_done_en |
9 |
RW |
0 |
SDIO 块完成中断使能 |
busy0_end_en |
10 |
RW |
0 |
SDIO CMD5 完成中断使能 |
volt_age_switch_pass_en |
11 |
RW |
0 |
SDIO 电压切换成功中断使能 |
volt_age_switch_fail_en |
12 |
RW |
0 |
SDIO 电压切换失败中断使能 |
boot_ack_pass_en |
13 |
RW |
0 |
SDIO 引导应答成功中断使能 |
boot_ack_fail_en |
14 |
RW |
0 |
SDIO 引导应答失败中断使能 |
Reserved |
31:15 |
/ |
0x0 |
/ |
SDIO_SAMPLE_DDR
Address offset: 0x78.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
ddr_delay |
31:0 |
RW |
0 |
该位域表示延迟采样值。延迟单位为系统时钟的一半(sample_ddr < 2 * DIV) |
SDIO_DATA_TX_DELAY_CNT
Address offset: 0x84.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
data_tx_delay_cnt |
31:0 |
RW |
7 |
对于单个块,传输结束后的延迟时间由该寄存器配置;多个块之间发送的延迟时间也由该寄存器配置 |
SDIO_DATA_CRC_TOKEN_CNT
Address offset: 0x88.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
data_crc_token_cnt |
15:0 |
RW |
32 |
SDIO CRC Token 超时延迟计数器寄存器 |
Reserved |
31:16 |
/ |
0x0 |
/ |
SDIO_CRC_VALUE
Address offset: 0x8C.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
cmd_crc |
6:0 |
RO |
0 |
SDIO 命令 CRC 值 |
Reserved |
7 |
/ |
0x0 |
/ |
stop_cmd_crc |
14:8 |
RO |
0 |
SDIO STOP 命令 CRC 值(仅在 autoCMD12 模式下使用) |
Reserved |
31:15 |
/ |
0x0 |
/ |
SDIO_STATUS1
Address offset: 0x90.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
block_num |
15:0 |
RO |
0 |
剩余块的传输数量 |
Reserved |
31:16 |
/ |
0x0 |
/ |
SDIO_STOP
Address offset: 0x94.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
stop |
0 |
WIC |
0 |
停止传输,写入 1 会生成脉冲并自动复位 |
Reserved |
31:1 |
/ |
0x0 |
/ |
SDIO_PAD_CTRL
Address offset: 0x98.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
pad_ctrl |
9:0 |
RW |
0x3ff |
SDIO PAD 上拉控制(用于 sdclk, sdcmd, sddata0-7) |
Reserved |
31:10 |
/ |
0x0 |
/ |
SDIO_STOP_RSP0
Address offset: 0xA0.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
stop_rsp0 |
31:0 |
RO |
0 |
|
SDIO_STOP_RSP1
Address offset: 0xA4.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
stop_rsp0 |
31:0 |
RO |
0 |
|
SDIO_STOP_RSP2
Address offset: 0xA8.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
stop_rsp0 |
31:0 |
RO |
0 |
|
SDIO_STOP_RSP3
Address offset: 0xAC.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
stop_rsp0 |
31:0 |
RO |
0 |
|
DMA_CFG_PCTRL
Address offset: 0x1000.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
pctrl_cg |
31:0 |
RW |
0x0 |
DMA 相关外设的时钟门控使能 |
DMA_CFG_EVENT
Address offset: 0x1004.
Field |
Bit |
Access |
Reset Value |
Description |
|---|---|---|---|---|
EVT0 |
7:0 |
RW |
0xFF |
ID 匹配这些位的外部事件将被转发到外设作为 event0 |
EVT1 |
15:8 |
RW |
0xFF |
ID 匹配这些位的外部事件将被转发到外设作为 event1 |
EVT2 |
23:16 |
RW |
0xFF |
ID 匹配这些位的外部事件将被转发到外设作为 event2 |
EVT3 |
31:24 |
RW |
0xFF |
ID 匹配这些位的外部事件将被转发到外设作为 event3 |
DMA_PCH0_IRQ_EN
Address offset: 0xC00.
参考DMA相关文档
DMA_PCH0_IRQ_STAT
Address offset: 0xC04.
参考DMA相关文档
DMA_PCH0_IRQ_CLR
Address offset: 0xC08.
参考DMA相关文档
DMA_PCH0_CFG_RX_LLA_REG
Address offset: 0xE00.
参考DMA相关文档
DMA_PCH0_CFG_TX_LLA_REG
Address offset: 0xF00.
参考DMA相关文档