Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: NaturalTinyShell_ice libmDot-12Sept mbed-rtos mbed
Fork of ICE by
src/Drivers/eep.cpp@284:cc72206ea8e0, 2016-10-28 (annotated)
- Committer:
- jinu
- Date:
- Fri Oct 28 18:44:12 2016 +0000
- Revision:
- 284:cc72206ea8e0
- Parent:
- 116:7337ed514891
modified for live data testing
Who changed what in which revision?
| User | Revision | Line number | New contents of line | 
|---|---|---|---|
| davidjhoward | 58:a4422d19b2ea | 1 | // eep.c - EEPROM (AT24CM02) | 
| davidjhoward | 58:a4422d19b2ea | 2 | // ------------------------------------------------------------------------------------------------- | 
| davidjhoward | 58:a4422d19b2ea | 3 | |
| davidjhoward | 58:a4422d19b2ea | 4 | #include "mbed.h" | 
| davidjhoward | 58:a4422d19b2ea | 5 | #include "global.h" | 
| davidjhoward | 58:a4422d19b2ea | 6 | #include "eep.h" | 
| davidjhoward | 58:a4422d19b2ea | 7 | |
| davidjhoward | 58:a4422d19b2ea | 8 | // ------------------------------------------------------------------------------------------------- | 
| davidjhoward | 58:a4422d19b2ea | 9 | // globals | 
| davidjhoward | 58:a4422d19b2ea | 10 | |
| davidjhoward | 58:a4422d19b2ea | 11 | int eep_verbose = 0; | 
| davidjhoward | 58:a4422d19b2ea | 12 | |
| davidjhoward | 58:a4422d19b2ea | 13 | // ------------------------------------------------------------------------------------------------- | 
| davidjhoward | 58:a4422d19b2ea | 14 | // byte functions | 
| davidjhoward | 58:a4422d19b2ea | 15 | |
| davidjhoward | 58:a4422d19b2ea | 16 | unsigned char eep_get_byte(int dev, unsigned long addr) | 
| davidjhoward | 58:a4422d19b2ea | 17 | { | 
| davidjhoward | 116:7337ed514891 | 18 | if(eep_verbose) printf("[eep_get_byte] dev=%d, addr=%u\r\n", dev, addr); | 
| davidjhoward | 58:a4422d19b2ea | 19 | |
| davidjhoward | 58:a4422d19b2ea | 20 | unsigned char rbyte = 0; | 
| davidjhoward | 58:a4422d19b2ea | 21 | unsigned char dbyte = 0; | 
| davidjhoward | 58:a4422d19b2ea | 22 | unsigned char addr0 = 0; | 
| davidjhoward | 58:a4422d19b2ea | 23 | unsigned char addr1 = 0; | 
| davidjhoward | 58:a4422d19b2ea | 24 | |
| davidjhoward | 58:a4422d19b2ea | 25 | // build address bytes | 
| davidjhoward | 58:a4422d19b2ea | 26 | |
| davidjhoward | 58:a4422d19b2ea | 27 | if (dev == 0) dbyte = EE0_ADDR; | 
| davidjhoward | 58:a4422d19b2ea | 28 | else if(dev == 1) dbyte = EE1_ADDR; | 
| davidjhoward | 58:a4422d19b2ea | 29 | else | 
| davidjhoward | 58:a4422d19b2ea | 30 | { | 
| davidjhoward | 116:7337ed514891 | 31 | printf("[eep_get_byte] device error\r\n"); return(0); | 
| davidjhoward | 58:a4422d19b2ea | 32 | } | 
| davidjhoward | 58:a4422d19b2ea | 33 | |
| davidjhoward | 58:a4422d19b2ea | 34 | if(addr < EEP_NBYT) | 
| davidjhoward | 58:a4422d19b2ea | 35 | { | 
| davidjhoward | 58:a4422d19b2ea | 36 | dbyte |= (addr & 0x00030000)>>16; // mask A17-A16 bits, add to dbyte | 
| davidjhoward | 58:a4422d19b2ea | 37 | addr0 = (addr & 0x0000FF00)>>8; // mask A15-A08 bits | 
| davidjhoward | 58:a4422d19b2ea | 38 | addr1 = (addr & 0x000000FF); // mask A07-A00 bits | 
| davidjhoward | 58:a4422d19b2ea | 39 | } | 
| davidjhoward | 58:a4422d19b2ea | 40 | else | 
| davidjhoward | 58:a4422d19b2ea | 41 | { | 
| davidjhoward | 116:7337ed514891 | 42 | printf("[eep_get_byte] address error\r\n"); return(0); | 
| davidjhoward | 58:a4422d19b2ea | 43 | } | 
| davidjhoward | 58:a4422d19b2ea | 44 | |
| davidjhoward | 58:a4422d19b2ea | 45 | |
| davidjhoward | 58:a4422d19b2ea | 46 | if(eep_verbose) | 
| davidjhoward | 58:a4422d19b2ea | 47 | { | 
| davidjhoward | 116:7337ed514891 | 48 | printf(" dbyte = 0x%x", dbyte); | 
| davidjhoward | 116:7337ed514891 | 49 | printf(" addr0 = 0x%x", addr0); | 
| davidjhoward | 116:7337ed514891 | 50 | printf(" addr1 = 0x%x\r\n", addr1); | 
| davidjhoward | 58:a4422d19b2ea | 51 | } | 
| davidjhoward | 58:a4422d19b2ea | 52 | |
| davidjhoward | 58:a4422d19b2ea | 53 | // perform read | 
| davidjhoward | 58:a4422d19b2ea | 54 | |
| davidjhoward | 58:a4422d19b2ea | 55 | const int ldata = 2; | 
| davidjhoward | 58:a4422d19b2ea | 56 | char data[ldata]; | 
| davidjhoward | 58:a4422d19b2ea | 57 | data[0] = addr0; | 
| davidjhoward | 58:a4422d19b2ea | 58 | data[1] = addr1; | 
| davidjhoward | 58:a4422d19b2ea | 59 | |
| davidjhoward | 116:7337ed514891 | 60 | if(i2c->write(dbyte, data, 2, true )) if(eep_verbose) printf("no ack 1\r\n"); | 
| davidjhoward | 116:7337ed514891 | 61 | if(i2c->read (dbyte, data, 1, false)) if(eep_verbose) printf("no ack 2\r\n"); | 
| davidjhoward | 58:a4422d19b2ea | 62 | rbyte = data[0]; | 
| davidjhoward | 58:a4422d19b2ea | 63 | |
| davidjhoward | 58:a4422d19b2ea | 64 | return(rbyte); | 
| davidjhoward | 58:a4422d19b2ea | 65 | } | 
| davidjhoward | 58:a4422d19b2ea | 66 | |
| davidjhoward | 58:a4422d19b2ea | 67 | void eep_set_byte(int dev, unsigned long addr, unsigned char wbyte) | 
| davidjhoward | 58:a4422d19b2ea | 68 | { | 
| davidjhoward | 116:7337ed514891 | 69 | if(eep_verbose) printf("[eep_set_byte] dev=%d, addr=%u, wbyte=%u\r\n", dev, addr, wbyte); | 
| davidjhoward | 58:a4422d19b2ea | 70 | |
| davidjhoward | 58:a4422d19b2ea | 71 | unsigned char dbyte = 0; | 
| davidjhoward | 58:a4422d19b2ea | 72 | unsigned char addr0 = 0; | 
| davidjhoward | 58:a4422d19b2ea | 73 | unsigned char addr1 = 0; | 
| davidjhoward | 58:a4422d19b2ea | 74 | |
| davidjhoward | 58:a4422d19b2ea | 75 | // build address bytes | 
| davidjhoward | 58:a4422d19b2ea | 76 | |
| davidjhoward | 58:a4422d19b2ea | 77 | if (dev == 0) dbyte = EE0_ADDR; | 
| davidjhoward | 58:a4422d19b2ea | 78 | else if(dev == 1) dbyte = EE1_ADDR; | 
| davidjhoward | 58:a4422d19b2ea | 79 | else | 
| davidjhoward | 58:a4422d19b2ea | 80 | { | 
| davidjhoward | 116:7337ed514891 | 81 | printf("[eep_set_byte] device error\r\n"); return; | 
| davidjhoward | 58:a4422d19b2ea | 82 | } | 
| davidjhoward | 58:a4422d19b2ea | 83 | |
| davidjhoward | 58:a4422d19b2ea | 84 | if(addr < EEP_NBYT) | 
| davidjhoward | 58:a4422d19b2ea | 85 | { | 
| davidjhoward | 58:a4422d19b2ea | 86 | dbyte |= (addr & 0x00030000)>>16; // mask A17-A16 bits, add to dbyte | 
| davidjhoward | 58:a4422d19b2ea | 87 | addr0 = (addr & 0x0000FF00)>>8; // mask A15-A08 bits | 
| davidjhoward | 58:a4422d19b2ea | 88 | addr1 = (addr & 0x000000FF); // mask A07-A00 bits | 
| davidjhoward | 58:a4422d19b2ea | 89 | } | 
| davidjhoward | 58:a4422d19b2ea | 90 | else | 
| davidjhoward | 58:a4422d19b2ea | 91 | { | 
| davidjhoward | 116:7337ed514891 | 92 | printf("[eep_set_byte] address error\r\n"); return; | 
| davidjhoward | 58:a4422d19b2ea | 93 | } | 
| davidjhoward | 58:a4422d19b2ea | 94 | |
| davidjhoward | 58:a4422d19b2ea | 95 | if(eep_verbose) | 
| davidjhoward | 58:a4422d19b2ea | 96 | { | 
| davidjhoward | 58:a4422d19b2ea | 97 | printf(" dbyte = 0x%x", dbyte); | 
| davidjhoward | 58:a4422d19b2ea | 98 | printf(" addr0 = 0x%x", addr0); | 
| davidjhoward | 58:a4422d19b2ea | 99 | printf(" addr1 = 0x%x", addr1); | 
| davidjhoward | 116:7337ed514891 | 100 | printf(" wbyte = 0x%x\r\n", wbyte); | 
| davidjhoward | 58:a4422d19b2ea | 101 | } | 
| davidjhoward | 58:a4422d19b2ea | 102 | |
| davidjhoward | 58:a4422d19b2ea | 103 | // perform read | 
| davidjhoward | 58:a4422d19b2ea | 104 | |
| davidjhoward | 58:a4422d19b2ea | 105 | const int ldata = 3; | 
| davidjhoward | 58:a4422d19b2ea | 106 | char data[ldata]; | 
| davidjhoward | 58:a4422d19b2ea | 107 | data[0] = addr0; | 
| davidjhoward | 58:a4422d19b2ea | 108 | data[1] = addr1; | 
| davidjhoward | 58:a4422d19b2ea | 109 | data[2] = wbyte; | 
| davidjhoward | 58:a4422d19b2ea | 110 | |
| davidjhoward | 116:7337ed514891 | 111 | if(i2c->write(dbyte, data, ldata, false)) if(eep_verbose) printf("no ack\r\n"); | 
| davidjhoward | 58:a4422d19b2ea | 112 | } | 
| davidjhoward | 58:a4422d19b2ea | 113 | |
| davidjhoward | 58:a4422d19b2ea | 114 | // ------------------------------------------------------------------------------------------------- | 
