8.1.4. 寄存器描述

8.1.4.1. 0x000 SDMC_BLKCNT

默认值:0x00000001

传输块数量(Block Count)

位域

类型

默认值

描述

31:16

/

/

/

15:0

R/W

0x1

block_count
传输块数量。
对于未定义的字节数量,该位应该设置为0。当该位设置为0时,host
应该明确的发送停止命令终止当前数据传输。

8.1.4.2. 0x004 SDMC_BLKSIZ

默认值:0x00000200

传输块长度(Block Size)

位域

类型

默认值

描述

31:16

/

/

/

15:0

R/W

0x200

block_size
传输块大小。
配置单个传输块的字节数量,默认值为512个字节。

8.1.4.3. 0x008 SDMC_CMDARG

默认值:0x00000000

命令参数(Command Argument)

位域

类型

默认值

描述

31:0

R/W

0x0

cmd_arg
该值表示发送给card的命令参数

8.1.4.4. 0x00C SDMC_CMD

默认值:0x20000000

命令配置(Command Configure)

位域

类型

默认值

描述

31

R/W

0x0

start_command
开始发送命令
一旦命令被CIF获取,该位自动清零。
当该位置1,host不能写任何命令到寄存器。如果此时试图写命令,硬件
锁定错误中断会被置1。
一旦命令发出并接收到响应,命令完成中断会置1。

30

/

/

/

29

R/W

0x1

use_hold_reg
使用保持寄存器
0:命令和数据直接发送到卡
1:命令和数据通过保持寄存器发送到卡

28

R/W

0x0

volt_switch
SD卡电压切换
0:无电压切换
1:电压切换使能,对于CMD11命令一定要置位

27

R/W

0x0

boot_mode
启动引导模式选择
0:执行强制的引导操作
1:执行替代的引导操作

26

R/W

0x0

Disable_boot
禁止启动引导操作
软件将该位和start_cmd位置1时,CIF会终止引导操所。不能同时将该位
和Enable_boot位置1。

25

R/W

0x0

expect_boot_ack
接收引导操作应答信号
当软件将该位和enable_boot位置1,CIF接收来自卡的引导操作应答信号
0-1-0。

24

R/W

0x0

enable_boot
使能启动引导操作
对于强制的引导模式,该位应该置1。当软件将该位和start_cmd位置1时,
CIF开始发送引导序列,对应卡的命令线为低电平。不能同时将该位和
disable_boot位置1。

23:22

/

/

/

21

R/W

0x0

update_clock_registers_only
仅更新时钟寄存器
0:正常命令序列
1:不发送命令,仅更新时钟寄存器的值到相关的时钟域

20:16

R/W

0x0

card_number
当前在使用的card数量,表示硬件插入的可访问的card数量。当前版本一个
控制器仅支持一个设备。

15

R/W

0x0

send_initialization
发送初始化序列
0:发送命令之前不发送初始化序列
1:发送命令之前发送初始化序列
上电后,发送命令之前,必须发送80个时钟等待card内部初始化完成。
在boot模式下,该位不用置1。

14

R/W

0x0

stop_abort_cmd
发送停止或丢弃命令
0:在数据传输时不用停止或丢弃命令终止当前传输
1:在数据传输时使用停止或丢弃命令终止当前传输
当工作在开放或者预定义数据传输模式时,host需要发送停止或丢弃命令来
终止数据传输,该位应该置1,使得CIF的命令、数据状态机正确的返回到
空闲状态。

13

R/W

0x0

wait_prvdata_complete
等待之前的数据传输完成
0:即使之前的数据传输未完成,也可以再次发送命令
1:必须等待之前的数据传输完成,再发送命令
通常,在数据传输期间或者终止当前传输时,如果想要查询当前的状态,
可以将该位清零。

12

R/W

0x0

send_auto_stop
自动发送停止命令
0:数据传输结束时不自动发送停止命令
1:数据传输结束时自动发送停止命令
该位置1,在数据传输结束后控制器会自动发送停止命令。

11

R/W

0x0

transfer_mode
传输模式
0:基于块的数据传输命令
1:基于字节流的数据传输命令

10

R/W

0x0

read/write
读写方向
0:从卡读数据
1:写数据到卡

9

R/W

0x0

data_expected
0:无数据的命令传输(read/write)
1:有期望数据的命令传输(read/write)

8

R/W

0x0

check_response_crc
检查响应信号的CRC
0:不检查响应的CRC
1:检查响应的CRC
一些命令的响应不会返回有效的CRC数据,对于这些命令软件应该禁止
CRC检查。

7

R/W

0x0

response_length
响应信号长度
0:从卡获取短响应数据(48-bit)
1:从卡获取长响应数据(136-bit)

6

R/W

0x0

response_expect
获取响应信号
0:不从卡获取响应信号
1:从卡获取响应信号

5:0

R/W

0x0

cmd_index
命令序号

8.1.4.5. 0x010 SDMC_RESP0

默认值:0x00000000

响应数据0(Response 0)

位域

类型

默认值

描述

31:0

R

0x0

响应数据的bit[31:0]

8.1.4.6. 0x014 SDMC_RESP1

默认值:0x00000000

响应数据1(Response 1)

位域

类型

默认值

描述

31:0

R

0x0

响应数据的bit[63:32]

8.1.4.7. 0x018 SDMC_RESP2

默认值:0x00000000

响应数据2(Response 2)

位域

类型

默认值

描述

31:0

R

0x0

响应数据的bit[95:64]

8.1.4.8. 0x01C SDMC_RESP3

默认值:0x00000000

响应数据3(Response 3)

位域

类型

默认值

描述

31:0

R

0x0

响应数据的bit[127:96]

8.1.4.9. 0x020 SDMC_TTMC

默认值:0xffffff40

传输超时时间控制(Transfer Timeout Control)

位域

类型

默认值

描述

31:8

R/W

0xffffff

data_timeout
读数据传输超时时间
超时计数器仅在card时钟停止后启动。
注意:如果超时值接近100ms,需要使用软件计时器。在这种情况下,
读数据超时中断应该被禁止。

7:0

R/W

0x40

response_timeout
响应超时时间
单位:卡输出时钟cclk_out

8.1.4.10. 0x024 SDMC_TCBC

默认值:0x00000000

发送到卡的字节数(Transferred Card Byte Count)

位域

类型

默认值

描述

31:0

R

0x0

trans_card_byte_count
通过CIF模块传输到Card的字节数。
在32位或者64位的AMBA总线模式下,寄存器应该全额访问避免读操作的
一致性问题。在16位的AMBA总线模式下,内部16位的一致性寄存器有效。
用户首先读取低16位数据,后读取高16位数据。当读取低16位数据时,
高16位数据存在临时寄存器里。当读取高16位数据时,再从临时寄存器
中取出。
TCBC和TFBC共享一致性寄存器。

8.1.4.11. 0x028 SDMC_TFBC

默认值:0x00000000

发送到缓存的字节数(Transferred FIFO Byte Count)

位域

类型

默认值

描述

31:0

R

0x0

trans_fifo_byte_count
Host/DMA内存和HIF FIFO之间传输数据的字节数
在32位或者64位的AMBA总线模式下,寄存器应该全额访问避免读操作的
一致性问题。在16位的AMBA总线模式下,内部16位的一致性寄存器有效。
用户首先读取低16位数据,后读取高16位数据。当读取低16位数据时,
高16位数据存在临时寄存器里。当读取高16位数据时,再从临时寄存器
中取出。
TCBC和TFBC共享一致性寄存器。

8.1.4.12. 0x02C SDMC_CTRST

默认值:0x00000406

控制器状态(控制器状态)

位域

类型

默认值

描述

31

R

0x0

dma_req
DMA请求信号状态

30

R

0x0

dma_ack
DMA应答信号状态

29:17

R

0x0

fifo_count
FIFO数量

16:11

R

0x0

response_index
前一个响应的索引值

10

R

0x1

data_state_mc_busy
数据发送或接收状态机忙碌

9

R

0x1 or 0x0

data_busy
根据card_data[0]的电平状态判断是否忙碌
0:卡数据传输处于非忙碌状态
1:卡数据传输处于忙碌状态
注意:默认值状态取决于cdata_in的初始电平

8

R

0x1 or 0x0

data_3_status
根据card_data[3]的电平状态检查是否有卡插入
0:有SD卡插入
1:没有SD卡插入
注意:卡检测仅支持SDC1,默认值状态取决于cdata_in的初始电平

7:4

R

0x0

command fsm states
命令状态机状态:
0:空闲
1:发送初始化序列
2:Tx命令开始位
3:Tx命令tx位
4:Tx命令索引值+参数
5:Tx命令crc7校验
6:Tx命令结束位
7:Rx响应起始位
8:Rx响应中断请求响应
9:Rx响应tx位
10:Rx响应命令索引值
11:Rx响应数据
12:Rx响应crc7校验
13:Rx响应结束位
14:命令通路等待NCC
15:等待状态

3

R

0x0

fifo_full
FIFO为满

2

R

0x1

fifo_empty
FIFO为空

1

R

0x1

fifo_tx_watermark
FIFO达到发送数据门限值,不允许数据传输

0

R

0x0

fifo_rx_watermark
FIFO达到接收数据门限值,不允许数据传输

8.1.4.13. 0x030 SDMC_HCTRL1

默认值:0x01000004

主机控制配置1(Host Control 1)

位域

类型

默认值

描述

31:26

/

/

/

25

R/W

0x0

use_inside_dmac
0:Host通过从机接口进行数据传输
1:仅使用内部DMA传输数据

24

R/W

0x1

enable_OD_pullup
外部开漏上拉使能
0:禁止
1:使能
当该位置1,命令信号的输出为开漏模式,信号驱动为0或者高阻态,
不能驱动为1。

23:11

/

/

/

10:9

/

/

/

8

R/W

0x0

abort_read_data
读数据丢弃
0:不改变
1:在读数据,软件查找Card设备时,发送暂停命令会使操作暂停。一旦
暂停操作发生,软件会置位并复位数据状态机,等待下一笔数据传输。
一旦数据状态机复位到空闲状态,该位会自动清零。
该功能用于SDIO的暂停操作。

7

R/W

0x0

send_irq_response
发送中断请求响应
0:不改变
1:发送自动中断请求响应
一旦响应被发送该位自动清零。
为了等待MMC卡中断,host发送CMD40命令,控制器等待来自MMC卡的中断
响应。同时,如果host想要控制器退出中断状态等待,可以将该位置1,
此时控制器命令状态机发送CMD40等待总线响应后返回到空闲状态。

6

R/W

0x0

read_wait
读等待
0:清除读等待
1:使能读等待
用于SDIO卡设备的发送读等待功能

5

R/W

0x0

dma_enable
DMA使能
0:禁止DMA传输模式
1:使能DMA传输模式
仅当控制器配置为使用外部DMA接口时有效
即使使能DMA模式,host仍然可以访问FIFO;在正常操作下该行为不会发生。
如果host/DMA同时访问FIFO,数据会丢失。控制器内部没有仲裁器来决定
Host/DMA同时访问的优先级。

4

R/W

0x0

int_enable
全局中断使能
0:禁止中断
1:使能中断
仅当该位置1,大于一个未屏蔽的中断置位时,对应的中断端口才为1。

3

R/W

0x1

RST_n
硬件Reset控制
0:复位信号有效
1:复位信号无效
复位信号有效device进入pre-idle状态,需要重新初始化device。

2

R/W

0x0

dma_reset
DMA复位
0:不改变
1:复位内部DMA接口控制逻辑
经过两个AHB时钟周期后该位自动清零

1

R/W

0x0

fifo_reset
FIFO复位
0:不改变
1:复位数据FIFO和FIFO指针
复位完成后自动清零
注意:该位清零后,FIFO指针在2个周期的系统时钟加同步延时
(2个周期的card时钟)后被复位。

0

R/W

0x0

controller_reset
控制器复位
0:不改变
1:复位控制器
经过两个AHB时钟周期后该位自动清零
复位的模块包括:
HIF/CIF接口;
CIF和状态机;
控制寄存器的abort_read_data/send_irq_response/read_wait位域;
命令寄存器的start_cmd位域。
不影响其他寄存器和DMA接口,FIFO和host中断等。

8.1.4.14. 0x034 SDMC_CLKCTRL

默认值:0x00000000

时钟控制配置(Clock Control)

位域

类型

默认值

描述

31:17

/

/

/

16

R/W

0x0

cclk_low_power
0:无低功耗模式
1:低功耗模式;当SD/MMC处于空闲状态时关闭时钟(在使用MMC或者
SD卡时应该置1;对于SDIO卡,如果使用中断,时钟不能被停止。)

15:8

R/W

0x0

clk_divider0
时钟分频器0的值。
时钟分频为2*n(n为设定值)。

7:1

/

/

/

0

R/W

0x0

cclk_enable
cclk时钟使能
0:时钟禁用
1:时钟使能

8.1.4.15. 0x038 SDMC_HCTRL2

默认值:0x00000000

主机控制配置2(Host Control 2)

位域

类型

默认值

描述

31:30

/

/

/

29:28

R/W

0x0

BUS_WIDTH
总线位宽配置
0:1线模式
1:4线模式
2:8线模式
3:保留

27:25

/

/

/

24

R/W

0x0

TMO_UNIT
超时时间单位选择
0:1 x cclk_out
1:256 x cclk_out

23:17

/

/

/

16

R/W

0x0

DDR_MODE
DDR传输模式使能
0:数据传送工作在非DDR模式
1:数据传输工作在DDR模式

15:1

/

/

/

0

R/W

0x0

VOLT_REG
高速电压模式
决定了外部调压器提供给缓存的电压值
0:缓存供电电压为3.3V
1:缓存供电电压为1.8V
外部调压器一定要匹配编程的电压值
例如:bit0 = 1,对于card 0必须工作在1.8V电压

8.1.4.16. 0x03C SDMC_INTEN

默认值:0x000000010

中断使能(Interrupt Enable)

位域

类型

默认值

描述

31:17

/

/

/

16

R/W

0x0

sdio_int_mask
屏蔽SDIO中断
当中断被屏蔽后,SDIO中断检测无效。
0:屏蔽中断
1:使能中断
在MMC-Ver3.3模式下,该位总是为0。

15:0

R/W

0x0

int_mask
中断屏蔽
该位域用于屏蔽不使用的中断。对于每个位:
0:屏蔽中断
1:使能中断
每个位的中断定义如下:
bit 15-EBE(读操作结束位错误或者写操作无CRC)
bit 14-ACD(自动发送命令完成)
bit 13-SBE(起始位错误)BCI(忙清除中断)
bit 12-HLE(硬件锁定写操作错误)
bit 11-FRUN(FIFO 向下溢出/向上溢出)
bit 10-HTO(host获取数据超时)或者电压切换中断
bit 9-DRTO(读数据超时)
bit 8-RTO(响应超时)
bit 7-DCRC(数据CRC错误)
bit 6-RCRC(响应CRC错误)
bit 5-RXDR(接收FIFO数据请求)
bit 4-TXDR(发送FIFO数据请求)
bit 3-DTO(数据传输完成)
bit 2-CD(命令发送完成)
bit 1-RE(响应错误)
bit 0-CD(卡检测中断)

8.1.4.17. 0x040 SDMC_INTST

默认值:0x00000000

已使能中断状态(Enabled Interrupt Status)

位域

类型

默认值

描述

31:17

/

/

/

16

R

0x0

sdio_interrupt
SDIO中断
0:无来自SDIO的中断信号
1:有来自SDIO的中断信号
在MMC-Ver3.3模式下,该位总是为0。

15:0

R

0x0

int_status
中断状态
每个位的中断状态定义如下:
bit 15-EBE(读操作结束位错误或者写操作无CRC)
bit 14-ACD(自动发送命令完成)
bit 13-SBE(起始位错误)BCI(忙清除中断)
bit 12-HLE(硬件锁定写操作错误)
bit 11-FRUN(FIFO 向下溢出/向上溢出)
bit 10-HTO(host获取数据超时)或者电压切换中断
bit 9-DRTO(读数据超时)
bit 8-RTO(响应超时)
bit 7-DCRC(数据CRC错误)
bit 6-RCRC(响应CRC错误)
bit 5-RXDR(接收FIFO数据请求)
bit 4-TXDR(发送FIFO数据请求)
bit 3-DTO(数据传输完成)
bit 2-CD(命令发送完成)
bit 1-RE(响应错误)
bit 0-CD(卡检测中断)

8.1.4.18. 0x044 SDMC_OINTST

默认值:0x00000000

初始中断状态(Original Interrupt Status)

位域

类型

默认值

描述

31:17

/

/

/

16

R/W1C

0x0

sdio_interrupt
SDIO中断,该位写1清零。
0:无来自SDIO的中断信号
1:有来自SDIO的中断信号
在MMC-Ver3.3模式下,该位总是为0。

15:0

R/W1C

0x0

int_status
中断状态,每个位写1清零。
每个位的中断状态定义如下:
bit 15-EBE(读操作结束位错误或者写操作无CRC)
bit 14-ACD(自动发送命令完成)
bit 13-SBE(起始位错误)BCI(忙清除中断)
bit 12-HLE(硬件锁定写操作错误)
bit 11-FRUN(FIFO 向下溢出/向上溢出)
bit 10-HTO(host获取数据超时)或者电压切换中断
bit 9-DRTO(读数据超时)
bit 8-RTO(响应超时)
bit 7-DCRC(数据CRC错误)
bit 6-RCRC(响应CRC错误)
bit 5-RXDR(接收FIFO数据请求)
bit 4-TXDR(发送FIFO数据请求)
bit 3-DTO(数据传输完成)
bit 2-CD(命令发送完成)
bit 1-RE(响应错误)
bit 0-CDET(卡检测中断)

8.1.4.19. 0x048 SDMC_FIFOCFG

默认值:0x007F0000

FIFO配置(FIFO Configuration)

位域

类型

默认值

描述

31

/

/

/

30:28

R/W

0x0

DW_DMA_Mutiple_Transaction_Size
DMA突发传输值
0:1 笔传输
1:4
2:8
3:16
4:32
5:64
6:128
7:256
突发传输单位为:H_DATA_WIDTH的设定值,为32bits。
该值应该设置为(RX_WMark + 1)*(F_DATA_WIDTH/H_DATA_WIDTH)
和(FIFO_DEPTH - TX_WMark)*(F_DATA_WIDTH/H_DATA_WIDTH)的
公约数。
举例:
如果FIFIO_DEPTH=16,
FDATA_WIDTH==H_DATA_WIDTH
允许的MSIZE和TX_WMark的组合如下:
MSize=1,TX_WMark=1-15
MSize=4,TX_WMark=8
MSize=4,TX_WMark=4
MSize=4,TX_WMark=12
MSize=8,TX_WMark=8
MSize=8,TX_WMark=4
允许的MSIZE和RX_WMark的组合如下:
MSize=1,RX_WMark=0-14
MSize=4,RX_WMark=3
MSize=4,RX_WMark=7
MSize=4,RX_WMark=11
MSize=8,RX_WMark=7
推荐值:
MSize=8,TX_WMark=8,RX_WMark=7

26:16

R/W

0x7F

RX_WMark
FIFO接收门限值
当FIFO的接收的数据大于这个门限值,DMA/FIFO请求信号拉高。当数据
包结束后,无论该值有没有设置都会产生请求信号。
在非DMA模式下,当接收FIFO门限中断使能时,此时将产生一个中断信号
替代DMA请求。数据包传输结束后,如果门限值大于剩下的字节数大小,
中断将不会产生。
此时Host应该读完剩下的字节,并产生数据传输完成中断。
在DMA模式下,在接收到最后一个数据包时,即使剩下的数据小于门限值,
DMA也会发送一个请求读出FIFO里面剩下的数据,然后产生一个数据传输
完成的中断。
限制条件:RX_WMark <=FIFO_DEPTH-2
推荐值:(FIFO_DEPTH)/2-1
注意:在DMA模式下,如果CCS信号超时,DMA在最后一个数据包到来时
不会产生请求,即使剩下的数据小于该门限值。
在这种情况下,将会有一些数据保留在FIFO中。此时应该复位FIFO。

15:12

/

/

/

11:0

R/W

0x0

TX_WMark
FIFO发送门限值
当FIFO内数据量小于或等于这个门限值,DMA/FIFO请求信号拉高。如果
中断信号使能,此时会产生一个中断。当数据包结束后,无论该值是否
设置都会产生中断或请求信号。
在非DMA模式下,当TXDR中断使能时,会产生一个中断信号替代DMA请求
信号。发送完最后一个数据包时,host应该用剩下的数据填充FIFO。
在DMA模式下,最后一个数据包完成后,如果最后一笔传输小于突发数据
长度,DMA控制器会再执行一次传输直到所有数据传输完成。
限制条件:TX_WMark>=1
推荐值:(FIFO_DEPTH)/2

8.1.4.20. 0x054 SDMC_CDET

默认值:0x01FFFFFF

卡检测配置(Card Detect Configuration)

位域

类型

默认值

描述

31:25

/

/

/

24

R

0x1

card_detect_n
该值表示卡检测信号card_detect_n输入端口的状态,默认为1。
当有卡插入时,该值为0;卡拔出时,该值为1。

23:0

R/W

0xFFFFFF

Debounce_count
去除抖动维持的时钟周期数。
由于卡插拔是机械动作,会产生电平抖动,采样的电平值可能不稳定。
去抖逻辑根据该值设置计数器的初值,当计数器值变为0时,卡检测信号
稳定,此时可以采样到正确的电平值。
典型的去抖时间为5-25ms。

8.1.4.21. 0x080 SDMC_PBUSCFG

默认值:0x00000000

外设总线配置(Peripheral Bus Configuration)

位域

类型

默认值

描述

31:11

/

/

/

10:8

R

0x0

PBL
编程突发传输长度
这些位域表示内部DMA控制器执行一次突发传输的最大长度。这些值为
FIFOTH寄存器中MSIZE位域的镜像值。如果要改变这些值,需要写
FIFOTH寄存器。
0:1 笔传输
1:4
2:8
3:16
4:32
5:64
6:128
7:256
单笔突发传输的单位:32位

7

R/W

0x0

DE
置位,内部DMA使能。

6:2

R/W

0x0

DSL
置位,描述符跳过长度。
定义了两个非链式描述之间跳过的数量长度,单位是半字、字,双字
(取决于总线位宽,对应16位、32位、64位),仅用于双缓冲结构的
描述应用中。

1

R/W

0x0

FB
固定突发长度。
控制AHB主机接口是否执行固定长度的突发传输。置位,AHB使用
SINGLE,INCR4,INCR8,INC16的方式开始突发传输。复位后,
AHB使用SINGLE和INCR方式执行突发传输。

0

R/WAC

0x0

SWR
软件复位。
置位,DMA控制器复位内部寄存器,经过1个时钟周期后自动清零。

8.1.4.22. 0x084 SDMC_IDMARCAP

默认值:0x00000000

恢复获取描述符(Inside DMA Resume Capture Descriptor)

位域

类型

默认值

描述

31:0

W

0x0

RCAP
恢复获取描述符
如果描述的OWN位没有置1,状态机会进入暂停状态。Host需要对该寄存
器写一些值,使内部的DMA状态机恢复到正常的描述符获取操作。
该寄存器为只写。

8.1.4.23. 0x088 SDMC_IDMASADDR

默认值:0x00000000

描述符起始地址(Descriptor List Start Address)

位域

类型

默认值

描述

31:0

R/W

0x0

DLSA
描述符列表的起始地址。内部DMA会忽略低有效位[0/1/2:0](对应16/
32/64位总线位宽)的数据,并把他们作为全零处理,这些位是只读的。

8.1.4.24. 0x08C SDMC_IDMAST

默认值:0x00000000

内部DMA状态(Inside DMAC Status)

位域

类型

默认值

描述

31:17

/

/

/

16:13

R

0x0

FSM
DMA控制器状态机当前的状态,该位段只读。
0:DMA_IDLE
1:DMA_SUSPEND
2:DMAC_RD
3:DMAC_CHK
4:DMA_RD_REQ_WAIT
5:DMA_WR_REQ_WATI
6:DMA_RD
7:DMA_WR
8:DESC_CLOSE

12:10

R

0x0

FBE_CODE
致命的总线错误。
表示造成总线出错的错误类型,IDSTS[2]置1该位段才有效。
该位段不产生中断。
1:在发送数据时Host中止
2:在接收数据时Host中止

9

R/W1C

0x0

AIS
异常中断摘要
IDSTS[2]-致命的总线中断
IDSTS[4]-DU位中断
只有未屏蔽的位域才影响该位的值。该位写1清零。

8

R/W1C

0x0

NIS
正常中断摘要
IDSTS[0]-发送中断
IDSTS[1]-接收中断
只有未屏蔽的位域才影响该位的值。该位写1清零。

7:6

/

/

/

5

R/W1C

0x0

CES
卡错误摘要
表示卡操作的状态信息,也存在于RINTSTS寄存器。
EBE-结束位错误
RTO-响应超时/Boot应答超时
RCRC-响应CRC
SBE-起始位错误
DRTO-读数据超时
DCRC-接收的数据CRC错误
RE-响应错误
该位写1清零。

4

R/W1C

0x0

DU
描述符不可用中断。该位置1表示当前描述符不可用(因为OWN位为0)。
该位写1清零。

3

/

/

/

2

R/W1C

0x0

FBE
致命的总线错误中断,表示有一个总线错误发生,当该位置1,
DMA禁止所有的总线访问。该位写1清零。

1

R/W1C

0x0

RI
接收完成中断。表示一个描述符的数据接收完成。该位写1清零。

0

R/W1C

0x0

TI
发送完成中断。表示一个描述符的数据发送完成,该位写1清零。

8.1.4.25. 0x090 SDMC_IDMAINTEN

默认值:0x00000000

内部DMA中断使能(Inside DMAC Interrupt Enable)

位域

类型

默认值

描述

31:10

/

/

/

9

R/W

0x0

AI
异常中断摘要使能,置1时,使能异常中断。
IDINTEN[2]-致命的总线中断
IDINTEN[4]-DU位中断

8

R/W

0x0

NIS
正常中断摘要使能,置1时,使能一个正常中断。
IDINTEN[0]-发送完成中断
IDINTEN[1]-接收完成中断

7:6

/

/

/

5

R/W

0x0

CES
卡错误摘要中断使能,置1时,使能卡中断摘要。

4

R/W

0x0

DU
描述符不可用中断。当AI位段使能时,该位也一起使能。

3

/

/

/

2

R/W

0x0

FBE
置1时,致命总线错误中断使能。

1

R/W

0x0

RI
置1时,接收完成中断使能。

0

R/W

0x0

TI
置1时,发送完成中断使能。

8.1.4.26. 0x094 SDMC_IDMACDA

默认值:0x00000000

当前描述符地址指针(Current Descriptor Address)

位域

类型

默认值

描述

31:0

R

0x0

HDAL
Host描述符地址指针。复位时清零。内部DMA操作时指针会自动刷新。
该寄存器指向当前描述符的起始地址。

8.1.4.27. 0x098 SDMC_IDMACBA

默认值:0x00000000

当前缓存地址指针(Current Buffer Address)

位域

类型

默认值

描述

31:0

R

0x0

HBA
Host缓存地址指针。复位时清零。内部DMA操作时指针会自动刷新。
该寄存器指向当前数据缓存的地址。

8.1.4.28. 0x100 SDMC_CTC

默认值:0x00000000

卡门限值配置(Card Threshold Control)

位域

类型

默认值

描述

31:28

/

/

/

27:16

R/W

0x0

CardThreshold
卡传输门限值大小,N由FIFO的大小决定:
注意:当CardWrThrEn置位或CardRdThrEn置位,该寄存器有效。

15:3

/

/

/

2

R/W

0x0

CardWrThrEn
卡写操作门限值使能
0:卡写操作门限禁止
1:卡写操作门限值使能
仅当发送FIFO中存在门限值的数据量时,Host控制器初始化写传输。

1

R/W

0x0

BsyClrIntEn
0:忙状态清除中断禁止
1:忙状态清除中断使能
注意:如果不想等待忙清除中断可以不使用该功能。例如,对于多个
卡的场景,切换到另一张卡时不需要等待忙状态完成。在这种情况下,
应用程序可以使用轮询的方式决定忙碌的状态。该功能默认是禁止的。

0

R/W

0x0

CardRdThrEn
卡读操作门限值使能
0:卡读操作门限值禁止
1:卡读操作门限值使能
仅当接收FIFO中存在门限值的数据量时才读数据。

8.1.4.29. 0x104 SDMC_DLYCTRL

默认值:0x00000000

延时链和相位控制(Delay Chain and Phase Control)

位域

类型

默认值

描述

31:30

R/W

0x0

EXT_CLK_MUX_CTRL
外部输入时钟选择控制
0:输入时钟4分频,典型值为50MHZ(DS,HS-SDR,HS-DDR模式)
1:输入时钟2分频,典型值为100MHz(HS,HS-SDR,HS-DDR模式)
2:输入时钟1分频,典型值为200MHz(HS-DDR模式)

29:28

R/W

0x0

CLK_DRV_PHASE_CTRL
驱动时钟相位控制
配置输出驱动时钟cclk_in_drv使用的相位值
0:0°
1:90°
2:180°
3:270°

27:23

R/W

0x0

CLK_DRV_DELAY_CTRL
驱动时钟延迟控制
配置输出驱动时钟cclk_in_drv使用的延时值

22:21

R/W

0x0

CLK_SMPL_PHASE_CTRL
采样时钟相位控制
配置采样时钟cclk_in_sample使用的相位值
0:0°
1:90°
2:180°
3:270°

20:16

R/W

0x0

CLK_SMPL_DELAY_CTRL
采样时钟延迟控制
配置采样时钟cclk_in_sample使用的延时值

15:14

R/W

0x0

DS_SMPL_PHASE_CTRL
DS时钟相位控制
配置采样时钟cclk_in_sample使用的相位值
0:0°
1:90°
2:180°
3:270°

13:9

R/W

0x0

DS_SMPL_DELAY_CTRL
DS时钟延迟控制
配置采样时钟cclk_in_sample使用的延时值

8

R/W

0x0

SAMP_SWAP
采样边沿交换,默认先采样even数据。

7

/

/

/

6

R/W

0x0

ddr_samp_seq_en
DDR模式采样顺序使能

5:4

R/W

0x0

Even_shift
奇数据时钟移相选择:
0:选择默认相位
1:相位移动90°
2:相位移动180°
3:相位移动270°

3:2

/

/

/

1:0

R/W

0x1

Enable_shift
相位移位使能
0:选择默认相位
1:相位移动90°
2:相位移动180°
3:相位移动270°

8.1.4.30. 0x108 SDMC_EMCR

默认值:0x00000000

EMMC配置(EMMC Configuration)

位域

类型

默认值

描述

31:17

/

/

/

16

R/W

0x0

MMC_VOLT_REG
MMC 电源控制寄存器
控制MMC支持1.2V电压,该位与VOLT_REG位共同决定了输出的电压值。
当只使用SD卡,或者使用的eMMC只支持v4.41之前的协议,则Host控制器
不支持MMC_VOLT_REG编程。仅当Host支持3种不同的电压(3.3/1.8/
1.2V)选择,可以对该位进行编程。

15:1

/

/

/

0

R/W

0x0

HALF_START_BIT
起始位保持
对于eMMC 4.5版本,起始位可以保持:
0:完整的时钟周期
1:小于一个完整的时钟周期
对于eMMC 4.1及以上版本,该位置1。对于SD卡应用,该位清零。
注意:DDR操作时该位会被忽略。

8.1.4.31. 0x118 SDMC_VERID

默认值:0x00000100

控制器版本号(Version ID)

位域

类型

默认值

描述

31:0

R

0x0000_0100

VERID
控制器版本号,寄存器的值由硬件IP决定,只读。

8.1.4.32. 0x200 SDMC_FIFO

默认值:0x00000000

数据FIFO缓存寄存器(Data FIFO)

位域

类型

默认值

描述

31:0

R/W

0x0000_0000

DATA_FIFO
读写数据缓存FIFO寄存器,该寄存器映射到FIFO的入口地址。
对于写操作,CPU或IDMA通过AHB总线写数据到该地址;
对于读操作,CPU或IDMA通过AHB总线从该地址读数据。
注意:读写数据共享相同的FIFO,不支持同时对该地址进行读或写访问