n-bed test program

Dependencies:   mbed

Committer:
chalikias
Date:
Fri Jan 23 11:10:26 2015 +0000
Revision:
1:627579b6dc90
Parent:
0:875a9fb3e4cf
Child:
2:4b53b097c16b
n-bed header comment

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chalikias 1:627579b6dc90 1 n-bed testing 24AA02E48 MAC address reading
chalikias 1:627579b6dc90 2
chalikias 1:627579b6dc90 3
chalikias 0:875a9fb3e4cf 4 #include "mbed.h"
chalikias 0:875a9fb3e4cf 5
chalikias 0:875a9fb3e4cf 6 // 24AA02E48 datasheet:
chalikias 0:875a9fb3e4cf 7 // http://ww1.microchip.com/downloads/en/DeviceDoc/20002124E.pdf
chalikias 0:875a9fb3e4cf 8
chalikias 0:875a9fb3e4cf 9 // the address of the EEPROM I2C device
chalikias 0:875a9fb3e4cf 10 #define EEPROM_24AA02E48_ADDR (0xA0)
chalikias 0:875a9fb3e4cf 11
chalikias 0:875a9fb3e4cf 12 static I2C i2c(P0_27, P0_28);
chalikias 0:875a9fb3e4cf 13
chalikias 0:875a9fb3e4cf 14 int main(void) {
chalikias 0:875a9fb3e4cf 15
chalikias 0:875a9fb3e4cf 16 int i = 0;
chalikias 0:875a9fb3e4cf 17 char offset = 0;
chalikias 0:875a9fb3e4cf 18 bool verifiedOk = true;
chalikias 0:875a9fb3e4cf 19 char buf[7];
chalikias 0:875a9fb3e4cf 20
chalikias 0:875a9fb3e4cf 21 printf("Reading MAC address\n");
chalikias 0:875a9fb3e4cf 22
chalikias 0:875a9fb3e4cf 23 do {
chalikias 0:875a9fb3e4cf 24
chalikias 0:875a9fb3e4cf 25 // the MAC address is stored at offset 0xFA in the EEPROM
chalikias 0:875a9fb3e4cf 26 // start by telling the EEPROM that we want to access this offset
chalikias 0:875a9fb3e4cf 27 offset = 0xFA;
chalikias 0:875a9fb3e4cf 28
chalikias 0:875a9fb3e4cf 29 // write returns non-0 on failure
chalikias 0:875a9fb3e4cf 30 if (i2c.write(EEPROM_24AA02E48_ADDR, &offset, 1) != 0) {
chalikias 0:875a9fb3e4cf 31 printf("Failed to write to I2C device (%x) at offset 0xFA\n",
chalikias 0:875a9fb3e4cf 32 EEPROM_24AA02E48_ADDR);
chalikias 0:875a9fb3e4cf 33 break;
chalikias 0:875a9fb3e4cf 34 }
chalikias 0:875a9fb3e4cf 35
chalikias 0:875a9fb3e4cf 36 // read the MAC address (48 bits = 6 bytes). The read function
chalikias 0:875a9fb3e4cf 37 // returns non-0 in case of failure
chalikias 0:875a9fb3e4cf 38 if (i2c.read(EEPROM_24AA02E48_ADDR, buf, 6) != 0) {
chalikias 0:875a9fb3e4cf 39 printf("Failed to read from I2C device (%x) at offset 0xFA\n",
chalikias 0:875a9fb3e4cf 40 EEPROM_24AA02E48_ADDR);
chalikias 0:875a9fb3e4cf 41 }
chalikias 0:875a9fb3e4cf 42
chalikias 0:875a9fb3e4cf 43 printf(" - the MAC address is %02X:%02X:%02X:%02X:%02X:%02X\n",
chalikias 0:875a9fb3e4cf 44 buf[0],buf[1],buf[2],buf[3],buf[4],buf[5]);
chalikias 0:875a9fb3e4cf 45
chalikias 0:875a9fb3e4cf 46 } while (0);
chalikias 0:875a9fb3e4cf 47
chalikias 0:875a9fb3e4cf 48 printf("Writing data to EEPROM\n");
chalikias 0:875a9fb3e4cf 49
chalikias 0:875a9fb3e4cf 50 do {
chalikias 0:875a9fb3e4cf 51
chalikias 0:875a9fb3e4cf 52 // initializing the buffer with values that will be
chalikias 0:875a9fb3e4cf 53 // written to the EEPROM. Note that index 0 is used as
chalikias 0:875a9fb3e4cf 54 // the offset and data are put in the remaining 6 bytes
chalikias 0:875a9fb3e4cf 55 // see "write data" section below
chalikias 0:875a9fb3e4cf 56 for (i = 0; i < 6; i++) {
chalikias 0:875a9fb3e4cf 57 buf[i+1] = i+3;
chalikias 0:875a9fb3e4cf 58 }
chalikias 0:875a9fb3e4cf 59
chalikias 0:875a9fb3e4cf 60 // We write to the beginning of the EEPROM (offset = 0) in this
chalikias 0:875a9fb3e4cf 61 // example.
chalikias 0:875a9fb3e4cf 62 //
chalikias 0:875a9fb3e4cf 63 // Please note that there are limitations to how to write to the EEPROM
chalikias 0:875a9fb3e4cf 64 // - At most one page (8 bytes for this EEPROM) can be written at a time
chalikias 0:875a9fb3e4cf 65 // - A write request will wrap around if writing passed a page boundary
chalikias 0:875a9fb3e4cf 66 // - Example: If writing 4 bytes starting at offset 6, positions 6,7
chalikias 0:875a9fb3e4cf 67 // 0, and 1 will actually be written since page boundaries
chalikias 0:875a9fb3e4cf 68 // are at even page sizes (0, 8, 16, ...) and a write
chalikias 0:875a9fb3e4cf 69 // request will wrap around if passing a page boundary.
chalikias 0:875a9fb3e4cf 70 // - the upper part (0x80-0xFF) are always write protected for this
chalikias 0:875a9fb3e4cf 71 // particular EEPROM
chalikias 0:875a9fb3e4cf 72 offset = 0;
chalikias 0:875a9fb3e4cf 73
chalikias 0:875a9fb3e4cf 74
chalikias 0:875a9fb3e4cf 75 // write data
chalikias 0:875a9fb3e4cf 76 // All data is written in one request (page write). The first byte must
chalikias 0:875a9fb3e4cf 77 // therefore contain the offset to where the data should be written.
chalikias 0:875a9fb3e4cf 78 // It is also possible to write one byte at a time.
chalikias 0:875a9fb3e4cf 79 buf[0] = offset;
chalikias 0:875a9fb3e4cf 80 if (i2c.write(EEPROM_24AA02E48_ADDR, buf, 7) != 0) {
chalikias 0:875a9fb3e4cf 81 printf("Failed to write to I2C device (%x) 2\n",
chalikias 0:875a9fb3e4cf 82 EEPROM_24AA02E48_ADDR);
chalikias 0:875a9fb3e4cf 83 break;
chalikias 0:875a9fb3e4cf 84 }
chalikias 0:875a9fb3e4cf 85
chalikias 0:875a9fb3e4cf 86
chalikias 0:875a9fb3e4cf 87 } while (0);
chalikias 0:875a9fb3e4cf 88
chalikias 0:875a9fb3e4cf 89 printf("Reading back written data\n");
chalikias 0:875a9fb3e4cf 90
chalikias 0:875a9fb3e4cf 91 do {
chalikias 0:875a9fb3e4cf 92 // resetting the buffer
chalikias 0:875a9fb3e4cf 93 memset(buf, 0, 6);
chalikias 0:875a9fb3e4cf 94
chalikias 0:875a9fb3e4cf 95
chalikias 0:875a9fb3e4cf 96 // tell the EEPROM which offset to use
chalikias 0:875a9fb3e4cf 97 if (i2c.write(EEPROM_24AA02E48_ADDR, &offset, 1) != 0) {
chalikias 0:875a9fb3e4cf 98 printf("Failed to write to I2C device (%x) 3\n",
chalikias 0:875a9fb3e4cf 99 EEPROM_24AA02E48_ADDR);
chalikias 0:875a9fb3e4cf 100 break;
chalikias 0:875a9fb3e4cf 101 }
chalikias 0:875a9fb3e4cf 102
chalikias 0:875a9fb3e4cf 103 // read data
chalikias 0:875a9fb3e4cf 104 if (i2c.read(EEPROM_24AA02E48_ADDR, buf, 6) != 0) {
chalikias 0:875a9fb3e4cf 105 printf("Failed to read from I2C device (%x) 3\n",
chalikias 0:875a9fb3e4cf 106 EEPROM_24AA02E48_ADDR);
chalikias 0:875a9fb3e4cf 107 }
chalikias 0:875a9fb3e4cf 108
chalikias 0:875a9fb3e4cf 109 // verifying read data
chalikias 0:875a9fb3e4cf 110 for (i = 0; i < 6; i++) {
chalikias 0:875a9fb3e4cf 111 if (buf[i] != (i+3)) {
chalikias 0:875a9fb3e4cf 112 verifiedOk = false;
chalikias 0:875a9fb3e4cf 113 printf(" - Read data not equal to written buf[%d]=%d != %d\n",
chalikias 0:875a9fb3e4cf 114 i, buf[i], (i+3));
chalikias 0:875a9fb3e4cf 115 break;
chalikias 0:875a9fb3e4cf 116 }
chalikias 0:875a9fb3e4cf 117 }
chalikias 0:875a9fb3e4cf 118
chalikias 0:875a9fb3e4cf 119 if (verifiedOk) {
chalikias 0:875a9fb3e4cf 120 printf(" - Read data is equal to written data\n");
chalikias 0:875a9fb3e4cf 121 }
chalikias 0:875a9fb3e4cf 122
chalikias 0:875a9fb3e4cf 123 } while (0);
chalikias 0:875a9fb3e4cf 124
chalikias 0:875a9fb3e4cf 125 return 0;
chalikias 0:875a9fb3e4cf 126 }