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,不支持同时对该地址进行读或写访问
|