SD
An SD/MMC card host interface.
Registers
Name |
Offset |
Description |
CON0 |
0x00 |
Control register 0 |
CON1 |
0x04 |
Control register 1 |
CON2 |
0x08 |
Control register 2 |
CPTR |
0x0C |
Command buffer address |
DPTR |
0x10 |
Data buffer address |
Variants with CTU add the following registers:
Name |
Offset |
Description |
CTU_CON |
0x14 |
CTU control reg |
CTU_CNT |
0x18 |
CTU block count |
CON0
Bits |
Type |
Name |
Description |
15 |
R |
DINT |
Data interrupt pending |
14 |
W |
CLR_DINT |
Clear a pending data interrupt |
13 |
R/W |
LINE4 |
Data bus width (0 = 1-bit, 1 = 4-bit) |
12 |
R/W |
DATCLK8 |
Send 8 clocks after transferring a data block |
11 |
R |
DATCRC |
Data CRC error flag |
10:8 |
W |
SDDMODE |
Fire a single data block transfer ([10:9] = 0: NOP, 2: send block, 3: receive block; [8] = 0: do not check for busy, 1: check for busy) |
7 |
R |
CINT |
Command interrupt pending |
6 |
W |
CLR_CINT |
Clear a pending command interrupt |
5 |
R |
TIMEOUT |
Timed out flag |
4 |
R/W |
CMDCLK8 |
Send 8 clocks after transferring a command |
3 |
R |
CMDCRC |
Response CRC error flag |
2:0 |
W |
SDCMODE |
Fire a command transfer ([2] = 0: check for busy, 1: do not check for busy; [1:0] = 0: NOP, 1: send with a 48-bit response, 2: send with a 136-bit response, 3: send without receiving a response) |
CON1
Bits |
Type |
Name |
Description |
15:8 |
R/W |
SD_BAUD |
Card clock divider, Fsys / (SD_BAUD + 1) |
7 |
R/W |
DATIE |
Data interrupt enable |
6 |
R/W |
CMDIE |
Command interrupt enable |
5 |
R/W |
CLKALL |
Always send a card clock |
4 |
|
|
|
3:1 |
R |
CRCSTA |
CRC status flags |
0 |
R/W |
SDCEN |
Enable the SD host controller |
CON2
Bits |
Type |
Name |
Description |
15:9 |
|
|
|
8:0 |
R/W |
SDDCNT |
Data block size (SDDCNT + 1) |
CPTR
Bits |
Type |
Description |
x:2 |
W |
Address of the command buffer |
DPTR
Bits |
Type |
Description |
x:2 |
W |
Address of the data buffer |
CTU_CON
Bits |
Type |
Name |
Description |
15:11 |
|
|
|
10:8 |
R/W |
SDDMODE_KEEP |
Fire a multi-block data transfer ([10:9] = 0: NOP, 2: send, 3: receive; [8] = 0: do not check for busy, 1: check for busy) |
7 |
R |
CTU_PND |
CTU interrupt pending flag |
6 |
W |
CLR_CTU_PND |
Clear CTU pending flag |
5 |
R |
CTU_ERR |
CTU error flag |
4 |
W |
CLR_CTU_ERR |
Clear CTU error flag |
3 |
R |
CTU_BUSY |
CTU busy flag |
2 |
R/W |
CTU_PND_IE |
CTU general interrupt enable |
1 |
R/W |
CTU_ERR_IE |
CTU error interrupt enable |
0 |
R/W |
SD_CTU_EN |
Enable the CTU block |
CTU_CNT
Bits |
Type |
Description |
15:0 |
R/W |
Block count (CTU_CNT + 1) |
Note: the data transfer via CTU is finally started when this register is written