From 538057553a9719f5fd05c4a09df53a39ad6a8ea3 Mon Sep 17 00:00:00 2001 From: Shirait Date: Tue, 5 Jun 2007 10:30:55 +0000 Subject: [PATCH] =?UTF-8?q?SD=E3=81=8A=E3=82=88=E3=81=B3NAND=E3=81=AE2?= =?UTF-8?q?=E3=82=B9=E3=83=AD=E3=83=83=E3=83=88=E3=81=AB=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/twl_wrapsdk/trunk@104 4ee2a332-4b2b-5046-8439-1ba90f034370 --- build/libraries/devices/rom_sdmc/ARM7/sdmc.c | 21 +++-- build/tests/fatfs/fatfs_sd/ARM7/src/main.c | 80 +++++++++++++++++--- include/twl/devices/rom_sdmc/ARM7/sdmc.h | 13 ++++ 3 files changed, 96 insertions(+), 18 deletions(-) diff --git a/build/libraries/devices/rom_sdmc/ARM7/sdmc.c b/build/libraries/devices/rom_sdmc/ARM7/sdmc.c index 5fc1b47..0e200c1 100644 --- a/build/libraries/devices/rom_sdmc/ARM7/sdmc.c +++ b/build/libraries/devices/rom_sdmc/ARM7/sdmc.c @@ -123,8 +123,8 @@ static void SDCARD_ATC0_irq(void); /* ATC0 static void SYSFPGA_irq(void); /* SYSFPGAエラー割り込み処理 */ /*ポート1は無線固定なのでポート選択関数は公開しない*/ -static u16 i_sdmcSelectedNo(void); /* カードポートの選択 */ -static u16 i_sdmcSelect(u16 select); /* 現在のカードポート番号のチェック */ +//u16 sdmcSelectedNo(void); /* カードポートの選択 */ +//u16 sdmcSelect(u16 select); /* 現在のカードポート番号のチェック */ @@ -875,7 +875,14 @@ PRINTDEBUG( "%d\n", __LINE__); SDCARD_ErrStatus = SDMC_NORMAL; /* エラーステータスをクリア */ SDCARD_OutFlag = TRUE; /* 排出フラグをセット */ }else{ - SDCARD_ErrStatus = SDCARD_Layer_Init(); + if( SD_CheckFPGAReg( SD_INFO1, SD_INFO1_DETECT)) { + sdmcSelect( (u16)SDMC_PORT_CARD); + SDCARD_ErrStatus = SDCARD_Layer_Init(); + } + if( SD_CheckFPGAReg( EXT_CD, EXT_CD_PORT1_DETECT)) { + sdmcSelect( (u16)SDMC_PORT_NAND); + SDCARD_ErrStatus = SDCARD_Layer_Init(); + } SDCARD_OutFlag = FALSE; /* 排出フラグをリセット */ } @@ -2334,7 +2341,7 @@ static void SDCARD_Restore_port1(void) /*---------------------------------------------------------------------------* - Name: i_sdmcSelectedNo + Name: sdmcSelectedNo Description: get selected port number. 選択されているポート番号を取得する @@ -2344,7 +2351,7 @@ static void SDCARD_Restore_port1(void) Returns: [15:8]port numbers which supported(サポートされているポート数) [7:0]port number which selected now(選択されているポート番号) *---------------------------------------------------------------------------*/ -static u16 i_sdmcSelectedNo(void) +u16 sdmcSelectedNo(void) { u16 i_sdmcSelect_Value; @@ -2354,7 +2361,7 @@ static u16 i_sdmcSelectedNo(void) } /*---------------------------------------------------------------------------* - Name: i_sdmcSelect + Name: sdmcSelect Description: select port. ポートを選択する @@ -2364,7 +2371,7 @@ static u16 i_sdmcSelectedNo(void) Returns: 0 : success >0 : error *---------------------------------------------------------------------------*/ -static u16 i_sdmcSelect(u16 select) +SDMC_ERR_CODE sdmcSelect(u16 select) { union { diff --git a/build/tests/fatfs/fatfs_sd/ARM7/src/main.c b/build/tests/fatfs/fatfs_sd/ARM7/src/main.c index a897928..95aef28 100644 --- a/build/tests/fatfs/fatfs_sd/ARM7/src/main.c +++ b/build/tests/fatfs/fatfs_sd/ARM7/src/main.c @@ -16,7 +16,7 @@ #include #include -#include +#include /*---------------------------------------------------------------------------* 定数定義 @@ -82,7 +82,7 @@ void TwlSpMain(void) // rtfs_init(); /*SDドライバ初期化*/ - result = sdmcInit( NULL, NULL); + result = sdmcInit( SDMC_USE_DMA_2, NULL, NULL); if( result != 0) { PRINTDEBUG( "sdmcInit : failed\n"); while( 1) {}; @@ -90,38 +90,96 @@ void TwlSpMain(void) PRINTDEBUG( "sdmcInit : success\n"); } - /*SDからブロックリード*/ + /*--- SDからブロックリード ---*/ + result = sdmcSelect( (u16)SDMC_PORT_CARD); + if( result != 0) { + PRINTDEBUG( "sdmcSelect failed.\n"); + }else{ + PRINTDEBUG( "sdmcSelect success.\n"); + } + result = sdmcReadFifo( BlockBuf, 1, 0, NULL, &SdResult); if( result != 0) { - PRINTDEBUG( "sdmcReadFifo failed.\n"); + PRINTDEBUG( "sdmcReadFifo failed.\n"); + }else{ + PRINTDEBUG( "sdmcReadFifo success.\n"); } - PRINTDEBUG( "sdmcReadFifo success.\n"); + /*----------------------------*/ + + /*NANDからブロックリード*/ + result = sdmcSelect( (u16)SDMC_PORT_NAND); + if( result != 0) { + PRINTDEBUG( "sdmcSelect failed.\n"); + }else{ + PRINTDEBUG( "sdmcSelect success.\n"); + } + + result = sdmcReadFifo( BlockBuf2, 1, 0, NULL, &SdResult); + if( result != 0) { + PRINTDEBUG( "sdmcReadFifo failed.\n"); + }else{ + PRINTDEBUG( "sdmcReadFifo success.\n"); + } + /*----------------------------*/ + /*--- SDからブロックリード ---*/ + result = sdmcSelect( (u16)SDMC_PORT_CARD); + if( result != 0) { + PRINTDEBUG( "sdmcSelect failed.\n"); + }else{ + PRINTDEBUG( "sdmcSelect success.\n"); + } + + result = sdmcReadFifo( BlockBuf2, 1, 0, NULL, &SdResult); + if( result != 0) { + PRINTDEBUG( "sdmcReadFifo failed.\n"); + }else{ + PRINTDEBUG( "sdmcReadFifo success.\n"); + } + /*----------------------------*/ + + /*NANDからブロックリード*/ + result = sdmcSelect( (u16)SDMC_PORT_NAND); + if( result != 0) { + PRINTDEBUG( "sdmcSelect failed.\n"); + }else{ + PRINTDEBUG( "sdmcSelect success.\n"); + } + + result = sdmcReadFifo( BlockBuf, 1, 0, NULL, &SdResult); + if( result != 0) { + PRINTDEBUG( "sdmcReadFifo failed.\n"); + }else{ + PRINTDEBUG( "sdmcReadFifo success.\n"); + } + /*----------------------------*/ + + /*SDへブロックライト*/ - MI_CpuFill8( BlockBuf2, 0xA5, 512); +/* MI_CpuFill8( BlockBuf2, 0xA5, 512); result = sdmcWriteFifo( BlockBuf2, 1, 0, NULL, &SdResult); if( result != 0) { PRINTDEBUG( "sdmcWriteFifo failed.\n"); } PRINTDEBUG( "sdmcWriteFifo success.\n"); - +*/ /*SDからブロックリード*/ - result = sdmcReadFifo( BlockBuf2, 1, 0, NULL, &SdResult); +/* result = sdmcReadFifo( BlockBuf2, 1, 0, NULL, &SdResult); if( result != 0) { PRINTDEBUG( "sdmcReadFifo failed.\n"); } PRINTDEBUG( "sdmcReadFifo success.\n"); - +*/ /*SDへブロックライト*/ - result = sdmcWriteFifo( BlockBuf, 1, 0, NULL, &SdResult); +/* result = sdmcWriteFifo( BlockBuf, 1, 0, NULL, &SdResult); if( result != 0) { PRINTDEBUG( "sdmcWriteFifo failed.\n"); } PRINTDEBUG( "sdmcWriteFifo success.\n"); - +*/ /*デバイスドライバの登録*/ /* if( sdmcRtfsAttach( 4) == FALSE) { //sdmcをEドライブにする PRINTDEBUG( "sdmcRtfsAttach failed.\n"); diff --git a/include/twl/devices/rom_sdmc/ARM7/sdmc.h b/include/twl/devices/rom_sdmc/ARM7/sdmc.h index dc74363..ce93780 100644 --- a/include/twl/devices/rom_sdmc/ARM7/sdmc.h +++ b/include/twl/devices/rom_sdmc/ARM7/sdmc.h @@ -11,6 +11,15 @@ extern "C" { #endif +/********************************************* + ポート番号 +*********************************************/ +typedef enum { + SDMC_PORT_CARD = 0x400, + SDMC_PORT_NAND = 0x401 +}SDMC_PORT_NO; + + /********************************************* DMA番号 *********************************************/ @@ -111,6 +120,10 @@ SDMC_ERR_CODE sdmcWriteFifo(void* buf,u32 bufsize,u32 offset,void(*func)(void /*ライトする*/ SDMC_ERR_CODE sdmcWrite(void* buf,u32 bufsize,u32 offset,void(*func)(void),SdmcResultInfo *info); /* テスト用カードライト */ +/*ポート選択*/ +u16 sdmcSelectedNo(void); +SDMC_ERR_CODE sdmcSelect(u16 select); + #ifdef __cplusplus } /* extern "C" */