Andy Little
/
storage_test
Storage test of 24LC128 I2C EEPROM. Tested in Mbed OS 5.1
main.cpp@5:67ab1202d0f7, 2020-03-28 (annotated)
- 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?
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 | 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 | } |