Storage test of 24LC128 I2C EEPROM. Tested in Mbed OS 5.1

Dependencies:   I2CEeprom

Committer:
skyscraper
Date:
Sat Mar 28 00:53:36 2020 +0000
Revision:
0:a356dc5160aa
Child:
1:95752dbaadf5
modify eeprom and v1 of storage test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
skyscraper 0:a356dc5160aa 1
skyscraper 0:a356dc5160aa 2 #include "mbed.h"
skyscraper 0:a356dc5160aa 3 #include "I2CEeprom.h"
skyscraper 0:a356dc5160aa 4 #include <iostream>
skyscraper 0:a356dc5160aa 5
skyscraper 0:a356dc5160aa 6 namespace {
skyscraper 0:a356dc5160aa 7
skyscraper 0:a356dc5160aa 8 I2C i2c1(I2C_SDA, I2C_SCL );
skyscraper 0:a356dc5160aa 9 I2CEeprom eeprom(
skyscraper 0:a356dc5160aa 10 i2c1,
skyscraper 0:a356dc5160aa 11 0b10100000, // i2c bus address
skyscraper 0:a356dc5160aa 12 64, // page size
skyscraper 0:a356dc5160aa 13 16 * 1024, // memory size in bytes
skyscraper 0:a356dc5160aa 14 5 // write cycle time in ms
skyscraper 0:a356dc5160aa 15 );
skyscraper 0:a356dc5160aa 16 }
skyscraper 0:a356dc5160aa 17
skyscraper 0:a356dc5160aa 18 template <typename T>
skyscraper 0:a356dc5160aa 19 bool storage_byte_read_write_test(size_t ee_address,T const & val)
skyscraper 0:a356dc5160aa 20 {
skyscraper 0:a356dc5160aa 21 auto numWritten = eeprom.write(ee_address,val);
skyscraper 0:a356dc5160aa 22 if(numWritten != sizeof(val) ){
skyscraper 0:a356dc5160aa 23 std::cout << "failed to write eeprom\n";
skyscraper 0:a356dc5160aa 24 return false;
skyscraper 0:a356dc5160aa 25 }
skyscraper 0:a356dc5160aa 26
skyscraper 0:a356dc5160aa 27 T result;
skyscraper 0:a356dc5160aa 28 auto numRead = eeprom.read(ee_address,result);
skyscraper 0:a356dc5160aa 29 if ( numRead != sizeof(val)){
skyscraper 0:a356dc5160aa 30 std::cout << "failed to read eeprom\n";
skyscraper 0:a356dc5160aa 31 return false;
skyscraper 0:a356dc5160aa 32 }
skyscraper 0:a356dc5160aa 33 std::cout << "result = " << result << '\n';
skyscraper 0:a356dc5160aa 34 return true;
skyscraper 0:a356dc5160aa 35 }
skyscraper 0:a356dc5160aa 36
skyscraper 0:a356dc5160aa 37 bool storage_byte_read_write_test(size_t ee_address, const char* str, size_t len)
skyscraper 0:a356dc5160aa 38 {
skyscraper 0:a356dc5160aa 39 auto numWritten = eeprom.write(ee_address,str,len);
skyscraper 0:a356dc5160aa 40 if(numWritten != len ){
skyscraper 0:a356dc5160aa 41 std::cout << "failed to write eeprom\n";
skyscraper 0:a356dc5160aa 42 return false;
skyscraper 0:a356dc5160aa 43 }
skyscraper 0:a356dc5160aa 44
skyscraper 0:a356dc5160aa 45 char* result = new char[len +1];
skyscraper 0:a356dc5160aa 46
skyscraper 0:a356dc5160aa 47 if (! result){
skyscraper 0:a356dc5160aa 48 std::cout << "malloc failed\n";
skyscraper 0:a356dc5160aa 49 return false;
skyscraper 0:a356dc5160aa 50 }
skyscraper 0:a356dc5160aa 51 memset(result,'X',len);
skyscraper 0:a356dc5160aa 52 result [len] = '\0';
skyscraper 0:a356dc5160aa 53
skyscraper 0:a356dc5160aa 54 auto numRead = eeprom.read(ee_address,result,len);
skyscraper 0:a356dc5160aa 55 if ( numRead != len){
skyscraper 0:a356dc5160aa 56 std::cout << "failed to read eeprom\n";
skyscraper 0:a356dc5160aa 57 delete [] result;
skyscraper 0:a356dc5160aa 58 return false;
skyscraper 0:a356dc5160aa 59 }
skyscraper 0:a356dc5160aa 60 result [len] = '\0';
skyscraper 0:a356dc5160aa 61 bool match = strncmp(str,result,len) ==0;
skyscraper 0:a356dc5160aa 62 if ( match){
skyscraper 0:a356dc5160aa 63 std::cout << "strings match\n";
skyscraper 0:a356dc5160aa 64 }else{
skyscraper 0:a356dc5160aa 65 std::cout << "strings don't match\n";
skyscraper 0:a356dc5160aa 66 }
skyscraper 0:a356dc5160aa 67 std::cout << "result = " << result << '\n';
skyscraper 0:a356dc5160aa 68 delete [] result;
skyscraper 0:a356dc5160aa 69
skyscraper 0:a356dc5160aa 70 return true;
skyscraper 0:a356dc5160aa 71 }
skyscraper 0:a356dc5160aa 72
skyscraper 0:a356dc5160aa 73 int main()
skyscraper 0:a356dc5160aa 74 {
skyscraper 0:a356dc5160aa 75 ThisThread::sleep_for(100U);
skyscraper 0:a356dc5160aa 76 char val = 'J';
skyscraper 0:a356dc5160aa 77 if ( storage_byte_read_write_test(0x21,val) ){
skyscraper 0:a356dc5160aa 78 std::cout << "char -> Success!\n";
skyscraper 0:a356dc5160aa 79 }
skyscraper 0:a356dc5160aa 80
skyscraper 0:a356dc5160aa 81 //const char* str = "Hello*World!";
skyscraper 0:a356dc5160aa 82 constexpr char str [] =
skyscraper 0:a356dc5160aa 83 #if 0
skyscraper 0:a356dc5160aa 84 "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod "
skyscraper 0:a356dc5160aa 85 "tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim "
skyscraper 0:a356dc5160aa 86 "veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea "
skyscraper 0:a356dc5160aa 87 "commodo consequat.";
skyscraper 0:a356dc5160aa 88 #else
skyscraper 0:a356dc5160aa 89
skyscraper 0:a356dc5160aa 90 "But I must explain to you how all this mistaken idea of denouncing "
skyscraper 0:a356dc5160aa 91 "pleasure and praising pain was born and I will give you a complete "
skyscraper 0:a356dc5160aa 92 "account of the system, and expound the actual teachings of the "
skyscraper 0:a356dc5160aa 93 "great explorer of the truth, the master-builder of human happiness.";
skyscraper 0:a356dc5160aa 94 #endif
skyscraper 0:a356dc5160aa 95
skyscraper 0:a356dc5160aa 96 std::cout << "length of string = " << strlen(str) <<'\n';
skyscraper 0:a356dc5160aa 97
skyscraper 0:a356dc5160aa 98 if ( storage_byte_read_write_test(0x5,str,strlen(str)+1) ){
skyscraper 0:a356dc5160aa 99 std::cout << "c_string -> Success!\n";
skyscraper 0:a356dc5160aa 100 }
skyscraper 0:a356dc5160aa 101
skyscraper 0:a356dc5160aa 102 for(;;){;}
skyscraper 0:a356dc5160aa 103
skyscraper 0:a356dc5160aa 104 }