n-bed test program

Dependencies:   mbed

Committer:
chalikias
Date:
Mon Apr 27 19:38:50 2015 +0000
Revision:
2:4b53b097c16b
Parent:
1:627579b6dc90
testing nimbus n-bed board 24AA02E48

Who changed what in which revision?

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