Sameera Nawarathne
/
EEPROM_kamal
memory read and write
main.cpp@0:af6898dbc5ab, 2017-02-07 (annotated)
- Committer:
- sameera0824
- Date:
- Tue Feb 07 14:08:37 2017 +0000
- Revision:
- 0:af6898dbc5ab
eep read and write
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sameera0824 | 0:af6898dbc5ab | 1 | #include "mbed.h" |
sameera0824 | 0:af6898dbc5ab | 2 | #include <string> |
sameera0824 | 0:af6898dbc5ab | 3 | #include "eeprom.h" |
sameera0824 | 0:af6898dbc5ab | 4 | |
sameera0824 | 0:af6898dbc5ab | 5 | |
sameera0824 | 0:af6898dbc5ab | 6 | #define EEPROM_ADDR 0x0 // I2c EEPROM address is 0x00 |
sameera0824 | 0:af6898dbc5ab | 7 | |
sameera0824 | 0:af6898dbc5ab | 8 | #define SDA p9 // I2C SDA pin |
sameera0824 | 0:af6898dbc5ab | 9 | #define SCL p10 // I2C SCL pin |
sameera0824 | 0:af6898dbc5ab | 10 | |
sameera0824 | 0:af6898dbc5ab | 11 | #define MIN(X,Y) ((X) < (Y) ? (X) : (Y)) |
sameera0824 | 0:af6898dbc5ab | 12 | #define MAX(X,Y) ((X) > (Y) ? (X) : (Y)) |
sameera0824 | 0:af6898dbc5ab | 13 | |
sameera0824 | 0:af6898dbc5ab | 14 | #define MB_ID 0x00 |
sameera0824 | 0:af6898dbc5ab | 15 | #define NO_OF_DEV 0x01 |
sameera0824 | 0:af6898dbc5ab | 16 | #define DEV_1_ID 0x02 |
sameera0824 | 0:af6898dbc5ab | 17 | #define DEV_1_ST 0x03 |
sameera0824 | 0:af6898dbc5ab | 18 | #define DEV_1_VAL 0x04 |
sameera0824 | 0:af6898dbc5ab | 19 | #define DEV_2_ID 0x05 |
sameera0824 | 0:af6898dbc5ab | 20 | #define DEV_2_ST 0x06 |
sameera0824 | 0:af6898dbc5ab | 21 | #define DEV_2_VAL 0x07 |
sameera0824 | 0:af6898dbc5ab | 22 | #define DEV_3_ID 0x08 |
sameera0824 | 0:af6898dbc5ab | 23 | #define DEV_3_VAL 0x09 |
sameera0824 | 0:af6898dbc5ab | 24 | #define DEV_4_ID 0x0A |
sameera0824 | 0:af6898dbc5ab | 25 | #define DEV_4_ST 0x0B |
sameera0824 | 0:af6898dbc5ab | 26 | #define DEV_4_VAL 0x0C |
sameera0824 | 0:af6898dbc5ab | 27 | |
sameera0824 | 0:af6898dbc5ab | 28 | int mb_ID = 0x00; |
sameera0824 | 0:af6898dbc5ab | 29 | int NOno_of_dev = 0x00; |
sameera0824 | 0:af6898dbc5ab | 30 | int dev_1_id = 0x00; |
sameera0824 | 0:af6898dbc5ab | 31 | int dev_1_st = 0x00; |
sameera0824 | 0:af6898dbc5ab | 32 | int dev_1_val = 0x00; |
sameera0824 | 0:af6898dbc5ab | 33 | int dev_2_id = 0x00; |
sameera0824 | 0:af6898dbc5ab | 34 | int dev_2_st = 0x00; |
sameera0824 | 0:af6898dbc5ab | 35 | int dev_2_val = 0x00; |
sameera0824 | 0:af6898dbc5ab | 36 | int dev_3_id = 0x00; |
sameera0824 | 0:af6898dbc5ab | 37 | int dev_3_st = 0x00; |
sameera0824 | 0:af6898dbc5ab | 38 | int dev_3_val = 0x00; |
sameera0824 | 0:af6898dbc5ab | 39 | int dev_4_id = 0x00; |
sameera0824 | 0:af6898dbc5ab | 40 | int dev_5_st = 0x00; |
sameera0824 | 0:af6898dbc5ab | 41 | int dev_6_val = 0x00; |
sameera0824 | 0:af6898dbc5ab | 42 | |
sameera0824 | 0:af6898dbc5ab | 43 | |
sameera0824 | 0:af6898dbc5ab | 44 | typedef struct _MyData { |
sameera0824 | 0:af6898dbc5ab | 45 | int16_t sdata; |
sameera0824 | 0:af6898dbc5ab | 46 | int32_t idata; |
sameera0824 | 0:af6898dbc5ab | 47 | float fdata; |
sameera0824 | 0:af6898dbc5ab | 48 | } MyData; |
sameera0824 | 0:af6898dbc5ab | 49 | |
sameera0824 | 0:af6898dbc5ab | 50 | |
sameera0824 | 0:af6898dbc5ab | 51 | //static void myerror(std::string msg) |
sameera0824 | 0:af6898dbc5ab | 52 | //{ |
sameera0824 | 0:af6898dbc5ab | 53 | // printf("Error %s\n",msg.c_str()); |
sameera0824 | 0:af6898dbc5ab | 54 | // exit(1); |
sameera0824 | 0:af6898dbc5ab | 55 | //} |
sameera0824 | 0:af6898dbc5ab | 56 | |
sameera0824 | 0:af6898dbc5ab | 57 | int ID_Map(int8_t id) |
sameera0824 | 0:af6898dbc5ab | 58 | { |
sameera0824 | 0:af6898dbc5ab | 59 | int return_val =0; |
sameera0824 | 0:af6898dbc5ab | 60 | |
sameera0824 | 0:af6898dbc5ab | 61 | if (id == 0x01) //ethernet |
sameera0824 | 0:af6898dbc5ab | 62 | return_val=DEV_1_ID; |
sameera0824 | 0:af6898dbc5ab | 63 | |
sameera0824 | 0:af6898dbc5ab | 64 | else if (id == 0x02) //CAN |
sameera0824 | 0:af6898dbc5ab | 65 | return_val=DEV_2_ID; |
sameera0824 | 0:af6898dbc5ab | 66 | |
sameera0824 | 0:af6898dbc5ab | 67 | else if (id ==0x03) //tem |
sameera0824 | 0:af6898dbc5ab | 68 | return_val=DEV_3_ID; |
sameera0824 | 0:af6898dbc5ab | 69 | |
sameera0824 | 0:af6898dbc5ab | 70 | else if (id == 0x04) //aceslometer |
sameera0824 | 0:af6898dbc5ab | 71 | return_val=DEV_3_ID; |
sameera0824 | 0:af6898dbc5ab | 72 | |
sameera0824 | 0:af6898dbc5ab | 73 | else |
sameera0824 | 0:af6898dbc5ab | 74 | return_val= -1; |
sameera0824 | 0:af6898dbc5ab | 75 | |
sameera0824 | 0:af6898dbc5ab | 76 | return return_val; |
sameera0824 | 0:af6898dbc5ab | 77 | } |
sameera0824 | 0:af6898dbc5ab | 78 | |
sameera0824 | 0:af6898dbc5ab | 79 | bool healthWrite( int8_t id, int8_t status, int8_t val) |
sameera0824 | 0:af6898dbc5ab | 80 | { |
sameera0824 | 0:af6898dbc5ab | 81 | EEPROM eep(SDA,SCL,EEPROM_ADDR,EEPROM::T24C128); // 24C64 eeprom with sda = p9 and scl = p10 |
sameera0824 | 0:af6898dbc5ab | 82 | int8_t add = ID_Map(id); |
sameera0824 | 0:af6898dbc5ab | 83 | bool return_val = false; |
sameera0824 | 0:af6898dbc5ab | 84 | if (add == 0) |
sameera0824 | 0:af6898dbc5ab | 85 | { |
sameera0824 | 0:af6898dbc5ab | 86 | printf("\r\n EEPROM not working..!!!"); |
sameera0824 | 0:af6898dbc5ab | 87 | return_val = false; |
sameera0824 | 0:af6898dbc5ab | 88 | } |
sameera0824 | 0:af6898dbc5ab | 89 | else if (add == -1) |
sameera0824 | 0:af6898dbc5ab | 90 | { |
sameera0824 | 0:af6898dbc5ab | 91 | printf("\r\n Wrong Memory address..!!!"); |
sameera0824 | 0:af6898dbc5ab | 92 | return_val = false; |
sameera0824 | 0:af6898dbc5ab | 93 | } |
sameera0824 | 0:af6898dbc5ab | 94 | else |
sameera0824 | 0:af6898dbc5ab | 95 | { |
sameera0824 | 0:af6898dbc5ab | 96 | |
sameera0824 | 0:af6898dbc5ab | 97 | eep.write(add,id); |
sameera0824 | 0:af6898dbc5ab | 98 | if(eep.getError() != 0) |
sameera0824 | 0:af6898dbc5ab | 99 | return_val = false; |
sameera0824 | 0:af6898dbc5ab | 100 | else |
sameera0824 | 0:af6898dbc5ab | 101 | return_val = true; |
sameera0824 | 0:af6898dbc5ab | 102 | |
sameera0824 | 0:af6898dbc5ab | 103 | eep.write(add+1,status); |
sameera0824 | 0:af6898dbc5ab | 104 | if(eep.getError() != 0) |
sameera0824 | 0:af6898dbc5ab | 105 | return_val = false; |
sameera0824 | 0:af6898dbc5ab | 106 | else |
sameera0824 | 0:af6898dbc5ab | 107 | return_val = true; |
sameera0824 | 0:af6898dbc5ab | 108 | |
sameera0824 | 0:af6898dbc5ab | 109 | eep.write(add+2,val); |
sameera0824 | 0:af6898dbc5ab | 110 | if(eep.getError() != 0) |
sameera0824 | 0:af6898dbc5ab | 111 | return_val = false; |
sameera0824 | 0:af6898dbc5ab | 112 | else |
sameera0824 | 0:af6898dbc5ab | 113 | return_val = true; |
sameera0824 | 0:af6898dbc5ab | 114 | } |
sameera0824 | 0:af6898dbc5ab | 115 | |
sameera0824 | 0:af6898dbc5ab | 116 | //printf("\r\n Memory \r\n"); |
sameera0824 | 0:af6898dbc5ab | 117 | //printf("\r\n %3d \r\n",i); |
sameera0824 | 0:af6898dbc5ab | 118 | //printf("\r\n Value is \r\n"); |
sameera0824 | 0:af6898dbc5ab | 119 | //printf("\r\n %3d \r\n",ival); |
sameera0824 | 0:af6898dbc5ab | 120 | |
sameera0824 | 0:af6898dbc5ab | 121 | return return_val; |
sameera0824 | 0:af6898dbc5ab | 122 | } |
sameera0824 | 0:af6898dbc5ab | 123 | |
sameera0824 | 0:af6898dbc5ab | 124 | int healthReadStatus( int8_t id) |
sameera0824 | 0:af6898dbc5ab | 125 | { |
sameera0824 | 0:af6898dbc5ab | 126 | EEPROM eep(SDA,SCL,EEPROM_ADDR,EEPROM::T24C128); // 24C64 eeprom with sda = p9 and scl = p10 |
sameera0824 | 0:af6898dbc5ab | 127 | int8_t add = ID_Map(id); |
sameera0824 | 0:af6898dbc5ab | 128 | int return_val = -1; |
sameera0824 | 0:af6898dbc5ab | 129 | int8_t Status; |
sameera0824 | 0:af6898dbc5ab | 130 | if (add == 0) |
sameera0824 | 0:af6898dbc5ab | 131 | { |
sameera0824 | 0:af6898dbc5ab | 132 | printf("\r\n EEPROM not working..!!!"); |
sameera0824 | 0:af6898dbc5ab | 133 | return_val = -1; |
sameera0824 | 0:af6898dbc5ab | 134 | } |
sameera0824 | 0:af6898dbc5ab | 135 | else if (add == -1) |
sameera0824 | 0:af6898dbc5ab | 136 | { |
sameera0824 | 0:af6898dbc5ab | 137 | printf("\r\n Wrong Memory address..!!!"); |
sameera0824 | 0:af6898dbc5ab | 138 | return_val = -1; |
sameera0824 | 0:af6898dbc5ab | 139 | } |
sameera0824 | 0:af6898dbc5ab | 140 | else |
sameera0824 | 0:af6898dbc5ab | 141 | { |
sameera0824 | 0:af6898dbc5ab | 142 | eep.read(add+1,Status); |
sameera0824 | 0:af6898dbc5ab | 143 | if (eep.getError() != 0) |
sameera0824 | 0:af6898dbc5ab | 144 | return_val = -1; |
sameera0824 | 0:af6898dbc5ab | 145 | |
sameera0824 | 0:af6898dbc5ab | 146 | else return_val=Status; |
sameera0824 | 0:af6898dbc5ab | 147 | } |
sameera0824 | 0:af6898dbc5ab | 148 | return return_val; |
sameera0824 | 0:af6898dbc5ab | 149 | |
sameera0824 | 0:af6898dbc5ab | 150 | } |
sameera0824 | 0:af6898dbc5ab | 151 | int healthReadValue( int8_t id) |
sameera0824 | 0:af6898dbc5ab | 152 | { |
sameera0824 | 0:af6898dbc5ab | 153 | EEPROM eep(SDA,SCL,EEPROM_ADDR,EEPROM::T24C128); // 24C64 eeprom with sda = p9 and scl = p10 |
sameera0824 | 0:af6898dbc5ab | 154 | int8_t add = ID_Map(id); |
sameera0824 | 0:af6898dbc5ab | 155 | int8_t val; |
sameera0824 | 0:af6898dbc5ab | 156 | int8_t return_val = -1; |
sameera0824 | 0:af6898dbc5ab | 157 | if (add == 0) |
sameera0824 | 0:af6898dbc5ab | 158 | { |
sameera0824 | 0:af6898dbc5ab | 159 | printf("\r\n EEPROM not working..!!!"); |
sameera0824 | 0:af6898dbc5ab | 160 | return_val = -1; |
sameera0824 | 0:af6898dbc5ab | 161 | } |
sameera0824 | 0:af6898dbc5ab | 162 | else if (add == -1) |
sameera0824 | 0:af6898dbc5ab | 163 | { |
sameera0824 | 0:af6898dbc5ab | 164 | printf("\r\n Wrong Memory address request..!!!"); |
sameera0824 | 0:af6898dbc5ab | 165 | return_val = -1; |
sameera0824 | 0:af6898dbc5ab | 166 | } |
sameera0824 | 0:af6898dbc5ab | 167 | else |
sameera0824 | 0:af6898dbc5ab | 168 | { |
sameera0824 | 0:af6898dbc5ab | 169 | eep.read(add+2,val); |
sameera0824 | 0:af6898dbc5ab | 170 | if(eep.getError() != 0) |
sameera0824 | 0:af6898dbc5ab | 171 | return_val = -1; |
sameera0824 | 0:af6898dbc5ab | 172 | |
sameera0824 | 0:af6898dbc5ab | 173 | else |
sameera0824 | 0:af6898dbc5ab | 174 | return_val = val; |
sameera0824 | 0:af6898dbc5ab | 175 | |
sameera0824 | 0:af6898dbc5ab | 176 | } |
sameera0824 | 0:af6898dbc5ab | 177 | return return_val; |
sameera0824 | 0:af6898dbc5ab | 178 | } |
sameera0824 | 0:af6898dbc5ab | 179 | |
sameera0824 | 0:af6898dbc5ab | 180 | int main() { |
sameera0824 | 0:af6898dbc5ab | 181 | EEPROM eep(SDA,SCL,EEPROM_ADDR,EEPROM::T24C128); // 24C64 eeprom with sda = p9 and scl = p10 |
sameera0824 | 0:af6898dbc5ab | 182 | //uint8_t data[256],data_r[256]; |
sameera0824 | 0:af6898dbc5ab | 183 | //int8_t ival; |
sameera0824 | 0:af6898dbc5ab | 184 | //uint16_t s; |
sameera0824 | 0:af6898dbc5ab | 185 | //int16_t sdata,sdata_r; |
sameera0824 | 0:af6898dbc5ab | 186 | //int32_t ldata[1024]; |
sameera0824 | 0:af6898dbc5ab | 187 | int32_t max_size,eeprom_size; |
sameera0824 | 0:af6898dbc5ab | 188 | //uint32_t addr; |
sameera0824 | 0:af6898dbc5ab | 189 | //int32_t idata,idata_r; |
sameera0824 | 0:af6898dbc5ab | 190 | //uint32_t i; //,j,k,l,t,id; |
sameera0824 | 0:af6898dbc5ab | 191 | //float fdata,fdata_r; |
sameera0824 | 0:af6898dbc5ab | 192 | //MyData md,md_r; |
sameera0824 | 0:af6898dbc5ab | 193 | |
sameera0824 | 0:af6898dbc5ab | 194 | eeprom_size = eep.getSize(); |
sameera0824 | 0:af6898dbc5ab | 195 | max_size = MIN(eeprom_size,256); |
sameera0824 | 0:af6898dbc5ab | 196 | |
sameera0824 | 0:af6898dbc5ab | 197 | printf("\r\n Test EEPROM I2C model %s of %d bytes\r\n",eep.getName(),eeprom_size); |
sameera0824 | 0:af6898dbc5ab | 198 | |
sameera0824 | 0:af6898dbc5ab | 199 | int8_t id =0x02; |
sameera0824 | 0:af6898dbc5ab | 200 | |
sameera0824 | 0:af6898dbc5ab | 201 | //healthWrite( int8_t id, int8_t status, int8_t val) |
sameera0824 | 0:af6898dbc5ab | 202 | bool helthW = healthWrite( id ,0x01, 0x05); |
sameera0824 | 0:af6898dbc5ab | 203 | |
sameera0824 | 0:af6898dbc5ab | 204 | if (helthW == true) |
sameera0824 | 0:af6898dbc5ab | 205 | { |
sameera0824 | 0:af6898dbc5ab | 206 | printf("\r\n helth write successfull \r\n"); |
sameera0824 | 0:af6898dbc5ab | 207 | } |
sameera0824 | 0:af6898dbc5ab | 208 | else |
sameera0824 | 0:af6898dbc5ab | 209 | { |
sameera0824 | 0:af6898dbc5ab | 210 | printf("\r\n helth write NOT successfull\r\n"); |
sameera0824 | 0:af6898dbc5ab | 211 | } |
sameera0824 | 0:af6898dbc5ab | 212 | /////////////////////////////////////////////////////////////////////// |
sameera0824 | 0:af6898dbc5ab | 213 | int helthRS = healthReadStatus(id); |
sameera0824 | 0:af6898dbc5ab | 214 | |
sameera0824 | 0:af6898dbc5ab | 215 | if (helthRS == -1) |
sameera0824 | 0:af6898dbc5ab | 216 | { |
sameera0824 | 0:af6898dbc5ab | 217 | printf("\r\n helth read NOT successfull...!!! \r\n"); |
sameera0824 | 0:af6898dbc5ab | 218 | } |
sameera0824 | 0:af6898dbc5ab | 219 | else |
sameera0824 | 0:af6898dbc5ab | 220 | { |
sameera0824 | 0:af6898dbc5ab | 221 | printf("\r\n device %X Status %X \r\n",id,helthRS); |
sameera0824 | 0:af6898dbc5ab | 222 | } |
sameera0824 | 0:af6898dbc5ab | 223 | ///////////////////////////////////////////////////////////////////// |
sameera0824 | 0:af6898dbc5ab | 224 | int helthRV = healthReadValue(id); |
sameera0824 | 0:af6898dbc5ab | 225 | if (helthRV == -1) |
sameera0824 | 0:af6898dbc5ab | 226 | { |
sameera0824 | 0:af6898dbc5ab | 227 | printf("\r\n helth read NOT successfull...!!! \r\n"); |
sameera0824 | 0:af6898dbc5ab | 228 | } |
sameera0824 | 0:af6898dbc5ab | 229 | else |
sameera0824 | 0:af6898dbc5ab | 230 | { |
sameera0824 | 0:af6898dbc5ab | 231 | printf("\r\n device %X Value %X \r\n",id, helthRV); |
sameera0824 | 0:af6898dbc5ab | 232 | } |
sameera0824 | 0:af6898dbc5ab | 233 | ////////////////////////////////////////////////////////////////// |
sameera0824 | 0:af6898dbc5ab | 234 | // |
sameera0824 | 0:af6898dbc5ab | 235 | // i=2; |
sameera0824 | 0:af6898dbc5ab | 236 | // |
sameera0824 | 0:af6898dbc5ab | 237 | // eep.read(i,ival); |
sameera0824 | 0:af6898dbc5ab | 238 | // if(eep.getError() != 0) |
sameera0824 | 0:af6898dbc5ab | 239 | // myerror(eep.getErrorMessage()); |
sameera0824 | 0:af6898dbc5ab | 240 | // |
sameera0824 | 0:af6898dbc5ab | 241 | // printf("\r\n Memory \r\n"); |
sameera0824 | 0:af6898dbc5ab | 242 | // printf("\r\n %3d \r\n",i); |
sameera0824 | 0:af6898dbc5ab | 243 | // printf("\r\n Value is \r\n"); |
sameera0824 | 0:af6898dbc5ab | 244 | // printf("\r\n %3d \r\n",ival); |
sameera0824 | 0:af6898dbc5ab | 245 | // |
sameera0824 | 0:af6898dbc5ab | 246 | // ival = 3; |
sameera0824 | 0:af6898dbc5ab | 247 | // |
sameera0824 | 0:af6898dbc5ab | 248 | // eep.write(i,ival); |
sameera0824 | 0:af6898dbc5ab | 249 | // if(eep.getError() != 0) |
sameera0824 | 0:af6898dbc5ab | 250 | // myerror(eep.getErrorMessage()); |
sameera0824 | 0:af6898dbc5ab | 251 | // |
sameera0824 | 0:af6898dbc5ab | 252 | // printf("\r\n Memory \r\n"); |
sameera0824 | 0:af6898dbc5ab | 253 | // printf("\r\n %3d \r\n",i); |
sameera0824 | 0:af6898dbc5ab | 254 | // printf("\r\n Value is \r\n"); |
sameera0824 | 0:af6898dbc5ab | 255 | // printf("\r\n %3d \r\n",ival); |
sameera0824 | 0:af6898dbc5ab | 256 | |
sameera0824 | 0:af6898dbc5ab | 257 | |
sameera0824 | 0:af6898dbc5ab | 258 | while(1) { |
sameera0824 | 0:af6898dbc5ab | 259 | |
sameera0824 | 0:af6898dbc5ab | 260 | } |
sameera0824 | 0:af6898dbc5ab | 261 | } |