oaf-boost/libn3ds/tests/sd_card.c
2022-08-04 11:40:24 +08:00

93 lines
2.0 KiB
C

#include "drivers/gfx.h"
#include "arm11/console.h"
#include "arm11/drivers/timer.h"
#include "drivers/toshsd.h"
#include "arm11/fmt.h"
#include "arm11/drivers/hid.h"
#include "drivers/mmc/sdmmc.h"
#include "arm11/power.h"
// 2 sector SDIO3 DMA:
/*
# 4 bytes burst with 16 transfers. Total 64 bytes per burst.
# Source fixed address and destination incrementing.
# Source and destination unprivileged, non-secure data access.
MOV CCR, SB16 SS32 SAF SP2 DB16 DS32 DAI DP2
MOV SAR, 0x10300000
MOV DAR, 0x20000000
FLUSHP 5
# Wait for a burst request.
WFP 5, burst
LP 7
LD
ST
LPEND
LDPB 5
ST
WFP 5, burst
LP 7
LD
ST
LPEND
LDPB 5
ST
WMB
END
*/
void printSlotCardInfos(void)
{
SdmmcInfo info;
SDMMC_getCardInfo(SDMMC_DEV_SLOT, &info);
ee_printf("Card infos:\n type: %u\n spec_vers: %u\n rca: 0x%X\n ccc: 0x%X\n sectors: %lu\n CID: ",
info.type, info.spec_vers, info.rca, info.ccc, info.sectors);
for(u32 i = 0; i < 4; i++)
{
ee_printf("%08lX", info.cid[i]);
}
ee_printf("\n Bus width: %u bit\n Clock: %lu Hz\n", info.busWidth, info.clock);
}
int main(void)
{
GFX_init(GFX_BGR8, GFX_RGB565);
GFX_setBrightness(15, 15);
consoleInit(SCREEN_BOT, NULL);
TIMER_sleepMs(1000);
TOSHSD_init();
ee_puts("Insert SD/MMC and press A.");
do
{
do
{
hidScanInput();
if(hidGetExtraKeys(0) & (KEY_POWER | KEY_POWER_HELD)) goto pooff;
if(hidKeysDown() & KEY_A) break;
GFX_waitForVBlank0();
} while(1);
ee_printf("\x1b[1;0H\x1b[0J\x1b[1;0H");
ee_printf("Card inserted/unlocked: %u/%u\n", TOSHSD_cardDetected(), TOSHSD_cardSliderUnlocked());
const u32 initRes = SDMMC_init(SDMMC_DEV_SLOT);
u32 sect[1024 / 4] = {0};
const u32 read = SDMMC_readSectors(SDMMC_DEV_SLOT, 0, sect, 1);
const u32 read2 = SDMMC_readSectors(SDMMC_DEV_SLOT, 1, &sect[512 / 4], 1);
printSlotCardInfos();
SDMMC_deinit(SDMMC_DEV_SLOT);
ee_printf("init: %lu, read: %lu, read2: %lu, sector[127]: 0x%lX\n", initRes, read, read2, sect[511 / 4]);
} while(1);
pooff:
GFX_deinit();
power_off();
return 0;
}