test program

Dependencies:   25LCxxx_SPI mbed

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?

UserRevisionLine numberNew 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 }