test program
Dependencies: 25LCxxx_SPI mbed
main.cpp
- Committer:
- mariob
- Date:
- 2015-07-17
- Revision:
- 0:57d1e986a50c
File content as of revision 0:57d1e986a50c:
/**
This code tests the latest version of the library Ser25lcxxx, using
a 25LC256 eeprom (256KB)
author: Mario Bambagini
*/
#include "mbed.h"
#include "Ser25lcxxx.h"
void printMemory (unsigned char *s, int len);
void waitKey();
#define PAGESIZE 64
#define PAGENUMBER 4096
#define EEPROM_SIZE (PAGESIZE*PAGENUMBER)
#define BUFFER_SIZE (PAGESIZE*4)
struct test_serialization {
unsigned char data_1;
unsigned int data_2;
unsigned long data_3;
};
int main()
{
unsigned char buf[BUFFER_SIZE];
memset(buf, 0x00, BUFFER_SIZE);
printf("******* START *******\r\n\r\n");
/**************************** INITIALIZATION ****************************/
printf("INIT\r\n");
Ser25LCxxx flash(p7, p5, p6, p9, PAGENUMBER, PAGESIZE);
waitKey();
/****************************** CONFIG TEST ******************************/
printf("EEPROM fully writable: %s\r\n",
(flash.isFullyWritable()?"YES":"NO"));
printf("EEPROM half writable: %s\r\n",(flash.isHalfWritable()?"YES":"NO"));
printf("EEPROM not writable: %s\r\n", (flash.isNotWritable()?"YES":"NO"));
waitKey();
/***************************** READING TEST *****************************/
printf("READ 2 pages:\r\n");
int num = flash.read(0, 2*PAGESIZE, buf);
printMemory(buf,2*PAGESIZE);
printf("%d bytes: %s\r\n", num, ((num==(2*PAGESIZE))?"OK":"NOT OK"));
waitKey();
/***************************** WRITING TEST *****************************/
printf("WRITE first 20 bytes\r\n");
memset(buf, 0x01, 20);
num = flash.write(0, 20, buf);
printf("%d bytes: %s\r\n\r\n", num, ((num==20)?"OK":"NOT OK"));
printf("WRITE 10 bytes within a page (from addr 30)\r\n");
memset(buf, 0x02, 10);
num = flash.write(30, 10, buf);
printf("%d bytes: %s\r\n\r\n", num, ((num==10)?"OK":"NOT OK"));
printf("WRITE 30 bytes on two consecutive pages (from addr 50)\r\n");
memset(buf, 0x03, 30);
num = flash.write(50, 30, buf);
printf("%d bytes: %s\r\n\r\n", num, ((num==30)?"OK":"NOT OK"));
printf("READ 2 pages:\r\n");
num = flash.read(0, 2*PAGESIZE, buf);
printMemory(buf,2*PAGESIZE);
printf("%d bytes: %s\r\n", num, ((num==(2*PAGESIZE))?"OK":"NOT OK"));
waitKey();
/*************************** ERASING PAGE TEST ***************************/
printf("ERASE second page\r\n");
num = flash.clearPage(1);
printf("%d bytes: %s\r\n", num, ((num==PAGESIZE)?"OK":"NOT OK"));
printf("READ 2 pages:\r\n");
num = flash.read(0, 2*PAGESIZE, buf);
printMemory(buf,2*PAGESIZE);
printf("%d bytes: %s\r\n", num, ((num==(2*PAGESIZE))?"OK":"NOT OK"));
waitKey();
/************************** SERIALIZATION TEST **************************/
struct test_serialization var_ser, var_deser;
var_ser.data_1 = 0xAA;
var_ser.data_2 = 0x7777;
var_ser.data_3 = 0x33333333;
printf("Serialize data at addr 20\r\n");
num = flash.write(20, sizeof(test_serialization),
(const unsigned char*)(&var_ser));
printf("%d bytes: %s\r\n", num,
((num==sizeof(test_serialization))?"OK":"NOT OK"));
var_deser.data_1 = 0;
var_deser.data_2 = 0;
var_deser.data_3 = 0;
printf("De-serialize data from addr 20\r\n");
num = flash.read(20, sizeof(test_serialization),
(unsigned char*)(&var_deser));
printf("%d bytes: %s\r\n", num,
((num==sizeof(test_serialization))?"OK":"NOT OK"));
printf("Same data: %s\r\n", (((var_ser.data_1==var_deser.data_1) &&
(var_ser.data_2==var_deser.data_2) &&
(var_ser.data_3==var_deser.data_3))?
"OK":"NOT OK"));
printf("READ 2 pages:\r\n");
num = flash.read(0, 2*PAGESIZE, buf);
printMemory(buf,2*PAGESIZE);
printf("%d bytes: %s\r\n", num, ((num==(2*PAGESIZE))?"OK":"NOT OK"));
waitKey();
/************************** ERASING MEMORY TEST **************************/
printf("ERASE memory\r\n");
num = flash.clearMem();
printf("%d bytes: %s\r\n", num, ((num==(EEPROM_SIZE))?"OK":"NOT OK"));
printf("READ 2 pages:\r\n");
num = flash.read(0, 2*PAGESIZE, buf);
printMemory(buf,2*PAGESIZE);
printf("%d bytes: %s\r\n", num, ((num==(2*PAGESIZE))?"OK":"NOT OK"));
waitKey();
/**************************** PROTECTION TEST ****************************/
printf("Setting whole EEPROM as not writable\r\n");
flash.setNotWritable();
printf("EEPROM not writable: %s\r\n", (flash.isNotWritable()?"YES":"NO"));
printf("WRITE first page\r\n");
memset(buf, 0x00, PAGESIZE);
num = flash.write(0, PAGESIZE, buf);
printf("%d bytes: %s\r\n", num, ((num==(PAGESIZE))?"OK":"NOT OK"));
printf("READ 2 pages:\r\n");
num = flash.read(0, 2*PAGESIZE, buf);
printMemory(buf,2*PAGESIZE);
printf("%d bytes: %s\r\n", num, ((num==(2*PAGESIZE))?"OK":"NOT OK"));
printf("DATA IS NOT CHANGED\r\n");
printf("Setting whole EEPROM as writable\r\n");
flash.setFullyWritable();
printf("\r\nDONE\r\n");
while(1);
}
void printMemory (unsigned char *s, int len)
{
int i = 0;
while (i<len) {
printf("%02X ", s[i]);
if (((++i)%32)==0)
printf("\r\n");
}
}
void waitKey ()
{
char a;
printf("Press a key to continue...\r\n\r\n");
scanf("%c", &a);
}
Mario Bambagini