eeprom test

Dependencies:   mbed

Revision:
0:7c814979a859
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Jul 17 05:34:38 2020 +0000
@@ -0,0 +1,781 @@
+#include "mbed.h"
+// For EEPROM, 최대 16byte 씩 쓸 수 있음 
+// M95128-WMN6P 
+
+// Board Information
+uint8_t BNO = 0;
+uint8_t CONTROL_MODE = 0;
+uint8_t OPERATING_MODE = 0; // (00 : Moog & Rot, 01 : Moog & Lin, 10 : KNR & Rot, 11 : KNR & Lin, 101 : SW & Lin)
+uint8_t SENSING_MODE = 0; // (0 : torque, 1: pressure)
+uint8_t CONTROL_UTILITY_MODE = 0;
+uint8_t CURRENT_CONTROL_MODE = 0; // (0 : pwm, 1 : current control)
+uint8_t FLAG_VALVE_DEADZONE = 0;
+uint8_t REFERENCE_MODE = 0;
+int16_t CAN_FREQ = 500;
+int16_t DIR_JOINT_ENC = 0;
+int16_t DIR_VALVE = 0;
+int16_t DIR_VALVE_ENC = 0;
+
+float SUPPLY_VOLTAGE = 12.0f;
+float VALVE_VOLTAGE_LIMIT = 12.0f;  //v
+
+float P_GAIN_VALVE_POSITION = 0.0f;
+float I_GAIN_VALVE_POSITION= 0.0f;
+float D_GAIN_VALVE_POSITION= 0.0f;
+float P_GAIN_JOINT_POSITION = 0.0f;
+float I_GAIN_JOINT_POSITION = 0.0f;
+float D_GAIN_JOINT_POSITION = 0.0f;
+float P_GAIN_JOINT_TORQUE = 0.0f;
+float I_GAIN_JOINT_TORQUE = 0.0;
+float D_GAIN_JOINT_TORQUE = 0.0;
+
+int16_t K_SPRING = 0.0;
+int16_t D_DAMPER = 12.0;
+int16_t flag_delay_test = 0;
+
+//float P_GAIN_VALVE_POSITION_OPP = 0.0f;
+//float I_GAIN_VALVE_POSITION_OPP= 0.0f;
+//float D_GAIN_VALVE_POSITION_OPP= 0.0f;
+//float P_GAIN_JOINT_POSITION_OPP = 0.0f;
+//float I_GAIN_JOINT_POSITION_OPP = 0.0f;
+//float D_GAIN_JOINT_POSITION_OPP = 0.0f;
+//float P_GAIN_JOINT_TORQUE_OPP = 0.0f;
+//float I_GAIN_JOINT_TORQUE_OPP = 0.0;
+//float D_GAIN_JOINT_TORQUE_OPP = 0.0;
+
+float VALVE_DEADZONE_PLUS;
+float VALVE_DEADZONE_MINUS;
+
+int16_t VELOCITY_COMP_GAIN;
+int16_t COMPLIANCE_GAIN;
+
+int16_t VALVE_CENTER;
+
+int16_t VALVE_FF;
+
+int16_t BULK_MODULUS;
+
+int16_t CHAMBER_VOLUME_A;
+int16_t CHAMBER_VOLUME_B;
+
+int16_t PISTON_AREA_A;
+int16_t PISTON_AREA_B;
+float PISTON_AREA_alpha;
+float alpha3 = 1.0f;
+
+
+int16_t PRES_SUPPLY;
+int16_t PRES_RETURN;
+
+int16_t ENC_LIMIT_PLUS;
+int16_t ENC_LIMIT_MINUS;
+
+int16_t STROKE;
+
+
+//int16_t VALVE_LIMIT_PLUS;
+//int16_t VALVE_LIMIT_MINUS;
+
+float ENC_PULSE_PER_POSITION;
+float TORQUE_SENSOR_PULSE_PER_TORQUE;
+float PRES_SENSOR_A_PULSE_PER_BAR = 4096.0f / 200.0f;
+float PRES_SENSOR_B_PULSE_PER_BAR = 4096.0f / 200.0f;
+
+int HOMEPOS_OFFSET;
+int HOMEPOS_VALVE_OPENING;
+
+float FRICTION;
+float REF_PERIOD;
+float REF_MAG;
+int REF_NUM;
+
+
+float DAC_REF;
+float DAC_RESOL;
+
+int REF_POSITION;
+int REF_VELOCITY;
+int16_t REF_TORQUE;
+int16_t REF_PRES_DIFF;
+int16_t REF_PWM;
+int16_t REF_VALVE_POSITION;
+int16_t REF_CURRENT;
+
+int REF_MOVE_TIME_5k;
+int INIT_REF_PWM;
+int INIT_REF_VALVE_POS;
+int INIT_REF_POS;
+int INIT_REF_VEL;
+int INIT_REF_TORQUE;
+int INIT_REF_PRES_DIFF;
+int INIT_REF_CURRENT;
+
+int CUR_POSITION;
+int CUR_VELOCITY;
+float CUR_TORQUE;
+float CUR_PRES_A;
+float CUR_PRES_B;
+int CUR_VALVE_POSITION;
+
+unsigned int    TMR2_COUNT_LED1;
+unsigned int    TMR2_COUNT_LED2;
+unsigned int    TMR2_COUNT_CAN_TX = 0;
+unsigned int    TMR3_COUNT_TEST = 0;
+
+int num_err;
+int flag_err[8];
+int flag_err_old[8];
+int flag_err_rt;
+
+int flag_ref_enable;
+
+int flag_data_request[5];
+
+int MODE_POS_FT_TRANS = 0;
+
+float CUR_CURRENT_mA = 0.0f;
+float CUR_PRES_A_BAR = 0.0f;
+float CUR_PRES_B_BAR = 0.0f;
+float CUR_TORQUE_NM = 0.0f;
+float CUR_TORQUE_NM_PRESS = 0.0f;
+
+float PRES_A_VREF = 0.0f;
+float PRES_B_VREF = 0.0f;
+float TORQUE_VREF = 0.0f;
+
+float VALVE_PWM_RAW_FB = 0.0f;
+float VALVE_PWM_RAW_FF = 0.0f;
+float VALVE_PWM_RAW = 0.0f;
+int VALVE_PWM_VALVE_DZ = 0;
+
+float VALVE_GAIN_LPM_PER_V[10];
+float VALVE_POS_VS_PWM[25];
+long JOINT_VEL[100];
+
+int VALVE_MAX_POS;
+int VALVE_MIN_POS;
+int VALVE_POS_NUM;
+float VALVE_CENTER_OFFSET;
+float VALVE_DZ_MINUS_OFFSET;
+float VALVE_DZ_PLUS_OFFSET;
+
+
+
+//SPI device(PB_15, PB_14, PB_13);
+//DigitalOut cs(PB_12);
+SPI eeprom(PB_15, PB_14, PB_13); //MOSI, MISO, SCK
+DigitalOut eeprom_cs(PB_12); // Chip select 
+//DigitalOut check(PA_10);
+Serial pc(PA_9,PA_10);
+int temp1, temp2;
+void spi_eeprom_ready(void);
+void spi_eeprom_write(unsigned int data);
+void spi_eeprom_write_long(void);
+void spi_eeprom_write_long_1(unsigned int add);
+void spi_eeprom_write_long_2(unsigned int add);
+void spi_eeprom_write_long_3(unsigned int add);
+void spi_eeprom_write_long_4(unsigned int add);
+void spi_eeprom_write_long_5(unsigned int add);
+void spi_eeprom_write_long_6(unsigned int add);
+void spi_eeprom_write_long_7(unsigned int add);
+void spi_eeprom_write_long_8(unsigned int add);
+void spi_eeprom_write_long_9(unsigned int add);
+void spi_eeprom_write_long_10(unsigned int add);
+void spi_eeprom_write_long_11(unsigned int add);
+void spi_eeprom_write_long_12(unsigned int add);
+void spi_eeprom_write_long_13(unsigned int add);
+unsigned int spi_eeprom_read(void);
+void spi_eeprom_read_long(void);
+void spi_eeprom_read_long_1(unsigned int add);
+void spi_eeprom_read_long_2(unsigned int add);
+void spi_eeprom_read_long_3(unsigned int add);
+void spi_eeprom_read_long_4(unsigned int add);
+void spi_eeprom_read_long_5(unsigned int add);
+void spi_eeprom_read_long_6(unsigned int add);
+void spi_eeprom_read_long_7(unsigned int add);
+void spi_eeprom_read_long_8(unsigned int add);
+void spi_eeprom_read_long_9(unsigned int add);
+void spi_eeprom_read_long_10(unsigned int add);
+void spi_eeprom_read_long_11(unsigned int add);
+void spi_eeprom_read_long_12(unsigned int add);
+void spi_eeprom_read_long_13(unsigned int add);
+    int a=0x41233212;
+    int b=0x32222222;
+    int c=0x11112222;
+    int d=0x11111111;
+    int e=0x00002222;
+ 
+int main() {
+    eeprom.format(8,3);  
+    eeprom.frequency(5000000); // max freq of eeprom 
+    spi_eeprom_write_long(); 
+    
+    
+    while(1){
+        wait(3.0f);
+        spi_eeprom_read_long();
+        pc.printf("right=%d, ans=%d\n",b,D_DAMPER);
+        for(int i=90; i<100; i++) {
+            pc.printf("%dth right=%d, ans=%d\n",i,b,JOINT_VEL[i]);
+        }
+        for(int i=0; i<15; i++) {
+            pc.printf("%dth right=%d, ans=%d\n",i,a,JOINT_VEL[i]);
+        }
+        wait(10.0f);
+        
+        /*
+        pc.printf("a right=%d, ans=%d\n",a,BNO);
+        pc.printf("a right=%d, ans=%f\n",a,P_GAIN_VALVE_POSITION);
+        pc.printf("a right=%d, ans=%f\n",a,D_GAIN_JOINT_TORQUE);
+        pc.printf("b right=%d, ans=%d\n",a,VALVE_FF);
+        */
+        /*
+        pc.printf("c right=%d, ans=%f\n",c,VALVE_POS_VS_PWM[11]);
+        pc.printf("d right=%d, ans=%d\n",d,JOINT_VEL[99]);
+        pc.printf("e right=%d, ans=%d\n",e,D_DAMPER);
+        */
+    }    
+}
+
+void spi_eeprom_ready(void){
+    int temp1, temp2;
+    do{
+        eeprom_cs=0;
+        eeprom.write(0x06);  //write enable
+        eeprom_cs=1;
+        
+        eeprom_cs=0;
+        temp1 = eeprom.write(0x05);     
+        temp2 = eeprom.write(0x00);
+        eeprom_cs=1;
+        temp2=(temp2&(0x03))!= 0x02;
+    } while(temp2); // before writing or reading 
+}
+
+void spi_eeprom_write(unsigned int data){
+        eeprom.write(0xff&data);
+        eeprom.write(0xff&(data>>8));
+        eeprom.write(0xff&(data>>16));
+        eeprom.write(0xff&(data>>24));
+}
+
+void spi_eeprom_write_long(void){
+
+    spi_eeprom_write_long_1(0x0000);
+    spi_eeprom_write_long_2(0x0100);
+    spi_eeprom_write_long_3(0x0200);
+    spi_eeprom_write_long_4(0x0300);
+    spi_eeprom_write_long_5(0x0400);
+    spi_eeprom_write_long_6(0x0500);
+    spi_eeprom_write_long_7(0x0600);
+    spi_eeprom_write_long_8(0x0700);
+    spi_eeprom_write_long_9(0x0800);
+    spi_eeprom_write_long_10(0x0900);
+    spi_eeprom_write_long_11(0x1000);
+    spi_eeprom_write_long_12(0x1100);
+    spi_eeprom_write_long_13(0x1200);
+}
+
+
+void spi_eeprom_write_long_1(unsigned int add){
+        
+        spi_eeprom_ready();
+        eeprom_cs=0;
+        eeprom.write(0x02);
+        eeprom.write(0xff&(add>>8));
+        eeprom.write(0xff&add);
+        
+        spi_eeprom_write((int) BNO);           // write at address, 쓸때도 4byte씩 씀
+        spi_eeprom_write((int) OPERATING_MODE);
+        spi_eeprom_write((int) SENSING_MODE);
+        spi_eeprom_write((int) CURRENT_CONTROL_MODE);
+        spi_eeprom_write((int) FLAG_VALVE_DEADZONE);
+        spi_eeprom_write((int) CAN_FREQ);
+        spi_eeprom_write((int) DIR_JOINT_ENC);
+        spi_eeprom_write((int) DIR_VALVE);
+        spi_eeprom_write((int) DIR_VALVE_ENC);
+        spi_eeprom_write((int) (SUPPLY_VOLTAGE * 10.0f));
+        spi_eeprom_write((int) (VALVE_VOLTAGE_LIMIT * 10.0f));
+        spi_eeprom_write((int) P_GAIN_VALVE_POSITION);
+        spi_eeprom_write((int) I_GAIN_VALVE_POSITION);
+        spi_eeprom_write((int) D_GAIN_VALVE_POSITION);
+        spi_eeprom_write((int) P_GAIN_JOINT_POSITION);
+        
+        eeprom_cs=1;
+}
+
+void spi_eeprom_write_long_2(unsigned int add){
+        
+        spi_eeprom_ready();
+        eeprom_cs=0;
+        eeprom.write(0x02);
+        eeprom.write(0xff&(add>>8));
+        eeprom.write(0xff&add);
+        
+        spi_eeprom_write((int) I_GAIN_JOINT_POSITION);
+        spi_eeprom_write((int) D_GAIN_JOINT_POSITION);
+        spi_eeprom_write((int) P_GAIN_JOINT_TORQUE);
+        spi_eeprom_write((int) I_GAIN_JOINT_TORQUE);
+        spi_eeprom_write((int) D_GAIN_JOINT_TORQUE);
+        spi_eeprom_write((int) (VALVE_DEADZONE_PLUS * 10.0f));
+        spi_eeprom_write((int) (VALVE_DEADZONE_MINUS * 10.0f));
+        spi_eeprom_write((int) VELOCITY_COMP_GAIN);
+        spi_eeprom_write((int) COMPLIANCE_GAIN);
+        spi_eeprom_write((int) VALVE_CENTER);
+        spi_eeprom_write((int) VALVE_FF);
+        spi_eeprom_write((int) BNO);
+        spi_eeprom_write((int) CHAMBER_VOLUME_A);
+        spi_eeprom_write((int) CHAMBER_VOLUME_B);
+        spi_eeprom_write((int) PISTON_AREA_A);
+        
+        eeprom_cs=1;
+}
+
+void spi_eeprom_write_long_3(unsigned int add){
+        
+        spi_eeprom_ready();
+        eeprom_cs=0;
+        eeprom.write(0x02);
+        eeprom.write(0xff&(add>>8));
+        eeprom.write(0xff&add);
+        
+        spi_eeprom_write((int) PISTON_AREA_B);
+        spi_eeprom_write((int) PRES_SUPPLY);
+        spi_eeprom_write((int) PRES_RETURN);
+        spi_eeprom_write((int) ENC_LIMIT_MINUS);
+        spi_eeprom_write((int) ENC_LIMIT_PLUS);
+        spi_eeprom_write((int) STROKE);
+        //writer.write(RID_VALVE_LIMIT_MINUS,(int) VALVE_LIMIT_MINUS);
+        //writer.write(RID_VALVE_LIMIT_PLUS,(int) VALVE_LIMIT_PLUS);
+        spi_eeprom_write((int) (ENC_PULSE_PER_POSITION*10.0f));
+        spi_eeprom_write((int) (TORQUE_SENSOR_PULSE_PER_TORQUE * 10000.0f));
+        spi_eeprom_write((int) (PRES_SENSOR_A_PULSE_PER_BAR * 100.0f));
+        spi_eeprom_write((int) (PRES_SENSOR_B_PULSE_PER_BAR * 100.0f));
+        spi_eeprom_write((int) (FRICTION * 10.0f));
+        spi_eeprom_write((int) HOMEPOS_OFFSET);
+        spi_eeprom_write((int) HOMEPOS_VALVE_OPENING);
+        
+        eeprom_cs=1;
+}
+
+void spi_eeprom_write_long_4(unsigned int add){
+        
+        spi_eeprom_ready();
+        eeprom_cs=0;
+        eeprom.write(0x02);
+        eeprom.write(0xff&(add>>8));
+        eeprom.write(0xff&add);       
+        
+        spi_eeprom_write((int) (TORQUE_VREF * 1000.0f));
+        spi_eeprom_write( (int) (PRES_A_VREF * 1000.0f));
+        spi_eeprom_write((int) (PRES_B_VREF * 1000.0f));
+        spi_eeprom_write((int) (VALVE_GAIN_LPM_PER_V[0] * 100.0f));
+        spi_eeprom_write((int) (VALVE_GAIN_LPM_PER_V[2] * 100.0f));
+        spi_eeprom_write((int) (VALVE_GAIN_LPM_PER_V[4] * 100.0f));
+        spi_eeprom_write((int) (VALVE_GAIN_LPM_PER_V[6] * 100.0f));
+        spi_eeprom_write((int) (VALVE_GAIN_LPM_PER_V[8] * 100.0f));
+        spi_eeprom_write((int) (VALVE_GAIN_LPM_PER_V[1] * 100.0f));
+        spi_eeprom_write((int) (VALVE_GAIN_LPM_PER_V[3] * 100.0f));
+        spi_eeprom_write((int) (VALVE_GAIN_LPM_PER_V[5] * 100.0f));
+        spi_eeprom_write((int) (VALVE_GAIN_LPM_PER_V[7] * 100.0f));
+        spi_eeprom_write((int) (VALVE_GAIN_LPM_PER_V[9] * 100.0f));
+        
+        eeprom_cs=1;
+}
+        
+void spi_eeprom_write_long_5(unsigned int add){
+        
+        spi_eeprom_ready();
+        eeprom_cs=0;
+        eeprom.write(0x02);
+        eeprom.write(0xff&(add>>8));
+        eeprom.write(0xff&add);  
+              
+        for(int i=0; i<15; i++) {
+            spi_eeprom_write( (int) VALVE_POS_VS_PWM[i]);
+        }
+        
+        eeprom_cs=1;
+}
+
+void spi_eeprom_write_long_6(unsigned int add){
+        
+        spi_eeprom_ready();
+        eeprom_cs=0;
+        eeprom.write(0x02);
+        eeprom.write(0xff&(add>>8));
+        eeprom.write(0xff&add);
+        
+        for(int i=15; i<25; i++) {
+            spi_eeprom_write( (int) VALVE_POS_VS_PWM[i]);
+        }
+        
+        eeprom_cs=1;
+}
+
+void spi_eeprom_write_long_7(unsigned int add){
+        
+        spi_eeprom_ready();
+        eeprom_cs=0;
+        eeprom.write(0x02);
+        eeprom.write(0xff&(add>>8));
+        eeprom.write(0xff&add);
+        
+        for(int i=0; i<15; i++) {
+            spi_eeprom_write((int) (JOINT_VEL[i] & 0xFFFFFFFF));
+        }
+        
+        eeprom_cs=1;
+}
+        
+void spi_eeprom_write_long_8(unsigned int add){
+        
+        spi_eeprom_ready();
+        eeprom_cs=0;
+        eeprom.write(0x02);
+        eeprom.write(0xff&(add>>8));
+        eeprom.write(0xff&add);
+        
+        for(int i=15; i<30; i++) {
+            spi_eeprom_write((int) (JOINT_VEL[i] & 0xFFFFFFFF));
+        }
+        
+        eeprom_cs=1;
+}
+void spi_eeprom_write_long_9(unsigned int add){
+        
+        spi_eeprom_ready();
+        eeprom_cs=0;
+        eeprom.write(0x02);
+        eeprom.write(0xff&(add>>8));
+        eeprom.write(0xff&add);
+        
+        for(int i=30; i<45; i++) {
+            spi_eeprom_write((int) (JOINT_VEL[i] & 0xFFFFFFFF));
+        }
+        
+        eeprom_cs=1;
+}
+
+void spi_eeprom_write_long_10(unsigned int add){
+        
+        spi_eeprom_ready();
+        eeprom_cs=0;
+        eeprom.write(0x02);
+        eeprom.write(0xff&(add>>8));
+        eeprom.write(0xff&add);
+        
+        for(int i=45; i<60; i++) {
+            spi_eeprom_write((int) (JOINT_VEL[i] & 0xFFFFFFFF));
+        }
+        
+        eeprom_cs=1;
+}
+
+void spi_eeprom_write_long_11(unsigned int add){
+        
+        spi_eeprom_ready();
+        eeprom_cs=0;
+        eeprom.write(0x02);
+        eeprom.write(0xff&(add>>8));
+        eeprom.write(0xff&add);
+        
+        for(int i=60; i<75; i++) {
+            spi_eeprom_write((int) (JOINT_VEL[i] & 0xFFFFFFFF));
+        }
+        
+        eeprom_cs=1;
+}
+
+void spi_eeprom_write_long_12(unsigned int add){
+        
+        spi_eeprom_ready();
+        eeprom_cs=0;
+        eeprom.write(0x02);
+        eeprom.write(0xff&(add>>8));
+        eeprom.write(0xff&add);
+        
+        for(int i=75; i<90; i++) {
+            spi_eeprom_write((int) (JOINT_VEL[i] & 0xFFFFFFFF));
+        }
+        
+        eeprom_cs=1;
+}
+        
+void spi_eeprom_write_long_13(unsigned int add){
+        
+        spi_eeprom_ready();
+        eeprom_cs=0;
+        eeprom.write(0x02);
+        eeprom.write(0xff&(add>>8));
+        eeprom.write(0xff&add);
+        
+        for(int i=90; i<100; i++) {
+            spi_eeprom_write((int) (JOINT_VEL[i] & 0xFFFFFFFF));
+        }
+        
+        spi_eeprom_write((int) VALVE_MAX_POS);
+        spi_eeprom_write((int) VALVE_MIN_POS);
+        //writer.write(RID_DDV_CENTER, (int) (DDV_CENTER * 10.0f));
+        spi_eeprom_write((int) VALVE_POS_NUM);
+        spi_eeprom_write((int) K_SPRING);
+        spi_eeprom_write((int) D_DAMPER);
+        
+        eeprom_cs=1;
+}
+
+unsigned int spi_eeprom_read(void){     
+        int a1 = eeprom.write(0x00);
+        int a2 = eeprom.write(0x00);
+        int a3 = eeprom.write(0x00);
+        int a4 = eeprom.write(0x00);
+        unsigned int final = (a4<<24)+(a3<<16) + (a2<<8) + a1;
+        return final;
+} 
+
+void spi_eeprom_read_long(void){
+    spi_eeprom_read_long_1(0x0000);
+    spi_eeprom_read_long_2(0x0100);
+    spi_eeprom_read_long_3(0x0200);
+    spi_eeprom_read_long_4(0x0300);
+    spi_eeprom_read_long_5(0x0400);
+    spi_eeprom_read_long_6(0x0500);
+    spi_eeprom_read_long_7(0x0600);
+    spi_eeprom_read_long_8(0x0700);
+    spi_eeprom_read_long_9(0x0800);
+    spi_eeprom_read_long_10(0x0900);
+    spi_eeprom_read_long_11(0x1000);
+    spi_eeprom_read_long_12(0x1100);
+    spi_eeprom_read_long_13(0x1200);
+}
+
+void spi_eeprom_read_long_1(unsigned int add){
+        eeprom_cs=0;
+        eeprom.write(0x03);
+        eeprom.write(0xff&((add)>>8));
+        eeprom.write(0xff&(add));
+        
+        BNO = spi_eeprom_read();
+        BNO = 1;
+        OPERATING_MODE = spi_eeprom_read();
+        SENSING_MODE = spi_eeprom_read();
+        CURRENT_CONTROL_MODE = spi_eeprom_read();
+        FLAG_VALVE_DEADZONE = spi_eeprom_read();
+        CAN_FREQ = spi_eeprom_read();
+        DIR_JOINT_ENC = spi_eeprom_read();
+        DIR_VALVE = spi_eeprom_read();
+        DIR_VALVE_ENC = spi_eeprom_read();
+        SUPPLY_VOLTAGE = (float) (spi_eeprom_read()) *0.1f;
+        VALVE_VOLTAGE_LIMIT = (float) (spi_eeprom_read()) * 0.1f;
+        P_GAIN_VALVE_POSITION = spi_eeprom_read();
+        I_GAIN_VALVE_POSITION = spi_eeprom_read();
+        D_GAIN_VALVE_POSITION = spi_eeprom_read();
+        P_GAIN_JOINT_POSITION = spi_eeprom_read();
+        
+        eeprom_cs=1;
+}
+       
+void spi_eeprom_read_long_2(unsigned int add){
+        eeprom_cs=0;
+        eeprom.write(0x03);
+        eeprom.write(0xff&((add)>>8));
+        eeprom.write(0xff&(add));
+        
+        I_GAIN_JOINT_POSITION = spi_eeprom_read();
+        D_GAIN_JOINT_POSITION = spi_eeprom_read();
+        P_GAIN_JOINT_TORQUE = spi_eeprom_read();
+        I_GAIN_JOINT_TORQUE = spi_eeprom_read();
+        D_GAIN_JOINT_TORQUE = spi_eeprom_read();
+        VALVE_DEADZONE_PLUS = (float) (spi_eeprom_read()) * 0.1f;
+        VALVE_DEADZONE_MINUS = (float) (spi_eeprom_read()) * 0.1f;
+        VELOCITY_COMP_GAIN = spi_eeprom_read();
+        COMPLIANCE_GAIN = spi_eeprom_read();
+        VALVE_CENTER = spi_eeprom_read();
+        VALVE_FF = spi_eeprom_read();
+        BULK_MODULUS = spi_eeprom_read();
+        CHAMBER_VOLUME_A = spi_eeprom_read();
+        CHAMBER_VOLUME_B = spi_eeprom_read();
+        PISTON_AREA_A = spi_eeprom_read();
+        
+        eeprom_cs=1;
+}
+        
+void spi_eeprom_read_long_3(unsigned int add){
+        eeprom_cs=0;
+        eeprom.write(0x03);
+        eeprom.write(0xff&((add)>>8));
+        eeprom.write(0xff&(add));
+        
+        PISTON_AREA_B = spi_eeprom_read();
+        PISTON_AREA_alpha = (float)PISTON_AREA_B/(float)PISTON_AREA_A;
+        alpha3 = PISTON_AREA_alpha * PISTON_AREA_alpha*PISTON_AREA_alpha;
+        PRES_SUPPLY = spi_eeprom_read();
+        PRES_RETURN = spi_eeprom_read();
+        ENC_LIMIT_MINUS = spi_eeprom_read();
+        ENC_LIMIT_PLUS = spi_eeprom_read();
+        STROKE = spi_eeprom_read();
+        //VALVE_LIMIT_MINUS = flashReadInt(Rom_Sector, RID_VALVE_LIMIT_MINUS);
+        //VALVE_LIMIT_PLUS = flashReadInt(Rom_Sector, RID_VALVE_LIMIT_PLUS);
+        ENC_PULSE_PER_POSITION = (float) (spi_eeprom_read()) * 0.1f;
+    //    ENC_PULSE_PER_POSITION = (float) 1024.0f;
+        TORQUE_SENSOR_PULSE_PER_TORQUE = (float) (spi_eeprom_read()) * 0.0001f;
+        //TORQUE_SENSOR_PULSE_PER_TORQUE = (float) 0.41928f; //for ankle
+    //    TORQUE_SENSOR_PULSE_PER_TORQUE = (float) 10000.0f/2048.0f; //for knee
+        PRES_SENSOR_A_PULSE_PER_BAR = (float) (spi_eeprom_read()) * 0.01f;
+    //    PRES_SENSOR_A_PULSE_PER_BAR = 4096.0f / 200.0f;
+        PRES_SENSOR_B_PULSE_PER_BAR = (float) (spi_eeprom_read()) * 0.01f;
+    //    PRES_SENSOR_B_PULSE_PER_BAR = 4096.0f / 200.0f;
+        FRICTION = (float) (spi_eeprom_read()) * 0.1f;
+        HOMEPOS_OFFSET = spi_eeprom_read();
+        HOMEPOS_VALVE_OPENING = spi_eeprom_read();
+        
+        eeprom_cs=1;
+}
+       
+void spi_eeprom_read_long_4(unsigned int add){
+        eeprom_cs=0;
+        eeprom.write(0x03);
+        eeprom.write(0xff&((add)>>8));
+        eeprom.write(0xff&(add));
+        
+        TORQUE_VREF = (float) (spi_eeprom_read()) *0.001f;
+        PRES_A_VREF = (float) spi_eeprom_read() * 0.001f;
+        PRES_B_VREF = (float) spi_eeprom_read() * 0.001f;
+        VALVE_GAIN_LPM_PER_V[0] = (float) (spi_eeprom_read()) * 0.01f;
+        VALVE_GAIN_LPM_PER_V[2] = (float) (spi_eeprom_read()) * 0.01f;
+        VALVE_GAIN_LPM_PER_V[4] = (float) (spi_eeprom_read()) * 0.01f;
+        VALVE_GAIN_LPM_PER_V[6] = (float) (spi_eeprom_read()) * 0.01f;
+        VALVE_GAIN_LPM_PER_V[8] = (float) (spi_eeprom_read()) * 0.01f;
+        VALVE_GAIN_LPM_PER_V[1] = (float) (spi_eeprom_read()) * 0.01f;
+        VALVE_GAIN_LPM_PER_V[3] = (float) (spi_eeprom_read()) * 0.01f;
+        VALVE_GAIN_LPM_PER_V[5] = (float) (spi_eeprom_read()) * 0.01f;
+        VALVE_GAIN_LPM_PER_V[7] = (float) (spi_eeprom_read()) * 0.01f;
+        VALVE_GAIN_LPM_PER_V[9] = (float) (spi_eeprom_read()) * 0.01f;
+        
+        eeprom_cs=1;
+}
+
+void spi_eeprom_read_long_5(unsigned int add){
+        eeprom_cs=0;
+        eeprom.write(0x03);
+        eeprom.write(0xff&((add)>>8));
+        eeprom.write(0xff&(add));
+        
+        for(int i=0; i<15; i++) {
+            VALVE_POS_VS_PWM[i] = (float) (spi_eeprom_read());
+        }
+
+        eeprom_cs=1;
+}
+
+void spi_eeprom_read_long_6(unsigned int add){
+        eeprom_cs=0;
+        eeprom.write(0x03);
+        eeprom.write(0xff&((add)>>8));
+        eeprom.write(0xff&(add));
+
+        for(int i=15; i<25; i++) {
+            VALVE_POS_VS_PWM[i] = (float) (spi_eeprom_read());
+        }
+
+        eeprom_cs=1;
+}
+
+void spi_eeprom_read_long_7(unsigned int add){
+        eeprom_cs=0;
+        eeprom.write(0x03);
+        eeprom.write(0xff&((add)>>8));
+        eeprom.write(0xff&(add));
+        
+        for(int i=0; i<15; i++) {
+            JOINT_VEL[i] = spi_eeprom_read() ;
+        }
+
+        eeprom_cs=1;
+}
+
+void spi_eeprom_read_long_8(unsigned int add){
+        eeprom_cs=0;
+        eeprom.write(0x03);
+        eeprom.write(0xff&((add)>>8));
+        eeprom.write(0xff&(add));
+        
+        for(int i=15; i<30; i++) {
+            JOINT_VEL[i] = spi_eeprom_read() ;
+        }
+
+        eeprom_cs=1;
+}
+
+void spi_eeprom_read_long_9(unsigned int add){
+        eeprom_cs=0;
+        eeprom.write(0x03);
+        eeprom.write(0xff&((add)>>8));
+        eeprom.write(0xff&(add));
+                
+        for(int i=30; i<45; i++) {
+            JOINT_VEL[i] = spi_eeprom_read() ;
+        }
+
+        eeprom_cs=1;
+}
+
+void spi_eeprom_read_long_10(unsigned int add){
+        eeprom_cs=0;
+        eeprom.write(0x03);
+        eeprom.write(0xff&((add)>>8));
+        eeprom.write(0xff&(add));
+
+        for(int i=45; i<60; i++) {
+            JOINT_VEL[i] = spi_eeprom_read() ;
+        }
+
+        eeprom_cs=1;
+}
+
+void spi_eeprom_read_long_11(unsigned int add){
+        eeprom_cs=0;
+        eeprom.write(0x03);
+        eeprom.write(0xff&((add)>>8));
+        eeprom.write(0xff&(add));
+        
+        for(int i=60; i<75; i++) {
+            JOINT_VEL[i] = spi_eeprom_read() ;
+        }
+
+        eeprom_cs=1;
+}
+
+void spi_eeprom_read_long_12(unsigned int add){
+        eeprom_cs=0;
+        eeprom.write(0x03);
+        eeprom.write(0xff&((add)>>8));
+        eeprom.write(0xff&(add));
+
+        for(int i=75; i<90; i++) {
+            JOINT_VEL[i] = spi_eeprom_read() ;
+        }
+        
+        eeprom_cs=1;
+}
+        
+void spi_eeprom_read_long_13(unsigned int add){
+        eeprom_cs=0;
+        eeprom.write(0x03);
+        eeprom.write(0xff&((add)>>8));
+        eeprom.write(0xff&(add));
+        
+        for(int i=90; i<100; i++) {
+            JOINT_VEL[i] = spi_eeprom_read() ;
+        }
+        
+        VALVE_MAX_POS = spi_eeprom_read();
+        VALVE_MIN_POS = spi_eeprom_read();
+        //DDV_CENTER = (float) (flashReadInt(Rom_Sector, RID_DDV_CENTER)) * 0.1f;
+        VALVE_POS_NUM = spi_eeprom_read();
+        
+        K_SPRING = spi_eeprom_read();
+        D_DAMPER = spi_eeprom_read();
+        
+        eeprom_cs=1;
+}
\ No newline at end of file