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エラー割り込み処理 */
/*ポート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
{

View File

@ -16,7 +16,7 @@
#include <twl_sp.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();
/*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");

View File

@ -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" */