Andy Little
/
storage_test
Storage test of 24LC128 I2C EEPROM. Tested in Mbed OS 5.1
main.cpp@1:95752dbaadf5, 2020-03-28 (annotated)
- Committer:
- skyscraper
- Date:
- Sat Mar 28 01:51:07 2020 +0000
- Revision:
- 1:95752dbaadf5
- Parent:
- 0:a356dc5160aa
- Child:
- 5:67ab1202d0f7
minor formatting etc
Who changed what in which revision?
User | Revision | Line number | New 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 | 1:95752dbaadf5 | 77 | if ( storage_byte_read_write_test(0x50,val) ){ |
skyscraper | 0:a356dc5160aa | 78 | std::cout << "char -> Success!\n"; |
skyscraper | 0:a356dc5160aa | 79 | } |
skyscraper | 0:a356dc5160aa | 80 | |
skyscraper | 0:a356dc5160aa | 81 | constexpr char str [] = |
skyscraper | 0:a356dc5160aa | 82 | #if 0 |
skyscraper | 0:a356dc5160aa | 83 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod " |
skyscraper | 0:a356dc5160aa | 84 | "tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim " |
skyscraper | 0:a356dc5160aa | 85 | "veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea " |
skyscraper | 0:a356dc5160aa | 86 | "commodo consequat."; |
skyscraper | 0:a356dc5160aa | 87 | #else |
skyscraper | 0:a356dc5160aa | 88 | |
skyscraper | 0:a356dc5160aa | 89 | "But I must explain to you how all this mistaken idea of denouncing " |
skyscraper | 0:a356dc5160aa | 90 | "pleasure and praising pain was born and I will give you a complete " |
skyscraper | 0:a356dc5160aa | 91 | "account of the system, and expound the actual teachings of the " |
skyscraper | 0:a356dc5160aa | 92 | "great explorer of the truth, the master-builder of human happiness."; |
skyscraper | 0:a356dc5160aa | 93 | #endif |
skyscraper | 0:a356dc5160aa | 94 | |
skyscraper | 0:a356dc5160aa | 95 | std::cout << "length of string = " << strlen(str) <<'\n'; |
skyscraper | 0:a356dc5160aa | 96 | |
skyscraper | 1:95752dbaadf5 | 97 | if ( storage_byte_read_write_test(0x3800,str,strlen(str)+1) ){ |
skyscraper | 0:a356dc5160aa | 98 | std::cout << "c_string -> Success!\n"; |
skyscraper | 0:a356dc5160aa | 99 | } |
skyscraper | 0:a356dc5160aa | 100 | |
skyscraper | 0:a356dc5160aa | 101 | for(;;){;} |
skyscraper | 0:a356dc5160aa | 102 | |
skyscraper | 0:a356dc5160aa | 103 | } |