mirror of
https://github.com/rvtr/ctr_card_test.git
synced 2025-06-18 22:55:46 -04:00

git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_card_test@8 ff8ce827-af98-4349-adb5-4c00699b5328
495 lines
12 KiB
C++
495 lines
12 KiB
C++
#include "nakayama.h"
|
|
|
|
using namespace nn::red::nakayama;
|
|
|
|
class AgingTestRWMem: public CardTestProgram
|
|
{
|
|
public:
|
|
virtual void Execute()
|
|
{
|
|
Page page;
|
|
|
|
VariableSelector menu;
|
|
menu.X = 10;
|
|
menu.Y = 30;
|
|
page.Add(menu);
|
|
|
|
Label title;
|
|
title.X = 20;
|
|
title.Y = 10;
|
|
title.Text = "Aging Test";
|
|
page.Add(title);
|
|
|
|
Label adr1;
|
|
adr1.X = 20;
|
|
adr1.Y = 150;
|
|
adr1.Text = "ADD : ****_****";
|
|
page.Add(adr1);
|
|
|
|
Label adr2;
|
|
adr2.X = 20;
|
|
adr2.Y = 160;
|
|
adr2.Text = "ADD : ****_****";
|
|
page.Add(adr2);
|
|
|
|
Label loop_count;
|
|
loop_count.X = 20;
|
|
loop_count.Y = 200;
|
|
loop_count.Text = "LOOP : ********";
|
|
page.Add(loop_count);
|
|
|
|
// -----------------------------
|
|
// Setting Menu
|
|
// -----------------------------
|
|
// アクセスパターン
|
|
SelectableValue<NamedValue<int> > access_pattern;
|
|
access_pattern.Add(*(new NamedValue<int> ("INC", 0)));
|
|
access_pattern.Add(*(new NamedValue<int> ("DEC", 1)));
|
|
access_pattern.Add(*(new NamedValue<int> ("COMP", 2)));
|
|
access_pattern.Add(*(new NamedValue<int> ("RAMDOM1", 3)));
|
|
access_pattern.Add(*(new NamedValue<int> ("RAMDOM2", 4)));
|
|
access_pattern.Add(*(new NamedValue<int> ("ID1", 5)));
|
|
access_pattern.Add(*(new NamedValue<int> ("ID2", 6)));
|
|
access_pattern.Add(*(new NamedValue<int> ("REPEAT", 7)));
|
|
menu.Register("Access Pattern", access_pattern);
|
|
|
|
// DMAタイプ
|
|
SelectableValue<NamedValue<int> > copy_type;
|
|
copy_type.Add(*(new NamedValue<int> ("Repeat", 0)));
|
|
copy_type.Add(*(new NamedValue<int> ("DMA0", 1)));
|
|
copy_type.Add(*(new NamedValue<int> ("DMA1", 2)));
|
|
copy_type.Add(*(new NamedValue<int> ("DMA2", 3)));
|
|
copy_type.Add(*(new NamedValue<int> ("DMA3", 4)));
|
|
copy_type.Add(*(new NamedValue<int> ("DMA4", 5)));
|
|
copy_type.Add(*(new NamedValue<int> ("DMA5", 6)));
|
|
copy_type.Add(*(new NamedValue<int> ("DMA6", 7)));
|
|
copy_type.Add(*(new NamedValue<int> ("DMA7", 8)));
|
|
copy_type.Add(*(new NamedValue<int> ("CPU", 9)));
|
|
menu.Register("Select DMA", copy_type);
|
|
|
|
// ループ
|
|
SelectableValue<NamedValue<int> > loop;
|
|
loop.Add(*(new NamedValue<int> ("Once", 0)));
|
|
loop.Add(*(new NamedValue<int> ("Repeat", 1)));
|
|
menu.Register("Loop", loop);
|
|
|
|
// リードカウント
|
|
SelectableValue<NamedValue<int> > read_count;
|
|
read_count.Add(*(new NamedValue<int> ("10000", 0)));
|
|
read_count.Add(*(new NamedValue<int> ("100000", 1)));
|
|
read_count.Add(*(new NamedValue<int> ("1000000", 2)));
|
|
read_count.Add(*(new NamedValue<int> ("10000000", 3)));
|
|
menu.Register("Read Count", read_count);
|
|
|
|
// バックアップメモリ
|
|
SelectableValue<NamedValue<int> > write_data;
|
|
write_data.Add(*(new NamedValue<int> ("0x0000", 0)));
|
|
write_data.Add(*(new NamedValue<int> ("0x55AA", 1)));
|
|
write_data.Add(*(new NamedValue<int> ("0x00FF", 2)));
|
|
write_data.Add(*(new NamedValue<int> ("0xFFFF", 3)));
|
|
write_data.Add(*(new NamedValue<int> ("DEC", 4)));
|
|
write_data.Add(*(new NamedValue<int> ("INC", 5)));
|
|
write_data.Add(*(new NamedValue<int> ("Repeat", 6)));
|
|
menu.Register("Write Data", write_data);
|
|
// -----------------------------
|
|
// Setting Menu ここまで
|
|
// -----------------------------
|
|
|
|
KeyPad& pad = KeyPad::GetInstance();
|
|
|
|
while (1)
|
|
{
|
|
// pad.ReadKey();
|
|
page.Show(Display::GetInstance(Display::Lower));
|
|
|
|
if (pad.IsTrigger(KeyPad::B))
|
|
{
|
|
Display::GetInstance(Display::Lower).Clear();
|
|
Display::GetInstance(Display::Lower).SwapBuffer();
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
class ReadTestRWMem: public CardTestProgram
|
|
{
|
|
public:
|
|
virtual void Execute()
|
|
{
|
|
Page page;
|
|
|
|
VariableSelector menu;
|
|
menu.X = 10;
|
|
menu.Y = 30;
|
|
page.Add(menu);
|
|
|
|
Label title;
|
|
title.X = 20;
|
|
title.Y = 10;
|
|
title.Text = "Read Test";
|
|
page.Add(title);
|
|
|
|
Label adr1;
|
|
adr1.X = 20;
|
|
adr1.Y = 200;
|
|
adr1.Text = "ADD : ****_****";
|
|
page.Add(adr1);
|
|
|
|
Label loop_count;
|
|
loop_count.X = 20;
|
|
loop_count.Y = 220;
|
|
loop_count.Text = "LOOP : ********";
|
|
page.Add(loop_count);
|
|
|
|
Label all_area;
|
|
all_area.X = 200;
|
|
all_area.Y = 200;
|
|
all_area.Text = "CHECK ALL AREA";
|
|
page.Add(all_area);
|
|
|
|
// -----------------------------
|
|
// Setting Menu
|
|
// -----------------------------
|
|
|
|
// -----------------------------
|
|
// Setting Menu ここまで
|
|
// -----------------------------
|
|
|
|
VariableValue<u64> start_adr;
|
|
start_adr.SetShiftRange(16,0);
|
|
start_adr.SetShiftBitSize(4);
|
|
menu.Register("start address", start_adr);
|
|
|
|
VariableValue<u64> end_adr;
|
|
end_adr.SetShiftRange(16,0);
|
|
end_adr.SetShiftBitSize(4);
|
|
menu.Register("end address", end_adr);
|
|
|
|
|
|
KeyPad& pad = KeyPad::GetInstance();
|
|
|
|
while (1)
|
|
{
|
|
pad.ReadKey();
|
|
page.Show(Display::GetInstance(Display::Lower));
|
|
|
|
if (pad.IsTrigger(KeyPad::B))
|
|
{
|
|
Display::GetInstance(Display::Lower).Clear();
|
|
Display::GetInstance(Display::Lower).SwapBuffer();
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
class WriteTestRWMem: public CardTestProgram
|
|
{
|
|
public:
|
|
virtual void Execute()
|
|
{
|
|
Page page;
|
|
|
|
VariableSelector menu;
|
|
menu.X = 10;
|
|
menu.Y = 30;
|
|
page.Add(menu);
|
|
|
|
Label title;
|
|
title.X = 20;
|
|
title.Y = 10;
|
|
title.Text = "Write Test";
|
|
page.Add(title);
|
|
|
|
Label adr1;
|
|
adr1.X = 20;
|
|
adr1.Y = 200;
|
|
adr1.Text = "ADD : ****_****";
|
|
page.Add(adr1);
|
|
|
|
Label loop_count;
|
|
loop_count.X = 20;
|
|
loop_count.Y = 220;
|
|
loop_count.Text = "LOOP : ********";
|
|
page.Add(loop_count);
|
|
|
|
Label all_area;
|
|
all_area.X = 200;
|
|
all_area.Y = 200;
|
|
all_area.Text = "CHECK ALL AREA";
|
|
page.Add(all_area);
|
|
|
|
// -----------------------------
|
|
// Setting Menu
|
|
// -----------------------------
|
|
|
|
// -----------------------------
|
|
// Setting Menu ここまで
|
|
// -----------------------------
|
|
|
|
VariableValue<u64> start_adr;
|
|
start_adr.SetShiftRange(16,0);
|
|
start_adr.SetShiftBitSize(4);
|
|
menu.Register("start address", start_adr);
|
|
|
|
VariableValue<u64> end_adr;
|
|
end_adr.SetShiftRange(16,0);
|
|
end_adr.SetShiftBitSize(4);
|
|
menu.Register("end address", end_adr);
|
|
|
|
|
|
KeyPad& pad = KeyPad::GetInstance();
|
|
|
|
while (1)
|
|
{
|
|
pad.ReadKey();
|
|
page.Show(Display::GetInstance(Display::Lower));
|
|
|
|
if (pad.IsTrigger(KeyPad::B))
|
|
{
|
|
Display::GetInstance(Display::Lower).Clear();
|
|
Display::GetInstance(Display::Lower).SwapBuffer();
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
class ReadSpeedRWMem: public CardTestProgram
|
|
{
|
|
public:
|
|
virtual void Execute()
|
|
{
|
|
Page page;
|
|
|
|
Label title;
|
|
title.X = 20;
|
|
title.Y = 10;
|
|
title.Text = "Read Speed";
|
|
page.Add(title);
|
|
|
|
Label result[7];
|
|
for(int i=0; i<7; i++)
|
|
{
|
|
result[i].X = 50;
|
|
result[i].Y = 50 + 20 * i;
|
|
result[i].Text = "* Page: ** MByte/s";
|
|
page.Add(result[i]);
|
|
}
|
|
|
|
KeyPad& pad = KeyPad::GetInstance();
|
|
|
|
while (1)
|
|
{
|
|
pad.ReadKey();
|
|
page.Show(Display::GetInstance(Display::Lower));
|
|
|
|
if (pad.IsTrigger(KeyPad::B))
|
|
{
|
|
Display::GetInstance(Display::Lower).Clear();
|
|
Display::GetInstance(Display::Lower).SwapBuffer();
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
class WriteSpeedRWMem: public CardTestProgram
|
|
{
|
|
public:
|
|
virtual void Execute()
|
|
{
|
|
Page page;
|
|
|
|
Label title;
|
|
title.X = 20;
|
|
title.Y = 10;
|
|
title.Text = "Write Speed";
|
|
page.Add(title);
|
|
|
|
Label result[7];
|
|
for(int i=0; i<7; i++)
|
|
{
|
|
result[i].X = 50;
|
|
result[i].Y = 50 + 20 * i;
|
|
result[i].Text = "* Page: ** MByte/s";
|
|
page.Add(result[i]);
|
|
}
|
|
|
|
KeyPad& pad = KeyPad::GetInstance();
|
|
|
|
while (1)
|
|
{
|
|
pad.ReadKey();
|
|
page.Show(Display::GetInstance(Display::Lower));
|
|
|
|
if (pad.IsTrigger(KeyPad::B))
|
|
{
|
|
Display::GetInstance(Display::Lower).Clear();
|
|
Display::GetInstance(Display::Lower).SwapBuffer();
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
class ReadOnlyRWMem: public CardTestProgram
|
|
{
|
|
public:
|
|
virtual void Execute()
|
|
{
|
|
Page page;
|
|
|
|
Label title;
|
|
title.X = 20;
|
|
title.Y = 10;
|
|
title.Text = "Read Only";
|
|
page.Add(title);
|
|
|
|
VariableSelector menu;
|
|
menu.X = 30;
|
|
menu.Y = 50;
|
|
page.Add(menu);
|
|
|
|
SelectableValue<NamedValue<int> > read_command;
|
|
read_command.Add(*(new NamedValue<int> ("RD_SEQ_PAGE", 0)));
|
|
read_command.Add(*(new NamedValue<int> ("RD_ID1", 1)));
|
|
read_command.Add(*(new NamedValue<int> ("RD_ID2", 2)));
|
|
menu.Register("CMD", read_command);
|
|
|
|
KeyPad& pad = KeyPad::GetInstance();
|
|
|
|
while (1)
|
|
{
|
|
pad.ReadKey();
|
|
page.Show(Display::GetInstance(Display::Lower));
|
|
|
|
if (pad.IsTrigger(KeyPad::B))
|
|
{
|
|
Display::GetInstance(Display::Lower).Clear();
|
|
Display::GetInstance(Display::Lower).SwapBuffer();
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
class WriteOnlyRWMem: public CardTestProgram
|
|
{
|
|
public:
|
|
virtual void Execute()
|
|
{
|
|
Page page;
|
|
|
|
Label title;
|
|
title.X = 20;
|
|
title.Y = 10;
|
|
title.Text = "Write Only";
|
|
page.Add(title);
|
|
|
|
VariableSelector menu;
|
|
menu.X = 30;
|
|
menu.Y = 50;
|
|
page.Add(menu);
|
|
|
|
SelectableValue<NamedValue<int> > read_command;
|
|
read_command.Add(*(new NamedValue<int> ("RD_SEQ_PAGE", 0)));
|
|
read_command.Add(*(new NamedValue<int> ("RD_ID1", 1)));
|
|
read_command.Add(*(new NamedValue<int> ("RD_ID2", 2)));
|
|
menu.Register("CMD", read_command);
|
|
|
|
KeyPad& pad = KeyPad::GetInstance();
|
|
|
|
while (1)
|
|
{
|
|
pad.ReadKey();
|
|
page.Show(Display::GetInstance(Display::Lower));
|
|
|
|
if (pad.IsTrigger(KeyPad::B))
|
|
{
|
|
Display::GetInstance(Display::Lower).Clear();
|
|
Display::GetInstance(Display::Lower).SwapBuffer();
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
#define ID_NUM 3
|
|
|
|
class ReliabilityTestForRWMemory: public CardTestProgram
|
|
{
|
|
virtual void Execute()
|
|
{
|
|
Page page;
|
|
|
|
Label title;
|
|
title.X = 20;
|
|
title.Y = 10;
|
|
title.Text = "Reliability Test for R/W Memory";
|
|
page.Add(title);
|
|
|
|
Label date;
|
|
date.X = 250;
|
|
date.Y = 20;
|
|
date.Text = __DATE__;
|
|
page.Add(date);
|
|
|
|
Selector<CardTestProgram> menu;
|
|
menu.X = 20;
|
|
menu.Y = 40;
|
|
page.Add(menu);
|
|
|
|
menu.Register("Aging Test", *(new AgingTestRWMem()));
|
|
|
|
|
|
menu.Register("Read Test", *(new ReadTestRWMem()));
|
|
menu.Register("Write Test", *(new WriteTestRWMem()));
|
|
|
|
menu.Register("Read Speed", *(new ReadSpeedRWMem()));
|
|
menu.Register("Write Speed", *(new WriteSpeedRWMem()));
|
|
|
|
menu.Register("Read Only", *(new ReadOnlyRWMem()));
|
|
menu.Register("Write Only", *(new WriteOnlyRWMem()));
|
|
|
|
|
|
Label crc;
|
|
crc.X = 20;
|
|
crc.Y = 200;
|
|
crc.Text = "CRC : *******";
|
|
page.Add(crc);
|
|
|
|
Label id[ID_NUM];
|
|
for(int i=0; i<ID_NUM; i++)
|
|
{
|
|
id[i].X = 20 + 100 * i;
|
|
id[i].Y = 210;
|
|
|
|
id[i].Text = "ID : *******";
|
|
page.Add(id[i]);
|
|
}
|
|
|
|
while (1)
|
|
{
|
|
page.Show(Display::GetInstance(Display::Upper));
|
|
|
|
if (menu.Selected)
|
|
{
|
|
menu.GetSelectedItem()->Execute();
|
|
menu.Selected = false;
|
|
}
|
|
|
|
if (menu.Canceled)
|
|
{
|
|
menu.Canceled = false;
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
};
|