EMMC Registers

From 3dbrew
Jump to: navigation, search

These registers are used to access the system NAND and the inserted SD card. Both devices use the same interface.

Registers[edit]

Old3DS Name Address Width Used by
Yes EMMC_CMD 0x10006000 2 Boot9, NewKernel9Loader, Process9
Yes  ? 0x10006002 2
Yes EMMC_CMDARG0 0x10006004 2
Yes EMMC_CMDARG1 0x10006006 2
Yes EMMC_STOP 0x10006008 2
Yes EMMC_BLKCOUNT 0x1000600a 2
Yes EMMC_RESP0-7 0x1000600c 2*8
Yes EMMC_STATUS0 0x1000601c 2
Yes EMMC_STATUS1 0x1000601e 2
Yes  ? 0x10006020 2
Yes  ? 0x10006022 2
Yes EMMC_CLKCTL 0x10006024 2
Yes EMMC_BLKLEN 0x10006026 2
Yes EMMC_OPT 0x10006028 2
Yes EMMC_FIFO 0x10006030 2
Yes EMMC_RESET 0x100060E0 2

The IO interface for SDMC/NAND seems to be very similar to the DSi; see libnds for sample code and documentation, and GBATEK for better documentation.

3DS SDMC/NAND IO registers are located at 0x10006000 and apparently mirrored at 0x10007000. It seems the 0x10007000 mirror is never used on retail units.

EMMC_STATUS0[edit]

Bit Description
3 SD card removal flag (Set to 1 when SD card is removed)
4 SD card insertion flag (Set to 1 when SD card is inserted)
5 SD card insertion status (0 = missing, 1 = inserted)

SD card insertion status[edit]

Assertion happens around 250 ms after SD card insertion and/or enabling the EMMC hardware (delay could possibly be due to an SD bus timeout?).