📄 pccard_test.cpp
字号:
#include <stdio.h>
#include "console.h"
#include "system.h"
#include "etc.h"
#include "pccard.h"
#include "cf.h"
static PCCARD oPccard;
#define CODEC_MEM_ST 0x31000000
U32 SelectMode(void)
{
printf("\nWhich mode do you want test? \n");
printf(" 0:Memory mode[D], 1:IO mode1, 2 :IO mode1, 3 :IO mode1\n");
return (U32)GetIntNum();
}
void PrintCIS(void)
{
U32 cisEnd=0;
U8 str[16];
U8 c;
U32 i;
oPccard.OpenMedia(0); // memory mode
printf("[Card Information Structure.]\n");
// just test for attribute region
for (i=0;i<6;i++) //0x01, 04, DF, 4A, 01, FF
{
oPccard.GetAttribData(i*2, c);
printf(" at_addr : 0x%x, at_data : 0x%x\n", i*2, c);
}
//search the end of CIS
while (1)
{
oPccard.GetAttribData((cisEnd)*2, c); // id
if (c==0xff) //0xff= termination tuple
break;
cisEnd++;
oPccard.GetAttribData((cisEnd)*2, c); // next tuple pointer
cisEnd += c+1;
}
printf("cisEnd=0~%x\n",cisEnd);
for (i=0; i<=cisEnd*2; i+=2)
{
oPccard.GetAttribData(i, c);
str[(i%0x20)/2]=c;
printf("%2x,",c);
if ((i%0x20)>=0x1e)
{
printf("//");
for (U32 j=0; j<0x10; j++)
if (str[j]>=' ' && str[j]<=127)
printf("%c",str[j]);
else
printf(".");
printf("\n");
}
}
printf("\n");
oPccard.CloseMedia();
}
void TestWriteRead_PcCard(void)
{
U32 uWriteBuf = CODEC_MEM_ST;
U32 uReadBuf = CODEC_MEM_ST + 0x400000;
U32 deviceLba;
U32 uBlockCount;
U32 mode;
mode = SelectMode();
oPccard.OpenMedia(mode);
printf("\nInput device sector address\n");
deviceLba = (U32)GetIntNum();
printf("Input sector count\n");
uBlockCount = (U32)GetIntNum();
printf("Fill & Clear buffer!!\n");
for (U32 i=0; i<uBlockCount*512; i++){
Outp8(uWriteBuf+i, (i+3)%256);
Outp8(uReadBuf+i, 0);
}
printf("Press Enter \n");
getchar();
oPccard.WriteBlocks(deviceLba, uBlockCount, uWriteBuf);
oPccard.ReadBlocks(deviceLba, uBlockCount, uReadBuf);
if (Compare32(uWriteBuf, uReadBuf, uBlockCount*128) == false)
{
printf("Error detected.. W:0x%x, R:0x%x\n", *(U32 *)(uWriteBuf+512), *(U32 *)(uReadBuf+512));
Dump32(uReadBuf, uBlockCount*128);
}
else
{
printf("Write/Read in PC Card mode is OK\n");
}
oPccard.CloseMedia();
}
void TestRead_PcCard(void)
{
U32 uReadBuf = CODEC_MEM_ST + 0x400000;
U32 deviceLba;
U32 uBlockCount;
U32 mode;
mode = SelectMode();
oPccard.OpenMedia(mode);
printf("\nInput device sector address\n");
deviceLba = (U32)GetIntNum();
printf("Input sector count\n");
uBlockCount = (U32)GetIntNum();
printf("Clear buffer!!\n");
for (U32 i=0; i<uBlockCount*512; i=i+4) // buffer clear
{
Outp32(uReadBuf+i, 0);
}
printf("Press Enter \n");
getchar();
oPccard.ReadBlocks(deviceLba, uBlockCount, uReadBuf);
printf("Dump.....!!\n");
Dump32(uReadBuf, uBlockCount*128);
oPccard.CloseMedia();
}
void Clear_PcCard(void)
{
U32 uWriteBuf = CODEC_MEM_ST;
U32 uReadBuf = CODEC_MEM_ST + 0x400000;
U32 deviceLba;
U32 uBlockCount;
U32 mode;
mode = SelectMode();
oPccard.OpenMedia(mode);
printf("\nInput device sector address\n");
deviceLba = (U32)GetIntNum();
printf("Input sector count\n");
uBlockCount = (U32)GetIntNum();
printf("Fill & Clear buffer!!\n");
for (U32 i=0; i<uBlockCount*512; i++){
Outp8(uWriteBuf+i, 0);
}
printf("Press Enter \n");
getchar();
oPccard.WriteBlocks(deviceLba, uBlockCount, uWriteBuf);
printf("Clear sectors as zero in PC Card mode.\n");
oPccard.CloseMedia();
}
void Test_PCCARD(void)
{
int i, sel;
const FUNC_MENU menu[]=
{
NULL, "Exit",
PrintCIS, "PC Card CIS(Card Information Structure)",
TestWriteRead_PcCard, "PC Card Common memory Write/Read test",
TestRead_PcCard, "PC Card Common memory Read test",
Clear_PcCard, "PC Card Common memory clear data",
0,0
};
while(1)
{
printf("\n");
for (i=0; (int)(menu[i].desc)!=0; i++)
printf("%2d: %s\n", i, menu[i].desc);
printf("\nSelect the function to test : ");
sel = GetIntNum();
printf("\n");
if (sel == 0)
break;
else if (sel>0 && sel<(sizeof(menu)/8-1))
(menu[sel].func)();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -