diff --git a/build/systemMenu_tools/NandInitializerRed/ARM7.TWL/Makefile b/build/systemMenu_tools/NandInitializerRed/ARM7.TWL/Makefile index b8692866..ed4c0769 100644 --- a/build/systemMenu_tools/NandInitializerRed/ARM7.TWL/Makefile +++ b/build/systemMenu_tools/NandInitializerRed/ARM7.TWL/Makefile @@ -57,7 +57,10 @@ LINCLUDES += $(ROOT)/build/libraries/spi/ARM7/include \ $(TWL_IPL_RED_ROOT)/include \ ../common/include \ $(ROOT)/build/libraries/init/common/include \ - ../../common/ARM7/include + ../../common/ARM7/include \ + $(ROOT)/build/libraries/fatfs/ARM7.TWL/include \ + $(ROOT)/build/libraries/fatfs/ARM7.TWL/include/fatfs \ + $(ROOT)/build/libraries/fatfs/ARM7.TWL/include/twl/fatfs/ARM7 SRCDIR += ../../common/ARM7/src diff --git a/build/systemMenu_tools/NandInitializerRed/ARM7.TWL/src/kami_pxi.c b/build/systemMenu_tools/NandInitializerRed/ARM7.TWL/src/kami_pxi.c index a43177e1..9ea1fc44 100644 --- a/build/systemMenu_tools/NandInitializerRed/ARM7.TWL/src/kami_pxi.c +++ b/build/systemMenu_tools/NandInitializerRed/ARM7.TWL/src/kami_pxi.c @@ -27,14 +27,13 @@ #include #include #include +#include -typedef unsigned char byte; /* Don't change */ -typedef unsigned short word; /* Don't change */ -typedef unsigned long dword; /* Don't change */ #define BOOLEAN int extern BOOL FATFSi_nandRtfsIo( int driveno, dword block, void* buffer, word count, BOOLEAN reading); extern BOOL sdmcFormatNandLog( BOOL verify_flag); +extern void sdmcGetCID( SDMC_PORT_NO port, u32* dest); /*---------------------------------------------------------------------------* 定数定義 @@ -134,6 +133,7 @@ static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err) case KAMI_CDC_GO_DSMODE: case KAMI_CLEAR_NAND_ERRORLOG: case KAMI_GET_CAMERA_MODULE_TYPE: + case KAMI_GET_NAND_CID: if (!OS_SendMessage(&kamiWork.msgQ, NULL, OS_MESSAGE_NOBLOCK)) { KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_FATAL_ERROR); @@ -340,6 +340,14 @@ static void KamiThread(void *arg) } break; + case KAMI_GET_NAND_CID: + { + u8 buffer[16]; + sdmcGetCID( SDMC_PORT_NAND, (u32*)buffer); + KamiReturnResultEx(kamiWork.command, KAMI_PXI_RESULT_SUCCESS, sizeof(buffer), (u8*)buffer ); + } + break; + default: KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_INVALID_COMMAND); } diff --git a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/include/kami_pxi.h b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/include/kami_pxi.h index d6ac9470..6d7d9db0 100644 --- a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/include/kami_pxi.h +++ b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/include/kami_pxi.h @@ -68,6 +68,7 @@ KAMIResult kamiCDC_GoDsMode( void ); KAMIResult kamiClearNandErrorLog( void ); KAMIResult kamiGetCameraModuleTypesAsync( CameraModuleTypes *pTypes, KAMICallback callback, void* arg ); KAMIResult kamiGetCameraModuleTypes( CameraModuleTypes *pTypes ); +KAMIResult kamiGetNandCID( void* buffer ); // (重要) // ARM7が読み書きするためリード前はInvalidate、ライト前はフラッシュしてください。 diff --git a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/kami_pxi.c b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/kami_pxi.c index 9e913d45..9d4f7b3e 100644 --- a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/kami_pxi.c +++ b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/kami_pxi.c @@ -173,6 +173,8 @@ KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read) u8 data[12]; int i; + MI_CpuClear8( data, sizeof(data)); + // ロック enabled = OS_DisableInterrupts(); if (kamiWork.lock) @@ -192,7 +194,7 @@ KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read) KAMI_PACK_U32(&data[4], &buffer); KAMI_PACK_U32(&data[8], &count); - if (KamiSendPxiCommand(KAMI_NAND_IO, 12, (u8)is_read)) + if (KamiSendPxiCommand(KAMI_NAND_IO, 13, (u8)is_read)) { for (i = 0; i < 12; i+=3) { @@ -217,9 +219,11 @@ KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read) KAMIResult kamiMcuWriteFirm(void* buffer ) { OSIntrMode enabled; - u8 data[4]; + u8 data[4+2]; // 3の倍数 int i; + MI_CpuClear8( data, sizeof(data)); + // ロック enabled = OS_DisableInterrupts(); if (kamiWork.lock) @@ -236,7 +240,7 @@ KAMIResult kamiMcuWriteFirm(void* buffer ) // データ作成 KAMI_PACK_U32(&data[0], &buffer); - if (KamiSendPxiCommand(KAMI_MCU_WRITE_FIRM, 4, (u8)0)) + if (KamiSendPxiCommand(KAMI_MCU_WRITE_FIRM, 5, (u8)0)) { for (i = 0; i < 4; i+=3) { @@ -265,6 +269,8 @@ KAMIResult kamiMcuIo(u32 reg_no, void* buffer, u32 value, BOOL is_read) u8 data[12]; int i; + MI_CpuClear8( data, sizeof(data)); + // ロック enabled = OS_DisableInterrupts(); if (kamiWork.lock) @@ -290,7 +296,7 @@ KAMIResult kamiMcuIo(u32 reg_no, void* buffer, u32 value, BOOL is_read) KAMI_PACK_U32(&data[0], ®_no); KAMI_PACK_U32(&data[4], &value); - if (KamiSendPxiCommand(KAMI_MCU_IO, 12, (u8)is_read)) + if (KamiSendPxiCommand(KAMI_MCU_IO, 13, (u8)is_read)) { for (i = 0; i < 12; i+=3) { @@ -319,6 +325,8 @@ KAMIResult kamiARM7Io(u32 addr, u32* buffer, u32 value, BOOL is_read) u8 data[12]; int i; + MI_CpuClear8( data, sizeof(data)); + // ロック enabled = OS_DisableInterrupts(); if (kamiWork.lock) @@ -344,7 +352,7 @@ KAMIResult kamiARM7Io(u32 addr, u32* buffer, u32 value, BOOL is_read) KAMI_PACK_U32(&data[0], &addr); KAMI_PACK_U32(&data[4], &value); - if (KamiSendPxiCommand(KAMI_ARM7_IO, 12, (u8)is_read)) + if (KamiSendPxiCommand(KAMI_ARM7_IO, 13, (u8)is_read)) { for (i = 0; i < 12; i+=3) { @@ -506,6 +514,46 @@ KAMIResult kamiGetCameraModuleTypes( CameraModuleTypes *pTypes ) return KAMI_RESULT_SEND_ERROR; } +/*---------------------------------------------------------------------------* + Name: kamiGetNandCID + + Description: NANDのCIDを取得します。 + + Arguments: buffer : 16バイトバッファ + + Returns: + *---------------------------------------------------------------------------*/ + +KAMIResult kamiGetNandCID(void* buffer ) +{ + OSIntrMode enabled; + u8 data[4+2]; // 3の倍数 + + MI_CpuClear8( data, sizeof(data)); + + // ロック + enabled = OS_DisableInterrupts(); + if (kamiWork.lock) + { + (void)OS_RestoreInterrupts(enabled); + return KAMI_RESULT_BUSY; + } + kamiWork.lock = TRUE; + (void)OS_RestoreInterrupts(enabled); + + kamiWork.callback = NULL; + kamiWork.arg = 0; + kamiWork.data = (u8*)buffer; + + if (KamiSendPxiCommand(KAMI_GET_NAND_CID, 0, 0)) + { + KamiWaitBusy(); + return (KAMIResult)kamiWork.result; + } + + return KAMI_RESULT_SEND_ERROR; +} + /*---------------------------------------------------------------------------* PXI関連 *---------------------------------------------------------------------------*/ diff --git a/build/systemMenu_tools/NandInitializerRed/common/include/fifo.h b/build/systemMenu_tools/NandInitializerRed/common/include/fifo.h index bbc1b82e..9873e242 100644 --- a/build/systemMenu_tools/NandInitializerRed/common/include/fifo.h +++ b/build/systemMenu_tools/NandInitializerRed/common/include/fifo.h @@ -68,7 +68,8 @@ typedef enum KamiCommand KAMI_ARM7_IO, KAMI_CDC_GO_DSMODE, KAMI_CLEAR_NAND_ERRORLOG, - KAMI_GET_CAMERA_MODULE_TYPE + KAMI_GET_CAMERA_MODULE_TYPE, + KAMI_GET_NAND_CID } KamiCommand;