EMMC Registers

EMMC Registers

These registers are used to access the system NAND and the inserted SD card. Both devices use the same interface. HCLK of the SDMMC controller is 67.027964 MHz (double of the DSi HCLK).

Registers #

Old3DSNameAddressWidthUsed by
YesEMMC_CMD0x100060002Boot9, NewKernel9Loader, Process9
YesEMMC_PORTSEL0x100060022Port selection, 0 = SD card, 1 = NAND
YesEMMC_CMDARG00x100060042
YesEMMC_CMDARG10x100060062
YesEMMC_STOP0x100060082
YesEMMC_BLKCOUNT0x1000600a2
YesEMMC_RESP0-70x1000600c2*8
YesEMMC_STATUS00x1000601c2
YesEMMC_STATUS10x1000601e2
Yes?0x100060202
Yes?0x100060222
YesEMMC_CLKCTL0x100060242
YesEMMC_BLKLEN0x100060262
YesEMMC_OPT0x100060282
YesEMMC_FIFO0x100060302
YesEMMC_RESET0x100060E02

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 #

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

SD card insertion status #

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?).