NM500 TEST PGM

Dependencies:   NM500Lib_Socket NM500_Test_Socket SDFileSystem_Socket mbed

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");  
-
-} 
-
-
-
-
-
-