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

Dependencies:   I2CEeprom

Committer:
skyscraper
Date:
Sat Mar 28 18:03:55 2020 +0000
Revision:
5:67ab1202d0f7
Parent:
1:95752dbaadf5
Doc tidying and format wand

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