mirror of
https://gitee.com/anod/open_agb_firm.git
synced 2025-05-06 22:04:10 +08:00
93 lines
2.0 KiB
C
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, §[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;
|
|
}
|