From a3c0852954db1e6704de0f793a906dbc95c6f3a2 Mon Sep 17 00:00:00 2001 From: Shirait Date: Wed, 6 Jun 2007 07:55:36 +0000 Subject: [PATCH] =?UTF-8?q?SD/NAND=E3=81=A8=E3=81=AE=E3=83=87=E3=83=BC?= =?UTF-8?q?=E3=82=BF=E8=BB=A2=E9=80=81=E3=82=92=E3=83=A6=E3=83=BC=E3=82=B6?= =?UTF-8?q?=E9=96=A2=E6=95=B0=E3=81=A7=E8=A1=8C=E3=81=88=E3=82=8B=E6=89=8B?= =?UTF-8?q?=E6=AE=B5=E3=82=92=E8=BF=BD=E5=8A=A0?= 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@110 4ee2a332-4b2b-5046-8439-1ba90f034370 --- build/libraries/devices/rom_sdmc/ARM7/sdif.c | 2 +- .../libraries/devices/rom_sdmc/ARM7/sdif_ip.h | 2 +- build/libraries/devices/rom_sdmc/ARM7/sdmc.c | 143 +++++++++++++++++- build/tests/fatfs/fatfs_sd/ARM7/src/main.c | 118 ++++++--------- include/twl/devices/rom_sdmc/ARM7/sdmc.h | 22 ++- 5 files changed, 207 insertions(+), 80 deletions(-) diff --git a/build/libraries/devices/rom_sdmc/ARM7/sdif.c b/build/libraries/devices/rom_sdmc/ARM7/sdif.c index 5ee0104..ad54836 100644 --- a/build/libraries/devices/rom_sdmc/ARM7/sdif.c +++ b/build/libraries/devices/rom_sdmc/ARM7/sdif.c @@ -843,7 +843,7 @@ u16 MMCP_BusTest( BOOL readflag) Returns: TRUE : BRE割り込み発生 FALSE : BWE割り込み発生 *---------------------------------------------------------------------------*/ -s16 SD_FPGA_irq(void) +BOOL SD_FPGA_irq(void) { /*--- FIFOを使うとき ---*/ if( SDCARD_UseFifoFlag) { diff --git a/build/libraries/devices/rom_sdmc/ARM7/sdif_ip.h b/build/libraries/devices/rom_sdmc/ARM7/sdif_ip.h index 96493b4..83e2a67 100644 --- a/build/libraries/devices/rom_sdmc/ARM7/sdif_ip.h +++ b/build/libraries/devices/rom_sdmc/ARM7/sdif_ip.h @@ -325,7 +325,7 @@ u16 MMCP_WriteBusWidth(s16 b4bit); u16 MMCP_BusTest( BOOL readflag); -s16 SD_FPGA_irq(void); /* カード転送要求時のFPGAの制御 */ +BOOL SD_FPGA_irq(void); /* カード転送要求時のFPGAの制御 */ void SD_StopTransmission(void); /* カード転送終了をFPGAに通知する。 */ void SD_TransEndFPGA(void); /* カード転送の終了処理(割り込みマスクを戻す) */ u16 SD_CheckStatus(BOOL bRead); /* Normal response command カードステータスのチェック */ diff --git a/build/libraries/devices/rom_sdmc/ARM7/sdmc.c b/build/libraries/devices/rom_sdmc/ARM7/sdmc.c index 0e200c1..e0374bc 100644 --- a/build/libraries/devices/rom_sdmc/ARM7/sdmc.c +++ b/build/libraries/devices/rom_sdmc/ARM7/sdmc.c @@ -160,6 +160,10 @@ u16 SDCARD_WP_TEMPORARY; /* u16* pSDCARD_BufferAddr; /* 保存用データ格納バッファアドレス */ +sdmcTransferFunction SDCARD_USR_TRANSFER_FUNC = NULL; /* ユーザ転送関数 */ +//sdmcTransferFunction CURRENT_TRANSFER_FUNC; /* カレント転送関数 */ + +BOOL SDCARD_DataFlag; /* データフラグ(転送種別) */ u32 ulSDCARD_SectorCount; /* 転送セクタ数 */ u32 ulSDCARD_RestSectorCount; /* 残り転送セクタ数 */ u32 SDCARD_SectorSize; /* セクタサイズ デフォルト 512bytes */ @@ -1005,6 +1009,8 @@ SDMC_ERR_CODE sdmcReadFifo(void* buf,u32 bufsize,u32 offset,void(*func)(void),Sd #endif SDMC_ERR_CODE api_result; //SDCARD関数の返り値 + SDCARD_USR_TRANSFER_FUNC = NULL; //ライブラリ内部関数によるリード + SdMsg.buf = buf; SdMsg.bufsize = bufsize; SdMsg.offset = offset; @@ -1023,6 +1029,41 @@ SDMC_ERR_CODE sdmcReadFifo(void* buf,u32 bufsize,u32 offset,void(*func)(void),Sd return api_result; } +/*---------------------------------------------------------------------------* + Name: sdmcReadFifoDirect + + Description: read from card. + ラッパーのFIFOを使用してカードからの読み出し。 + + Arguments: buf : 読み出したデータを格納するためのバッファのアドレス + bufsize : 読み出しサイズ(セクタ数) + offset : 読み出し開始オフセット(セクタ番号) + info : 実行結果を格納するための構造体へのアドレス + + Returns: 0 : success + > 0 : error + *---------------------------------------------------------------------------*/ +SDMC_ERR_CODE sdmcReadFifoDirect(sdmcTransferFunction usr_func, + u32 bufsize,u32 offset,void(*func)(void),SdmcResultInfo *info) +{ + SDCARDMsg SdMsg; + SDMC_ERR_CODE api_result; //SDCARD関数の返り値 + + SDCARD_USR_TRANSFER_FUNC = usr_func; //User関数による直接リード + + SdMsg.buf = NULL; + SdMsg.bufsize = bufsize; + SdMsg.offset = offset; + SdMsg.func = func; + SdMsg.info = info; + SdMsg.operation = SD_OPERATION_READ_WITH_FIFO; + + api_result = SDCARD_Thread( &SdMsg); + + return api_result; +} + + /*---------------------------------------------------------------------------* Name: SDCARDi_ReadFifo @@ -1057,6 +1098,7 @@ static SDMC_ERR_CODE SDCARDi_ReadFifo(void* buf,u32 bufsize,u32 offset,void(*fun return result; } +#if 0 /*---------------------------------------------------------------------------* Name: sdmcRead @@ -1098,6 +1140,7 @@ SDMC_ERR_CODE sdmcRead(void* buf,u32 bufsize,u32 offset,void(*func)(void),SdmcRe return api_result; } +#endif /*---------------------------------------------------------------------------* Name: SDCARDi_Read @@ -1129,6 +1172,7 @@ static SDMC_ERR_CODE SDCARDi_Read(void* buf,u32 bufsize,u32 offset,void(*func)(v ulSDCARD_RestSectorCount = bufsize; /* 残り転送セクタ数の設定 */ pSDCARD_BufferAddr = buf; /* データ格納バッファのアドレスを設定 */ + SDCARD_DataFlag = TRUE; SDCARD_ATC0_Flag = FALSE; /* 全ATC処理完了フラグクリア */ SDCARD_FPGA_Flag = FALSE; /* FPGA処理完了フラグクリア */ SDCARD_EndFlag = FALSE; /* 転送処理完了フラグクリア */ @@ -1192,6 +1236,23 @@ static SDMC_ERR_CODE SDCARDi_Read(void* buf,u32 bufsize,u32 offset,void(*func)(v return SDCARD_ErrStatus; } + + +/*---------------------------------------------------------------------------* + Name: sdmcSetTransferFunction + + Description: + + Arguments: None + + Returns: None + *---------------------------------------------------------------------------*/ +/* +void sdmcSetTransferFunction( sdmcTransferFunction usr_func) +{ + SDCARD_USR_TRANSFER_FUNC = usr_func; +}*/ + /*---------------------------------------------------------------------------* Name: SDCARD_FPGA_irq @@ -1221,15 +1282,39 @@ static void SDCARD_FPGA_irq(void) TransCount = (u16)(SDCARD_SectorSize/2); /* 転送カウント設定 (16bit転送なのでセクタサイズの半分) */ } } - + + /*-------- ユーザ関数(データ転送、Fifoモード時に有効) --------*/ + if(( SDCARD_DataFlag == TRUE)&&( SDCARD_USR_TRANSFER_FUNC != NULL)&& + ( SDCARD_UseFifoFlag)) { + SDCARD_USR_TRANSFER_FUNC( (void*)SDIF_FI, SDCARD_SectorSize, bRead); + TransCount = 0; + /*転送終了*/ + if( ulSDCARD_RestSectorCount <= 0) { /* 要求セクタ数リード完了したか? */ + if( bRead == FALSE) { + if( SDCARD_UseFifoFlag) { /* FIFOを使用するときは */ + while( (*SDIF_CNT & SDIF_CNT_NEMP)) {}; /* FIFOにデータが残っているうちは終了しない */ + } + } + if(SD_CheckFPGAReg(SD_STOP,SD_STOP_SEC_ENABLE)){ /* SD_SECCNTレジスタがEnableか? */ + if( bRead) { + SD_DisableSeccnt(); /* SD_SECCNTレジスタ無効設定 */ + } + }else{ /* SD_SECCNTレジスタがDisableのとき */ + SD_StopTransmission(); /* カード転送終了をFPGAに通知(CMD12発行) */ + } + } + SDCARD_ATC0_irq(); /* 転送完了後の処理 */ + + }else{ + /*--- SDカードからのリード時 ---*/ if(bRead){ if( sdmc_dma_no != SDMC_NOUSE_DMA) { if( TransCount != 0) { if( SDCARD_UseFifoFlag) { - MI_DmaRecv32( sdmc_dma_no, (void*)SDIF_FI, pSDCARD_BufferAddr, SDCARD_SectorSize);//TransCount*4); + MI_DmaRecv32( sdmc_dma_no, (void*)SDIF_FI, pSDCARD_BufferAddr, SDCARD_SectorSize); }else{ - MI_DmaRecv16( sdmc_dma_no, (void*)SD_BUF0, pSDCARD_BufferAddr, SDCARD_SectorSize);//TransCount*2); + MI_DmaRecv16( sdmc_dma_no, (void*)SD_BUF0, pSDCARD_BufferAddr, SDCARD_SectorSize); } TransCount = 0; /*転送終了*/ @@ -1318,6 +1403,7 @@ static void SDCARD_FPGA_irq(void) } } } + } } } @@ -1620,6 +1706,7 @@ static u16 i_sdmcSendSCR(void) pSDCARD_BufferAddr = SD_SCR; /* データ格納バッファのアドレスを設定 */ /* 転送前の準備処理 */ + SDCARD_DataFlag = FALSE; SDCARD_ATC0_Flag = FALSE; /* 全ATC完了フラグクリア */ SDCARD_FPGA_Flag = FALSE; /* FPGA処理完了フラグクリア */ SDCARD_EndFlag = FALSE; /* 転送処理完了フラグクリア */ @@ -1775,6 +1862,7 @@ static u16 SDCARD_SD_Status(void) pSDCARD_BufferAddr = SD_SDSTATUS; /* データ格納バッファのアドレスを設定 */ /* 転送前の準備処理 */ + SDCARD_DataFlag = FALSE; SDCARD_ATC0_Flag = FALSE; /* 全ATC完了フラグクリア */ SDCARD_FPGA_Flag = FALSE; /* FPGA処理完了フラグクリア */ SDCARD_EndFlag = FALSE; /* 転送処理完了フラグクリア */ @@ -1849,6 +1937,7 @@ int MMCP_SetBusWidth( BOOL b4bit) pSDCARD_info = NULL; ulSDCARD_RestSectorCount = ulSDCARD_SectorCount = 1; pSDCARD_BufferAddr = &TestData; /* データ格納バッファのアドレスを設定 */ + SDCARD_DataFlag = FALSE; SDCARD_ATC0_Flag = FALSE; /* 全ATC完了フラグクリア */ SDCARD_FPGA_Flag = FALSE; /* FPGA処理完了フラグクリア */ SDCARD_EndFlag = FALSE; /* 転送処理完了フラグクリア */ @@ -1875,6 +1964,7 @@ int MMCP_SetBusWidth( BOOL b4bit) /**/ ulSDCARD_RestSectorCount = ulSDCARD_SectorCount = 1;/* 残りセクタサイズ、セクタカウントに1を設定 */ pSDCARD_BufferAddr = &Resid; /* データ格納バッファのアドレスを設定 */ + SDCARD_DataFlag = FALSE; SDCARD_ATC0_Flag = FALSE; /* 全ATC完了フラグクリア */ SDCARD_FPGA_Flag = FALSE; /* FPGA処理完了フラグクリア */ SDCARD_EndFlag = FALSE; /* 転送処理完了フラグクリア */ @@ -1934,8 +2024,8 @@ static u16 i_sdmcCheckWP(void) return SDCARD_ErrStatus; } else if (SD_port_number == SDCARD_PORT1) /* ポート1のとき */ - { - if(!(SD_CheckFPGAReg(EXT_WP,EXT_WP_PORT1))) { //WPフラグが立っていないか? + { /*TWLのポート1はライトプロテクトビットが常に0(プロテクト状態)なので反転して評価*/ + if((SD_CheckFPGAReg(EXT_WP,EXT_WP_PORT1))) { //WPフラグが立っていないか? SDCARD_ErrStatus |= SDMC_ERR_WP; //エラーフラグのWPエラービットを立てる }else{ //WPフラグが立っていたとき SDCARD_ErrStatus &= ~SDMC_ERR_WP; //エラーフラグのWPエラービットを落とす @@ -1969,6 +2059,8 @@ SDMC_ERR_CODE sdmcWriteFifo(void* buf,u32 bufsize,u32 offset,void(*func)(),SdmcR #endif SDMC_ERR_CODE api_result; + SDCARD_USR_TRANSFER_FUNC = NULL; //ライブラリ内部関数によるリード + SdMsg.buf = buf; SdMsg.bufsize = bufsize; SdMsg.offset = offset; @@ -1987,6 +2079,42 @@ SDMC_ERR_CODE sdmcWriteFifo(void* buf,u32 bufsize,u32 offset,void(*func)(),SdmcR return api_result; } +/*---------------------------------------------------------------------------* + Name: sdmcWriteFifoDirect + + Description: write to card. + ラッパーのFIFOを使用してカードへの書き込み。 + + Arguments: buf : 書き込みデータが格納されているバッファのアドレス + bufsize : 書き込むサイズ(セクタ数) + offset : 書き込み開始オフセット(セクタ番号) + info : 実行結果を格納するための構造体へのアドレス + + Returns: 0 : success + > 0 : error + *---------------------------------------------------------------------------*/ +SDMC_ERR_CODE sdmcWriteFifoDirect(sdmcTransferFunction usr_func, + u32 bufsize,u32 offset,void(*func)(),SdmcResultInfo *info) +{ + SDCARDMsg SdMsg; + OSMessage recv_dat; + SDMC_ERR_CODE api_result; + + SDCARD_USR_TRANSFER_FUNC = usr_func; //User関数による直接リード + + SdMsg.buf = NULL; + SdMsg.bufsize = bufsize; + SdMsg.offset = offset; + SdMsg.func = func; + SdMsg.info = info; + SdMsg.operation = SD_OPERATION_WRITE_WITH_FIFO; + + api_result = SDCARD_Thread( &SdMsg); + + return api_result; +} + + /*---------------------------------------------------------------------------* Name: SDCARDi_WriteFifo @@ -2020,7 +2148,7 @@ static SDMC_ERR_CODE SDCARDi_WriteFifo(void* buf,u32 bufsize,u32 offset,void(*fu return result; } - +#if 0 /*---------------------------------------------------------------------------* Name: sdmcWrite @@ -2062,6 +2190,7 @@ SDMC_ERR_CODE sdmcWrite(void* buf,u32 bufsize,u32 offset,void(*func)(),SdmcResul return api_result; } +#endif /*---------------------------------------------------------------------------* Name: SDCARDi_Write @@ -2102,6 +2231,7 @@ static SDMC_ERR_CODE SDCARDi_Write(void* buf,u32 bufsize,u32 offset,void(*func)( ulSDCARD_RestSectorCount = ulSDCARD_SectorCount = bufsize; pSDCARD_BufferAddr = buf; /* データ格納バッファのアドレスを設定 */ + SDCARD_DataFlag = TRUE; SDCARD_ATC0_Flag = FALSE; /* 全ATC完了フラグクリア */ SDCARD_FPGA_Flag = FALSE; /* FPGA処理完了フラグクリア */ SDCARD_EndFlag = FALSE; /* 転送処理完了フラグクリア */ @@ -2224,6 +2354,7 @@ static u16 i_sdmcGetResid(u32 *pResid) ulSDCARD_RestSectorCount = ulSDCARD_SectorCount = 1;/* 残りセクタサイズ、セクタカウントに1を設定 */ pSDCARD_BufferAddr = Resid; /* データ格納バッファのアドレスを設定 */ + SDCARD_DataFlag = FALSE; SDCARD_ATC0_Flag = FALSE; /* 全ATC完了フラグクリア */ SDCARD_FPGA_Flag = FALSE; /* FPGA処理完了フラグクリア */ SDCARD_EndFlag = FALSE; /* 転送処理完了フラグクリア */ diff --git a/build/tests/fatfs/fatfs_sd/ARM7/src/main.c b/build/tests/fatfs/fatfs_sd/ARM7/src/main.c index 95aef28..b9de709 100644 --- a/build/tests/fatfs/fatfs_sd/ARM7/src/main.c +++ b/build/tests/fatfs/fatfs_sd/ARM7/src/main.c @@ -32,9 +32,28 @@ static void VBlankIntr(void); /*---------------------------------------------------------------------------* *---------------------------------------------------------------------------*/ -u32 BlockBuf[512/4]; -u32 BlockBuf2[512/4]; +u32 BlockBuf[(512*3)/4]; +u32 BlockBuf2[(512*3)/4]; +/*バッファオフセット*/ +static u32 my_buf_offset = 0; + +/*ユーザ転送関数*/ +void MY_SdTransfer( void* sd_adr, u32 size, BOOL read_flag) +{ + if( read_flag) { //リード + MI_DmaRecv32( 2, sd_adr, (void*)((u32)BlockBuf2 + my_buf_offset), size); + }else{ //ライト + MI_DmaSend32( 2, (void*)((u32)BlockBuf + my_buf_offset), sd_adr, size); + } + my_buf_offset += size; +} + +/*バッファオフセットのリセット関数*/ +void MY_SdTransferRewind( void) +{ + my_buf_offset = 0; +} /*---------------------------------------------------------------------------* Name: TwlSpMain @@ -80,9 +99,12 @@ void TwlSpMain(void) /**/ PRINTDEBUG("Sample program starts.\n"); // rtfs_init(); + + MI_DmaFill32( 2, BlockBuf, 0x55AA55AA, 512*3); + MI_DmaFill32( 2, BlockBuf2, 0x00FF00FF, 512*3); /*SDドライバ初期化*/ - result = sdmcInit( SDMC_USE_DMA_2, NULL, NULL); + result = sdmcInit( SDMC_NOUSE_DMA, NULL, NULL); if( result != 0) { PRINTDEBUG( "sdmcInit : failed\n"); while( 1) {}; @@ -90,7 +112,8 @@ void TwlSpMain(void) PRINTDEBUG( "sdmcInit : success\n"); } - /*--- SDからブロックリード ---*/ +#if 0 + /*--- SDへブロックライト/リード ---*/ result = sdmcSelect( (u16)SDMC_PORT_CARD); if( result != 0) { PRINTDEBUG( "sdmcSelect failed.\n"); @@ -98,15 +121,22 @@ void TwlSpMain(void) PRINTDEBUG( "sdmcSelect success.\n"); } - result = sdmcReadFifo( BlockBuf, 1, 0, NULL, &SdResult); + result = sdmcWriteFifo( BlockBuf, 3, 10, NULL, &SdResult); + if( result != 0) { + PRINTDEBUG( "sdmcWriteFifo failed.\n"); + }else{ + PRINTDEBUG( "sdmcWriteFifo success.\n"); + } + + result = sdmcReadFifo( BlockBuf2, 3, 10, NULL, &SdResult); if( result != 0) { PRINTDEBUG( "sdmcReadFifo failed.\n"); }else{ PRINTDEBUG( "sdmcReadFifo success.\n"); } /*----------------------------*/ - - /*NANDからブロックリード*/ +#else + /*NANDからブロックライト/リード*/ result = sdmcSelect( (u16)SDMC_PORT_NAND); if( result != 0) { PRINTDEBUG( "sdmcSelect failed.\n"); @@ -114,72 +144,24 @@ void TwlSpMain(void) PRINTDEBUG( "sdmcSelect success.\n"); } - result = sdmcReadFifo( BlockBuf2, 1, 0, NULL, &SdResult); + MY_SdTransferRewind(); + result = sdmcWriteFifoDirect( (sdmcTransferFunction)&MY_SdTransfer, 3, 10, NULL, &SdResult); if( result != 0) { - PRINTDEBUG( "sdmcReadFifo failed.\n"); + PRINTDEBUG( "sdmcWriteFifoDirect failed.\n"); }else{ - PRINTDEBUG( "sdmcReadFifo success.\n"); + PRINTDEBUG( "sdmcWriteFifoDirect success.\n"); + } + + MY_SdTransferRewind(); + result = sdmcReadFifoDirect( (sdmcTransferFunction)&MY_SdTransfer, 3, 10, NULL, &SdResult); + if( result != 0) { + PRINTDEBUG( "sdmcReadFifoDirect failed.\n"); + }else{ + PRINTDEBUG( "sdmcReadFifoDirect 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); - 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); - if( result != 0) { - PRINTDEBUG( "sdmcReadFifo failed.\n"); - } - PRINTDEBUG( "sdmcReadFifo success.\n"); -*/ - - /*SDへブロックライト*/ -/* result = sdmcWriteFifo( BlockBuf, 1, 0, NULL, &SdResult); - if( result != 0) { - PRINTDEBUG( "sdmcWriteFifo failed.\n"); - } - PRINTDEBUG( "sdmcWriteFifo success.\n"); -*/ +#endif /*デバイスドライバの登録*/ /* 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 ce93780..5ccd079 100644 --- a/include/twl/devices/rom_sdmc/ARM7/sdmc.h +++ b/include/twl/devices/rom_sdmc/ARM7/sdmc.h @@ -101,6 +101,14 @@ BOOL sdmcRtfsAttach( int driveno); BOOL sdmcCheckMedia( void); +/********************************************* + データ転送関数の登録関連 +*********************************************/ +typedef void (*sdmcTransferFunction)( void* sd_adr, u32 size, BOOL read_flag); + +//void sdmcSetTransferFunction( sdmcTransferFunction usr_func); + + /********************************************* 基本API *********************************************/ @@ -111,14 +119,20 @@ SDMC_ERR_CODE sdmcGetStatus(u16 *status); /* u32 sdmcGetCardSize(void); /* カード全サイズの取得 */ /*SD I/FのFIFOを使ってリードする(高速)*/ -SDMC_ERR_CODE sdmcReadFifo(void* buf,u32 bufsize,u32 offset,void(*func)(void),SdmcResultInfo *info);/* テスト用カードリード */ +SDMC_ERR_CODE sdmcReadFifo(void* buf,u32 bufsize,u32 offset,void(*func)(void),SdmcResultInfo *info); +SDMC_ERR_CODE sdmcReadFifoDirect( sdmcTransferFunction usr_func, + u32 bufsize,u32 offset,void(*func)(void),SdmcResultInfo *info); + + /*リードする*/ -SDMC_ERR_CODE sdmcRead(void* buf,u32 bufsize,u32 offset,void(*func)(void),SdmcResultInfo *info); /* テスト用カードリード */ +//SDMC_ERR_CODE sdmcRead(void* buf,u32 bufsize,u32 offset,void(*func)(void),SdmcResultInfo *info); /*SD I/FのFIFOを使ってライトする(高速)*/ -SDMC_ERR_CODE sdmcWriteFifo(void* buf,u32 bufsize,u32 offset,void(*func)(void),SdmcResultInfo *info);/* テスト用カードライト */ +SDMC_ERR_CODE sdmcWriteFifo(void* buf,u32 bufsize,u32 offset,void(*func)(void),SdmcResultInfo *info); +SDMC_ERR_CODE sdmcWriteFifoDirect(sdmcTransferFunction usr_func, + u32 bufsize,u32 offset,void(*func)(void),SdmcResultInfo *info); /*ライトする*/ -SDMC_ERR_CODE sdmcWrite(void* buf,u32 bufsize,u32 offset,void(*func)(void),SdmcResultInfo *info); /* テスト用カードライト */ +//SDMC_ERR_CODE sdmcWrite(void* buf,u32 bufsize,u32 offset,void(*func)(void),SdmcResultInfo *info); /*ポート選択*/ u16 sdmcSelectedNo(void);