diff --git a/build/libraries/devices/sdmc/ARM7/drnand.c b/build/libraries/devices/sdmc/ARM7/drnand.c index a64d652..e13e38b 100644 --- a/build/libraries/devices/sdmc/ARM7/drnand.c +++ b/build/libraries/devices/sdmc/ARM7/drnand.c @@ -61,9 +61,9 @@ static int nand_calculated_fat_params = 0; /*---------------------------------------------------------------------------* static関数 *---------------------------------------------------------------------------*/ -static void sdi_get_CHS_params( void); +static BOOL sdi_get_CHS_params( void); static u32 sdi_get_ceil( u32 cval, u32 mval); -static void sdi_get_nom( u32 min_nom); +static BOOL sdi_get_nom( u32 min_nom); static void sdi_get_fatparams( void); static void sdi_build_partition_table( void); @@ -225,9 +225,13 @@ int nandRtfsCtrl( int driveno, int opcode, void* pargs) if( nand_calculated_fat_params == 0) { i_sdmcCalcSize(); //TODO:sdmc_current_specを構造体に入れること - sdi_get_CHS_params(); //最初に呼ぶこと + if( sdi_get_CHS_params() == FALSE) { //最初に呼ぶこと + return( -1); + } sdi_get_fatparams(); - sdi_get_nom( NAND_RAW_SECTORS); + if( sdi_get_nom( NAND_RAW_SECTORS) == FALSE) { + return( -1); + } nand_calculated_fat_params = 1; } @@ -386,7 +390,7 @@ BOOL nandRtfsAttach( int driveno, int partition_no) /*SD File System Specification(仕様書)に基づいた値を出す*/ -static void sdi_get_CHS_params( void) +static BOOL sdi_get_CHS_params( void) { u16 i; int mbytes; @@ -405,8 +409,7 @@ static void sdi_get_CHS_params( void) } /*容量破綻チェック*/ if( cumulative_capacity >= sdmc_current_spec.memory_capacity) { - OS_TPrintf( "INVALID PARAMETER ERROR!\n"); - while( 1) {}; + return( FALSE); } /*最終パーティションは残りのセクタ全部*/ @@ -516,6 +519,7 @@ static void sdi_get_CHS_params( void) i, NandFatSpec[i].memory_capacity, NandFatSpec[i].adjusted_memory_capacity); } + return( TRUE); } @@ -527,7 +531,7 @@ static u32 sdi_get_ceil( u32 cval, u32 mval) /*マスターブートセクタのセクタ数を返す*/ -static void sdi_get_nom( u32 MIN_NOM) +static BOOL sdi_get_nom( u32 MIN_NOM) { u32 RSC[4]; u32 TS[4]; @@ -606,6 +610,9 @@ static void sdi_get_nom( u32 MIN_NOM) NandFatSpec[i].NOM += NandFatSpec[i].BU; } do { + if( NandFatSpec[i].NOM >= sdmc_current_spec.memory_capacity) { + return( FALSE); + } MAX = ((TS[i] - NandFatSpec[i].NOM - NandFatSpec[i].SSA) / SC) + 1; SFdash = sdi_get_ceil( (2+(MAX-1)) * NandFatSpec[i].FATBITS, SS*8); if( SFdash > NandFatSpec[i].SF) { @@ -630,7 +637,7 @@ static void sdi_get_nom( u32 MIN_NOM) i, NandFatSpec[i].NOM, NandFatSpec[i].SSA, NandFatSpec[i].begin_sect); } - return; + return( TRUE); } /*FATのビット数を返す*/ diff --git a/build/tests/fatfs/nand_formatter_kmc/ARM7/src/main.c b/build/tests/fatfs/nand_formatter_kmc/ARM7/src/main.c index 9095fe2..76887df 100644 --- a/build/tests/fatfs/nand_formatter_kmc/ARM7/src/main.c +++ b/build/tests/fatfs/nand_formatter_kmc/ARM7/src/main.c @@ -305,9 +305,9 @@ NAND_FLASH_FORMAT_START: /*--- パーティション構成をセクタ単位にしてライブラリに要求 ---*/ - for( i=0; i<4; i++) { + for( i=0; i<5; i++) { partition_MB_size[i] *= ((1024 * 1024) / 512); - PRINTDEBUG( "p%d : %d\n", i, partition_MB_size[i]); +// PRINTDEBUG( "p%d : %d\n", i, partition_MB_size[i]); } nandSetFormatRequest( nand_fat_partition_num, partition_MB_size); /*------------------------------------------------------------*/ @@ -338,7 +338,7 @@ NAND_FLASH_FORMAT_START: /*--- MBR書き込み、パーティション0フォーマット ---*/ if( !rtfs_pc_get_media_parms( (byte*)"F:", &geometry)) { - PRINTDEBUG( "pc_get_media_parms failed\n"); + PRINTDEBUG( "Invalid parameter. (size over)\n"); goto NAND_FLASH_FORMAT_END; }