test program
Dependencies: 25LCxxx_SPI mbed
main.cpp@0:57d1e986a50c, 2015-07-17 (annotated)
- Committer:
- mariob
- Date:
- Fri Jul 17 09:48:38 2015 +0000
- Revision:
- 0:57d1e986a50c
test of the enhanced 25LCxxx driver
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mariob | 0:57d1e986a50c | 1 | /** |
mariob | 0:57d1e986a50c | 2 | This code tests the latest version of the library Ser25lcxxx, using |
mariob | 0:57d1e986a50c | 3 | a 25LC256 eeprom (256KB) |
mariob | 0:57d1e986a50c | 4 | |
mariob | 0:57d1e986a50c | 5 | author: Mario Bambagini |
mariob | 0:57d1e986a50c | 6 | */ |
mariob | 0:57d1e986a50c | 7 | |
mariob | 0:57d1e986a50c | 8 | #include "mbed.h" |
mariob | 0:57d1e986a50c | 9 | |
mariob | 0:57d1e986a50c | 10 | #include "Ser25lcxxx.h" |
mariob | 0:57d1e986a50c | 11 | |
mariob | 0:57d1e986a50c | 12 | |
mariob | 0:57d1e986a50c | 13 | void printMemory (unsigned char *s, int len); |
mariob | 0:57d1e986a50c | 14 | |
mariob | 0:57d1e986a50c | 15 | void waitKey(); |
mariob | 0:57d1e986a50c | 16 | |
mariob | 0:57d1e986a50c | 17 | |
mariob | 0:57d1e986a50c | 18 | #define PAGESIZE 64 |
mariob | 0:57d1e986a50c | 19 | #define PAGENUMBER 4096 |
mariob | 0:57d1e986a50c | 20 | #define EEPROM_SIZE (PAGESIZE*PAGENUMBER) |
mariob | 0:57d1e986a50c | 21 | |
mariob | 0:57d1e986a50c | 22 | #define BUFFER_SIZE (PAGESIZE*4) |
mariob | 0:57d1e986a50c | 23 | |
mariob | 0:57d1e986a50c | 24 | |
mariob | 0:57d1e986a50c | 25 | struct test_serialization { |
mariob | 0:57d1e986a50c | 26 | unsigned char data_1; |
mariob | 0:57d1e986a50c | 27 | unsigned int data_2; |
mariob | 0:57d1e986a50c | 28 | unsigned long data_3; |
mariob | 0:57d1e986a50c | 29 | }; |
mariob | 0:57d1e986a50c | 30 | |
mariob | 0:57d1e986a50c | 31 | int main() |
mariob | 0:57d1e986a50c | 32 | { |
mariob | 0:57d1e986a50c | 33 | unsigned char buf[BUFFER_SIZE]; |
mariob | 0:57d1e986a50c | 34 | memset(buf, 0x00, BUFFER_SIZE); |
mariob | 0:57d1e986a50c | 35 | |
mariob | 0:57d1e986a50c | 36 | printf("******* START *******\r\n\r\n"); |
mariob | 0:57d1e986a50c | 37 | |
mariob | 0:57d1e986a50c | 38 | /**************************** INITIALIZATION ****************************/ |
mariob | 0:57d1e986a50c | 39 | printf("INIT\r\n"); |
mariob | 0:57d1e986a50c | 40 | Ser25LCxxx flash(p7, p5, p6, p9, PAGENUMBER, PAGESIZE); |
mariob | 0:57d1e986a50c | 41 | |
mariob | 0:57d1e986a50c | 42 | waitKey(); |
mariob | 0:57d1e986a50c | 43 | |
mariob | 0:57d1e986a50c | 44 | /****************************** CONFIG TEST ******************************/ |
mariob | 0:57d1e986a50c | 45 | printf("EEPROM fully writable: %s\r\n", |
mariob | 0:57d1e986a50c | 46 | (flash.isFullyWritable()?"YES":"NO")); |
mariob | 0:57d1e986a50c | 47 | printf("EEPROM half writable: %s\r\n",(flash.isHalfWritable()?"YES":"NO")); |
mariob | 0:57d1e986a50c | 48 | printf("EEPROM not writable: %s\r\n", (flash.isNotWritable()?"YES":"NO")); |
mariob | 0:57d1e986a50c | 49 | waitKey(); |
mariob | 0:57d1e986a50c | 50 | |
mariob | 0:57d1e986a50c | 51 | /***************************** READING TEST *****************************/ |
mariob | 0:57d1e986a50c | 52 | printf("READ 2 pages:\r\n"); |
mariob | 0:57d1e986a50c | 53 | int num = flash.read(0, 2*PAGESIZE, buf); |
mariob | 0:57d1e986a50c | 54 | printMemory(buf,2*PAGESIZE); |
mariob | 0:57d1e986a50c | 55 | printf("%d bytes: %s\r\n", num, ((num==(2*PAGESIZE))?"OK":"NOT OK")); |
mariob | 0:57d1e986a50c | 56 | |
mariob | 0:57d1e986a50c | 57 | waitKey(); |
mariob | 0:57d1e986a50c | 58 | |
mariob | 0:57d1e986a50c | 59 | /***************************** WRITING TEST *****************************/ |
mariob | 0:57d1e986a50c | 60 | printf("WRITE first 20 bytes\r\n"); |
mariob | 0:57d1e986a50c | 61 | memset(buf, 0x01, 20); |
mariob | 0:57d1e986a50c | 62 | num = flash.write(0, 20, buf); |
mariob | 0:57d1e986a50c | 63 | printf("%d bytes: %s\r\n\r\n", num, ((num==20)?"OK":"NOT OK")); |
mariob | 0:57d1e986a50c | 64 | |
mariob | 0:57d1e986a50c | 65 | printf("WRITE 10 bytes within a page (from addr 30)\r\n"); |
mariob | 0:57d1e986a50c | 66 | memset(buf, 0x02, 10); |
mariob | 0:57d1e986a50c | 67 | num = flash.write(30, 10, buf); |
mariob | 0:57d1e986a50c | 68 | printf("%d bytes: %s\r\n\r\n", num, ((num==10)?"OK":"NOT OK")); |
mariob | 0:57d1e986a50c | 69 | |
mariob | 0:57d1e986a50c | 70 | printf("WRITE 30 bytes on two consecutive pages (from addr 50)\r\n"); |
mariob | 0:57d1e986a50c | 71 | memset(buf, 0x03, 30); |
mariob | 0:57d1e986a50c | 72 | num = flash.write(50, 30, buf); |
mariob | 0:57d1e986a50c | 73 | printf("%d bytes: %s\r\n\r\n", num, ((num==30)?"OK":"NOT OK")); |
mariob | 0:57d1e986a50c | 74 | |
mariob | 0:57d1e986a50c | 75 | printf("READ 2 pages:\r\n"); |
mariob | 0:57d1e986a50c | 76 | num = flash.read(0, 2*PAGESIZE, buf); |
mariob | 0:57d1e986a50c | 77 | printMemory(buf,2*PAGESIZE); |
mariob | 0:57d1e986a50c | 78 | printf("%d bytes: %s\r\n", num, ((num==(2*PAGESIZE))?"OK":"NOT OK")); |
mariob | 0:57d1e986a50c | 79 | |
mariob | 0:57d1e986a50c | 80 | waitKey(); |
mariob | 0:57d1e986a50c | 81 | |
mariob | 0:57d1e986a50c | 82 | /*************************** ERASING PAGE TEST ***************************/ |
mariob | 0:57d1e986a50c | 83 | printf("ERASE second page\r\n"); |
mariob | 0:57d1e986a50c | 84 | num = flash.clearPage(1); |
mariob | 0:57d1e986a50c | 85 | printf("%d bytes: %s\r\n", num, ((num==PAGESIZE)?"OK":"NOT OK")); |
mariob | 0:57d1e986a50c | 86 | |
mariob | 0:57d1e986a50c | 87 | printf("READ 2 pages:\r\n"); |
mariob | 0:57d1e986a50c | 88 | num = flash.read(0, 2*PAGESIZE, buf); |
mariob | 0:57d1e986a50c | 89 | printMemory(buf,2*PAGESIZE); |
mariob | 0:57d1e986a50c | 90 | printf("%d bytes: %s\r\n", num, ((num==(2*PAGESIZE))?"OK":"NOT OK")); |
mariob | 0:57d1e986a50c | 91 | |
mariob | 0:57d1e986a50c | 92 | waitKey(); |
mariob | 0:57d1e986a50c | 93 | |
mariob | 0:57d1e986a50c | 94 | /************************** SERIALIZATION TEST **************************/ |
mariob | 0:57d1e986a50c | 95 | struct test_serialization var_ser, var_deser; |
mariob | 0:57d1e986a50c | 96 | var_ser.data_1 = 0xAA; |
mariob | 0:57d1e986a50c | 97 | var_ser.data_2 = 0x7777; |
mariob | 0:57d1e986a50c | 98 | var_ser.data_3 = 0x33333333; |
mariob | 0:57d1e986a50c | 99 | printf("Serialize data at addr 20\r\n"); |
mariob | 0:57d1e986a50c | 100 | num = flash.write(20, sizeof(test_serialization), |
mariob | 0:57d1e986a50c | 101 | (const unsigned char*)(&var_ser)); |
mariob | 0:57d1e986a50c | 102 | printf("%d bytes: %s\r\n", num, |
mariob | 0:57d1e986a50c | 103 | ((num==sizeof(test_serialization))?"OK":"NOT OK")); |
mariob | 0:57d1e986a50c | 104 | var_deser.data_1 = 0; |
mariob | 0:57d1e986a50c | 105 | var_deser.data_2 = 0; |
mariob | 0:57d1e986a50c | 106 | var_deser.data_3 = 0; |
mariob | 0:57d1e986a50c | 107 | printf("De-serialize data from addr 20\r\n"); |
mariob | 0:57d1e986a50c | 108 | num = flash.read(20, sizeof(test_serialization), |
mariob | 0:57d1e986a50c | 109 | (unsigned char*)(&var_deser)); |
mariob | 0:57d1e986a50c | 110 | printf("%d bytes: %s\r\n", num, |
mariob | 0:57d1e986a50c | 111 | ((num==sizeof(test_serialization))?"OK":"NOT OK")); |
mariob | 0:57d1e986a50c | 112 | printf("Same data: %s\r\n", (((var_ser.data_1==var_deser.data_1) && |
mariob | 0:57d1e986a50c | 113 | (var_ser.data_2==var_deser.data_2) && |
mariob | 0:57d1e986a50c | 114 | (var_ser.data_3==var_deser.data_3))? |
mariob | 0:57d1e986a50c | 115 | "OK":"NOT OK")); |
mariob | 0:57d1e986a50c | 116 | printf("READ 2 pages:\r\n"); |
mariob | 0:57d1e986a50c | 117 | num = flash.read(0, 2*PAGESIZE, buf); |
mariob | 0:57d1e986a50c | 118 | printMemory(buf,2*PAGESIZE); |
mariob | 0:57d1e986a50c | 119 | printf("%d bytes: %s\r\n", num, ((num==(2*PAGESIZE))?"OK":"NOT OK")); |
mariob | 0:57d1e986a50c | 120 | |
mariob | 0:57d1e986a50c | 121 | waitKey(); |
mariob | 0:57d1e986a50c | 122 | |
mariob | 0:57d1e986a50c | 123 | /************************** ERASING MEMORY TEST **************************/ |
mariob | 0:57d1e986a50c | 124 | printf("ERASE memory\r\n"); |
mariob | 0:57d1e986a50c | 125 | num = flash.clearMem(); |
mariob | 0:57d1e986a50c | 126 | printf("%d bytes: %s\r\n", num, ((num==(EEPROM_SIZE))?"OK":"NOT OK")); |
mariob | 0:57d1e986a50c | 127 | |
mariob | 0:57d1e986a50c | 128 | printf("READ 2 pages:\r\n"); |
mariob | 0:57d1e986a50c | 129 | num = flash.read(0, 2*PAGESIZE, buf); |
mariob | 0:57d1e986a50c | 130 | printMemory(buf,2*PAGESIZE); |
mariob | 0:57d1e986a50c | 131 | printf("%d bytes: %s\r\n", num, ((num==(2*PAGESIZE))?"OK":"NOT OK")); |
mariob | 0:57d1e986a50c | 132 | |
mariob | 0:57d1e986a50c | 133 | waitKey(); |
mariob | 0:57d1e986a50c | 134 | |
mariob | 0:57d1e986a50c | 135 | /**************************** PROTECTION TEST ****************************/ |
mariob | 0:57d1e986a50c | 136 | |
mariob | 0:57d1e986a50c | 137 | printf("Setting whole EEPROM as not writable\r\n"); |
mariob | 0:57d1e986a50c | 138 | flash.setNotWritable(); |
mariob | 0:57d1e986a50c | 139 | |
mariob | 0:57d1e986a50c | 140 | printf("EEPROM not writable: %s\r\n", (flash.isNotWritable()?"YES":"NO")); |
mariob | 0:57d1e986a50c | 141 | |
mariob | 0:57d1e986a50c | 142 | printf("WRITE first page\r\n"); |
mariob | 0:57d1e986a50c | 143 | memset(buf, 0x00, PAGESIZE); |
mariob | 0:57d1e986a50c | 144 | num = flash.write(0, PAGESIZE, buf); |
mariob | 0:57d1e986a50c | 145 | printf("%d bytes: %s\r\n", num, ((num==(PAGESIZE))?"OK":"NOT OK")); |
mariob | 0:57d1e986a50c | 146 | |
mariob | 0:57d1e986a50c | 147 | printf("READ 2 pages:\r\n"); |
mariob | 0:57d1e986a50c | 148 | num = flash.read(0, 2*PAGESIZE, buf); |
mariob | 0:57d1e986a50c | 149 | printMemory(buf,2*PAGESIZE); |
mariob | 0:57d1e986a50c | 150 | printf("%d bytes: %s\r\n", num, ((num==(2*PAGESIZE))?"OK":"NOT OK")); |
mariob | 0:57d1e986a50c | 151 | printf("DATA IS NOT CHANGED\r\n"); |
mariob | 0:57d1e986a50c | 152 | |
mariob | 0:57d1e986a50c | 153 | printf("Setting whole EEPROM as writable\r\n"); |
mariob | 0:57d1e986a50c | 154 | flash.setFullyWritable(); |
mariob | 0:57d1e986a50c | 155 | |
mariob | 0:57d1e986a50c | 156 | printf("\r\nDONE\r\n"); |
mariob | 0:57d1e986a50c | 157 | |
mariob | 0:57d1e986a50c | 158 | while(1); |
mariob | 0:57d1e986a50c | 159 | } |
mariob | 0:57d1e986a50c | 160 | |
mariob | 0:57d1e986a50c | 161 | void printMemory (unsigned char *s, int len) |
mariob | 0:57d1e986a50c | 162 | { |
mariob | 0:57d1e986a50c | 163 | int i = 0; |
mariob | 0:57d1e986a50c | 164 | while (i<len) { |
mariob | 0:57d1e986a50c | 165 | printf("%02X ", s[i]); |
mariob | 0:57d1e986a50c | 166 | if (((++i)%32)==0) |
mariob | 0:57d1e986a50c | 167 | printf("\r\n"); |
mariob | 0:57d1e986a50c | 168 | } |
mariob | 0:57d1e986a50c | 169 | } |
mariob | 0:57d1e986a50c | 170 | |
mariob | 0:57d1e986a50c | 171 | void waitKey () |
mariob | 0:57d1e986a50c | 172 | { |
mariob | 0:57d1e986a50c | 173 | char a; |
mariob | 0:57d1e986a50c | 174 | printf("Press a key to continue...\r\n\r\n"); |
mariob | 0:57d1e986a50c | 175 | scanf("%c", &a); |
mariob | 0:57d1e986a50c | 176 | } |