SDおよびNANDの2スロットに対応

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/twl_wrapsdk/trunk@104 4ee2a332-4b2b-5046-8439-1ba90f034370
This commit is contained in:
Shirait 2007-06-05 10:30:55 +00:00
parent 5d2e961a86
commit 538057553a
3 changed files with 96 additions and 18 deletions

View File

@ -123,8 +123,8 @@ static void SDCARD_ATC0_irq(void); /* ATC0
static void SYSFPGA_irq(void); /* SYSFPGAエラー割り込み処理 */ static void SYSFPGA_irq(void); /* SYSFPGAエラー割り込み処理 */
/*ポート1は無線固定なのでポート選択関数は公開しない*/ /*ポート1は無線固定なのでポート選択関数は公開しない*/
static u16 i_sdmcSelectedNo(void); /* カードポートの選択 */ //u16 sdmcSelectedNo(void); /* カードポートの選択 */
static u16 i_sdmcSelect(u16 select); /* 現在のカードポート番号のチェック */ //u16 sdmcSelect(u16 select); /* 現在のカードポート番号のチェック */
@ -875,7 +875,14 @@ PRINTDEBUG( "%d\n", __LINE__);
SDCARD_ErrStatus = SDMC_NORMAL; /* エラーステータスをクリア */ SDCARD_ErrStatus = SDMC_NORMAL; /* エラーステータスをクリア */
SDCARD_OutFlag = TRUE; /* 排出フラグをセット */ SDCARD_OutFlag = TRUE; /* 排出フラグをセット */
}else{ }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; /* 排出フラグをリセット */ SDCARD_OutFlag = FALSE; /* 排出フラグをリセット */
} }
@ -2334,7 +2341,7 @@ static void SDCARD_Restore_port1(void)
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
Name: i_sdmcSelectedNo Name: sdmcSelectedNo
Description: get selected port number. Description: get selected port number.
@ -2344,7 +2351,7 @@ static void SDCARD_Restore_port1(void)
Returns: [15:8]port numbers which supported Returns: [15:8]port numbers which supported
[7:0]port number which selected now [7:0]port number which selected now
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
static u16 i_sdmcSelectedNo(void) u16 sdmcSelectedNo(void)
{ {
u16 i_sdmcSelect_Value; u16 i_sdmcSelect_Value;
@ -2354,7 +2361,7 @@ static u16 i_sdmcSelectedNo(void)
} }
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
Name: i_sdmcSelect Name: sdmcSelect
Description: select port. Description: select port.
@ -2364,7 +2371,7 @@ static u16 i_sdmcSelectedNo(void)
Returns: 0 : success Returns: 0 : success
>0 : error >0 : error
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
static u16 i_sdmcSelect(u16 select) SDMC_ERR_CODE sdmcSelect(u16 select)
{ {
union union
{ {

View File

@ -16,7 +16,7 @@
#include <twl_sp.h> #include <twl_sp.h>
#include <twl/fatfs/ARM7/rtfs.h> #include <twl/fatfs/ARM7/rtfs.h>
#include <twl/devices/sdmc/ARM7/sdmc.h> #include <twl/devices/rom_sdmc/ARM7/sdmc.h>
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
@ -82,7 +82,7 @@ void TwlSpMain(void)
// rtfs_init(); // rtfs_init();
/*SDドライバ初期化*/ /*SDドライバ初期化*/
result = sdmcInit( NULL, NULL); result = sdmcInit( SDMC_USE_DMA_2, NULL, NULL);
if( result != 0) { if( result != 0) {
PRINTDEBUG( "sdmcInit : failed\n"); PRINTDEBUG( "sdmcInit : failed\n");
while( 1) {}; while( 1) {};
@ -90,38 +90,96 @@ void TwlSpMain(void)
PRINTDEBUG( "sdmcInit : success\n"); 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); result = sdmcReadFifo( BlockBuf, 1, 0, NULL, &SdResult);
if( result != 0) { 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へブロックライト*/ /*SDへブロックライト*/
MI_CpuFill8( BlockBuf2, 0xA5, 512); /* MI_CpuFill8( BlockBuf2, 0xA5, 512);
result = sdmcWriteFifo( BlockBuf2, 1, 0, NULL, &SdResult); result = sdmcWriteFifo( BlockBuf2, 1, 0, NULL, &SdResult);
if( result != 0) { if( result != 0) {
PRINTDEBUG( "sdmcWriteFifo failed.\n"); PRINTDEBUG( "sdmcWriteFifo failed.\n");
} }
PRINTDEBUG( "sdmcWriteFifo success.\n"); PRINTDEBUG( "sdmcWriteFifo success.\n");
*/
/*SDからブロックリード*/ /*SDからブロックリード*/
result = sdmcReadFifo( BlockBuf2, 1, 0, NULL, &SdResult); /* result = sdmcReadFifo( BlockBuf2, 1, 0, NULL, &SdResult);
if( result != 0) { if( result != 0) {
PRINTDEBUG( "sdmcReadFifo failed.\n"); PRINTDEBUG( "sdmcReadFifo failed.\n");
} }
PRINTDEBUG( "sdmcReadFifo success.\n"); PRINTDEBUG( "sdmcReadFifo success.\n");
*/
/*SDへブロックライト*/ /*SDへブロックライト*/
result = sdmcWriteFifo( BlockBuf, 1, 0, NULL, &SdResult); /* result = sdmcWriteFifo( BlockBuf, 1, 0, NULL, &SdResult);
if( result != 0) { if( result != 0) {
PRINTDEBUG( "sdmcWriteFifo failed.\n"); PRINTDEBUG( "sdmcWriteFifo failed.\n");
} }
PRINTDEBUG( "sdmcWriteFifo success.\n"); PRINTDEBUG( "sdmcWriteFifo success.\n");
*/
/*デバイスドライバの登録*/ /*デバイスドライバの登録*/
/* if( sdmcRtfsAttach( 4) == FALSE) { //sdmcをEドライブにする /* if( sdmcRtfsAttach( 4) == FALSE) { //sdmcをEドライブにする
PRINTDEBUG( "sdmcRtfsAttach failed.\n"); PRINTDEBUG( "sdmcRtfsAttach failed.\n");

View File

@ -11,6 +11,15 @@ extern "C" {
#endif #endif
/*********************************************
*********************************************/
typedef enum {
SDMC_PORT_CARD = 0x400,
SDMC_PORT_NAND = 0x401
}SDMC_PORT_NO;
/********************************************* /*********************************************
DMA番号 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); /* テスト用カードライト */ 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 #ifdef __cplusplus
} /* extern "C" */ } /* extern "C" */