Line 1: |
Line 1: |
− | The IO interface for SDMC/NAND seems to be very similar to the DSi; see libnds for [http://sourceforge.net/p/devkitpro/libnds/ci/master/tree/source/arm7/sdmmc.c sample code] and [http://sourceforge.net/p/devkitpro/libnds/ci/master/tree/include/nds/arm7/sdmmc.h documentation]. | + | These registers are used to access the system [[Flash_Filesystem|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= |
| + | |
| + | {| class="wikitable" border="1" |
| + | ! Old3DS |
| + | ! Name |
| + | ! Address |
| + | ! Width |
| + | ! Used by |
| + | |- |
| + | | style="background: green" | Yes |
| + | | EMMC_CMD |
| + | | 0x10006000 |
| + | | 2 |
| + | | Boot9, NewKernel9Loader, Process9 |
| + | |- |
| + | | style="background: green" | Yes |
| + | | EMMC_PORTSEL |
| + | | 0x10006002 |
| + | | 2 |
| + | | Port selection, 0 = SD card, 1 = NAND |
| + | |- |
| + | | style="background: green" | Yes |
| + | | EMMC_CMDARG0 |
| + | | 0x10006004 |
| + | | 2 |
| + | | |
| + | |- |
| + | | style="background: green" | Yes |
| + | | EMMC_CMDARG1 |
| + | | 0x10006006 |
| + | | 2 |
| + | | |
| + | |- |
| + | | style="background: green" | Yes |
| + | | EMMC_STOP |
| + | | 0x10006008 |
| + | | 2 |
| + | | |
| + | |- |
| + | | style="background: green" | Yes |
| + | | EMMC_BLKCOUNT |
| + | | 0x1000600a |
| + | | 2 |
| + | | |
| + | |- |
| + | | style="background: green" | Yes |
| + | | EMMC_RESP0-7 |
| + | | 0x1000600c |
| + | | 2*8 |
| + | | |
| + | |- |
| + | | style="background: green" | Yes |
| + | | [[#EMMC_STATUS0|EMMC_STATUS0]] |
| + | | 0x1000601c |
| + | | 2 |
| + | | |
| + | |- |
| + | | style="background: green" | Yes |
| + | | EMMC_STATUS1 |
| + | | 0x1000601e |
| + | | 2 |
| + | | |
| + | |- |
| + | | style="background: green" | Yes |
| + | | ? |
| + | | 0x10006020 |
| + | | 2 |
| + | | |
| + | |- |
| + | | style="background: green" | Yes |
| + | | ? |
| + | | 0x10006022 |
| + | | 2 |
| + | | |
| + | |- |
| + | | style="background: green" | Yes |
| + | | EMMC_CLKCTL |
| + | | 0x10006024 |
| + | | 2 |
| + | | |
| + | |- |
| + | | style="background: green" | Yes |
| + | | EMMC_BLKLEN |
| + | | 0x10006026 |
| + | | 2 |
| + | | |
| + | |- |
| + | | style="background: green" | Yes |
| + | | EMMC_OPT |
| + | | 0x10006028 |
| + | | 2 |
| + | | |
| + | |- |
| + | | style="background: green" | Yes |
| + | | EMMC_FIFO |
| + | | 0x10006030 |
| + | | 2 |
| + | | |
| + | |- |
| + | | style="background: green" | Yes |
| + | | EMMC_RESET |
| + | | 0x100060E0 |
| + | | 2 |
| + | | |
| + | |- |
| + | |} |
| + | |
| + | The IO interface for SDMC/NAND seems to be very similar to the DSi; see libnds for [https://github.com/devkitPro/libnds/blob/master/source/arm7/sdmmc.twl.c sample code] and [https://github.com/devkitPro/libnds/blob/master/include/nds/arm7/sdmmc.h documentation], and GBATEK for [http://problemkaputt.de/gbatek.htm#dsisdmmcioportscommandparamresponsedata 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== |
| + | |
| + | {| class="wikitable" border="1" |
| + | ! 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=== |
| + | 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?). |