NM500 TEST PGM
Dependencies: NM500Lib_Socket NM500_Test_Socket SDFileSystem_Socket mbed
Diff: main.cpp
- Revision:
- 13:e756b6e50853
- Parent:
- 12:c8fbe49527e7
- Child:
- 14:0264a9975d3d
--- a/main.cpp Fri Jun 23 05:37:34 2017 +0000 +++ b/main.cpp Tue Jul 18 07:32:50 2017 +0000 @@ -1,9 +1,31 @@ #include "mbed.h" #include "NM500.h" +#include "Test.h" -int data_learn(void); + void data_classify(void); void NSR_Test(void); +void Connection_test(void); +void Memory_Test(void); + +//connection +int NSR_Conn_fail = 0; +int GCR_Conn_fail = 0; +int MINIF_Conn_fail = 0; +int MAXIF_Conn_fail = 0; +int NCR_Conn_fail = 0; +int INDEX_Conn_fail = 0; +int DIST_Conn_fail = 0; +int CAT_Conn_fail = 0; +int AIF_Conn_fail = 0; +int NID_Conn_fail = 0; +int Connection = 0; + +//reset Test +int Reset_fail = 0; + +//memory test +int Memory_fail = 0; int id_fail = 0; int nsr_fail = 0; @@ -39,26 +61,39 @@ int NM1 = 0; int NM2 = 0; -char array1[NEURONSIZE]; -char array2[NEURONSIZE]; +unsigned char array1[NEURONSIZE]; +unsigned char array2[NEURONSIZE]; Timer t, st; -//Serial pc(SERIAL_TX, SERIAL_RX); -unsigned char vector[NEURONSIZE]; +Serial pc(SERIAL_TX, SERIAL_RX); + int main() { - //NM500 & SD Card Init + pc.printf("\nPress any key to start\n"); + int data = pc.getc(); + + pc.printf("\nTest Board V1.1 \n"); + //SPI Setting + SPI_Init(); + SD_Init(); + //reset Test + RESET_Test(); + //NM500 Init if(begin() == 0){ - printf("\nTest Board V2.0 \n"); - printf("\n\nNM500 Init \n"); + pc.printf("NM500 Init\n"); } else{ - printf("\nInit error\n"); - //int forget = 1; - error("\nFORGET error\n"); + error("Init error\n"); + pc.printf("\nFORGET error\n"); } + //connection Test + Connection_test(); + //Memory Test + Memory_Test(); + forget(); + //memory array init for(int i=0;i<NEURONSIZE;i=i+1){ array1[i]=0x0a; @@ -91,32 +126,32 @@ //GCR test write(NM_GCR,5); // int gcr = read(NM_GCR); -// //printf("gcr : %d",gcr); +// //pc.printf("gcr : %d",gcr); // if(gcr != 5) // CMN_Gcr = 1; st.start(); //Neuron learn - printf("Learn Start\n"); + pc.printf("\nLearn Start\n"); int daisy = data_learn(); st.stop(); - printf("Learn Complete\n"); - printf("Learn Time : %d ms\n",st.read_ms()); + pc.printf("Learn Complete\n"); + pc.printf("Learn Time : %d ms\n",st.read_ms()); st.reset(); //data save st.start(); - printf("Save Start\n"); + pc.printf("Save Start\n"); int save = NeuronToSD(); if(save == 0xFFFF || save == 0x7FFF) //change save = MAXNEURONS; st.stop(); - printf("Save Complete\n"); - printf("Save Time : %d ms\n",st.read_ms()); + pc.printf("Save Complete\n"); + pc.printf("Save Time : %d ms\n",st.read_ms()); st.reset(); //forget @@ -125,323 +160,157 @@ //restore st.start(); - printf("Restore Start\n"); + pc.printf("Restore Start\n"); int restore = SDToNeurons(); if(restore == 0xFFFF || restore == 0x7FFF) //change restore = MAXNEURONS; st.stop(); - printf("Restore Complete\n"); - printf("Restore Time : %d ms\n",st.read_ms()); + pc.printf("Restore Complete\n"); + pc.printf("Restore Time : %d ms\n",st.read_ms()); st.reset(); setKNN(); //classify st.start(); - printf("Classify Start\n"); + pc.printf("Classify Start\n"); data_classify(); st.stop(); - printf("Classify Complete\n"); - printf("classify Time : %d ms\n",st.read_ms()); + pc.printf("Classify Complete\n"); + pc.printf("classify Time : %d ms\n",st.read_ms()); - printf("\n****************Test Result****************\n"); + pc.printf("\n****************Test Result****************\n"); //nsr result if(CMN_Nsr ==1){ - printf("NSR Register Fail\n"); + pc.printf("NSR Register Fail\n"); CMN++; } //NCOUNT Result if(CMN_Ncount ==1){ - printf("NCOUNT Register Fail\n"); + pc.printf("NCOUNT Register Fail\n"); CMN++; } //MAXIF Result if(CMN_Maxif ==1){ - printf("MAXIF Register Fail\n"); + pc.printf("MAXIF Register Fail\n"); CMN++; } //MINIF Result if(Minif1 ==1){ - printf("#1 NM500 MINIF Register Fail\n"); + pc.printf("#1 NM500 MINIF Register Fail\n"); NM1++; } if(Minif2 ==1){ - printf("#2 NM500 MINIF Register Fail\n"); + pc.printf("#2 NM500 MINIF Register Fail\n"); NM2++; } //learn result if(Learn1 == 1){ - printf("#1 NM500 Learn Function Fail\n"); + pc.printf("#1 NM500 Learn Function Fail\n"); NM1++; } if(Learn2 == 1){ - printf("#2 NM500 Learn Function Fail\n"); + pc.printf("#2 NM500 Learn Function Fail\n"); NM2++; } //Daisy Chain result if(daisy == 1){ - printf("#1 NM500 Daisy Chain Fail\n"); + pc.printf("#1 NM500 Daisy Chain Fail\n"); NM1++; } //GCR result if(Gcr1 == 1){ - printf("#1 NM500 GCR Register Fail\n"); + pc.printf("#1 NM500 GCR Register Fail\n"); NM1++; } if(Gcr2 == 1){ - printf("#2 NM500 GCR Register Fail\n"); + pc.printf("#2 NM500 GCR Register Fail\n"); NM2++; } //AIF result if(Aif1 == 1){ - printf("#1 NM500 AIF Register Fail\n"); + pc.printf("#1 NM500 AIF Register Fail\n"); NM1++; } if(Aif2 == 1){ - printf("#2 NM500 AIF Register Fail\n"); + pc.printf("#2 NM500 AIF Register Fail\n"); NM2++; } //Cat result if(Cat1 == 1){ - printf("#1 NM500 CAT Register Fail\n"); + pc.printf("#1 NM500 CAT Register Fail\n"); NM1++; } if(Cat2 == 1){ - printf("#2 NM500 CAT Register Fail\n"); + pc.printf("#2 NM500 CAT Register Fail\n"); NM2++; } if(save != MAXNEURONS){ - printf("NM500 Learn Function Fail\n"); + pc.printf("NM500 Learn Function Fail\n"); CMN++; } if(restore != MAXNEURONS){ - printf("NM500 Restore Function Fail\n"); + pc.printf("NM500 Restore Function Fail\n"); CMN++; } //NID result if(Nid1 == 1){ - printf("#1 NM500 Nid Register Fail\n"); + pc.printf("#1 NM500 Nid Register Fail\n"); NM1++; } if(Nid2 == 1){ - printf("#2 NM500 Nid Register Fail\n"); + pc.printf("#2 NM500 Nid Register Fail\n"); NM2++; } //Dist result if(Dist1 == 1){ - printf("#1 NM500 Dist Register Fail\n"); + pc.printf("#1 NM500 Dist Register Fail\n"); NM1++; } if(Dist2 == 1){ - printf("#2 NM500 Dist Register Fail\n"); + pc.printf("#2 NM500 Dist Register Fail\n"); NM2++; } if(Memory1 == 1){ - printf("#1 NM500 Memory Fail\n"); + pc.printf("#1 Memory Fail\n"); NM1++; } if(Memory2 == 1){ - printf("#2 NM500 Memory Fail\n"); + pc.printf("#2 NM500 Memory Fail\n"); NM2++; } //final result - if(NM1 >1) - printf("#1 NM500 Fail\n"); - if(NM2 > 1) - printf("#2 NM500 Fail\n"); - if(CMN>1) - printf("#1, #2 Fail\n"); - if(CMN == 0 && NM1 == 0 && NM2 == 0) - printf("#1, #2 NM500 PASS\n"); + if(Reset_fail == 1) + pc.printf("Resest Test Fail\n"); + if(Connection == 1) + pc.printf("Connection Test Fail\n"); + + if(Memory_fail == 1) + pc.printf("Memory Test Fail \n"); - - -// //reset chain result -// if(CMN_RC == 1) -// printf("Reset Chain Register Fail\n"); + if(NM1 !=0) + pc.printf("#1 NM500 Function Test Fail\n"); + if(NM2 != 0) + pc.printf("#2 NM500 Function Test Fail\n"); + if(NM1 == 0 && NM2 == 0) + pc.printf("#1, #2 NM500 Function Test PASS\n"); - // printf("POWER SAVE ON\n"); +// pc.printf("POWER SAVE ON\n"); // write(NM_POWER_SAVE,0); + t.stop(); - printf("Total Time : %d ms\n",t.read_ms()); + pc.printf("Total Time : %d ms\n",t.read_ms()); } -void NSR_Test(void) -{ - //KNN Mode setting - setKNN(); - //read KNN Register - int nsr = read(NM_NSR) & 0x20; - if(nsr != 32) - CMN_Nsr = 1; //fail - - //RBF Mode setting - setRBF(); - nsr = read(NM_NSR) & 0x20; - if(nsr != 0) - CMN_Nsr = 1; //fail - - int temp_nsr = read(NM_NSR); - - //SR Mode test - write(NM_NSR, 0x10); - nsr = read(NM_NSR) & 0x10; - if(nsr != 16) - CMN_Nsr = 1; - - //Nomal Mode Test - write(NM_NSR, temp_nsr); - nsr = read(NM_NSR) & 0x10; - if(nsr != 0) - CMN_Nsr = 1; -} -int data_learn(void) -{ - int ncnt=0,old_ncnt=0; //ncount, old ncount - - //number of neuron 576*2 - for(int i=1;i<=MAXNEURONS;i++){ - // ex - // 1. 0 1 0 1.... - // 2. 0 2 0 2.... - // 3. 0 3 0 3.... - // ..... - // 255. 0 255 0 255.... - // 256. 1 0 1 0.... - // 257. 1 1 1 1.... - if(i%2 == 1){ - for(int j =0;j<DATA_CNT;j=j+2){ - vector[j] = i>>8; //upper bit save - vector[j+1] = i; //low bit save - } - for(int j =DATA_CNT;j<NEURONSIZE; j++){ - vector[j] = array1[j]; //upper bit save - } - } - else if(i%2==0){ - for(int j =0;j<DATA_CNT;j=j+2){ - vector[j] = i>>8; //upper bit save - vector[j+1] = i; //low bit save - } - for(int j =DATA_CNT;j<NEURONSIZE; j++){ - vector[j] = array2[j]; //upper bit save - } - } - - //data learn - ncnt = learn(vector, NEURONSIZE, i); //input : data, neuronsize, cat, return : ncount - if(ncnt == 0xffff || ncnt == 0x7FFF) //change - ncnt = MAXNEURONS; - //printf("ncount # %d\n",ncnt); - - if(ncnt == old_ncnt){ //ncount가 변화가 없으면 - if(ncnt <=576){ - Learn1 = 1; - error("\n Learn Fail NM500 #1\n"); - } - else{ - Learn2 = 1; - error("\n Learn Fail NM500 #2\n"); - } - } - //ncount가 증가하였을 경우 - else - old_ncnt = ncnt; //old ncount 갱신 - - printf("."); - } - printf("\n"); - printf("NCOUNT : %d\n",ncnt); - //학습 완료 후 ncount가 MAXNEURONS보다 작을 경우 - if(ncnt == MAXNEURONS/2) - return 1; //데이지체인 불량 - else if( ncnt != MAXNEURONS) - error("NCOUNT Fail\n"); - return 0; //정상 출력 -} - -void data_classify(void) -{ - int distance, cat, nid; - //number of neuron 1156 - for(int i=1;i<=MAXNEURONS;i++){ - //test 벡터 생성 - //for(int j =0;j<NEURONSIZE;j=j+2){ //size of neuron 256 -// vector[j] = i>>8; //upper bit save -// vector[j+1] = i; //low bit save -// } - if(i%2 == 1){ - for(int j =0;j<DATA_CNT;j=j+2){ - vector[j] = i>>8; //upper bit save - vector[j+1] = i; //low bit save - } - for(int j =DATA_CNT;j<NEURONSIZE; j++){ - vector[j] = array1[j]; //upper bit save - } - } - else if(i%2==0){ - for(int j =0;j<DATA_CNT;j=j+2){ - vector[j] = i>>8; //upper bit save - vector[j+1] = i; //low bit save - } - for(int j =DATA_CNT;j<NEURONSIZE; j++){ - vector[j] = array2[j]; //upper bit save - } - } - - //input : data, data length output : distance, category, Neuron ID return 인식된 데이터 갯수 - int nsr = classify(vector, NEURONSIZE, &distance, &cat, &nid); - id_fail = nsr & 0x70; - if(id_fail == 0) - nsr_fail = 1; - - printf("."); -// printf(" neuron# %d \t", nid); -// printf(" distance = %d,\t ", distance); -// printf(" cat = %d\n", cat); - - //nid test - //cat register pass AND (nid,cat diff) - if((nid!=cat) && (Cat1==0 && Cat2==0)){ - if(nid < 576){ - Nid1 = 1; - printf("\nNID Register Fail # %d\n",nid); - } - else{ - Nid2 = 1; - printf("\nNID Register Fail # %d\n",nid); - } - } - if(distance != 0){ - if(nid < 576){ - Dist1 = 1; - printf("\nDistance Register Fail # %d, Distance # %d\n",nid,distance); - } - else{ - Dist2 = 1; - printf("\nDistance Register Fail # %d, Distance # %d\n",nid,distance); - } - } - - } - printf("\n"); - -} - - - - - -