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@58:a4422d19b2ea, 2016-09-14 (annotated)
- Committer:
- davidjhoward
- Date:
- Wed Sep 14 18:54:23 2016 +0000
- Revision:
- 58:a4422d19b2ea
- Child:
- 116:7337ed514891
adding EEPROM drivers
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 | 58:a4422d19b2ea | 18 | if(eep_verbose) printf("[eep_get_byte] dev=%d, addr=%u\n\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 | 58:a4422d19b2ea | 31 | printf("[eep_get_byte] device error\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 | 58:a4422d19b2ea | 42 | printf("[eep_get_byte] address error\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 | 58:a4422d19b2ea | 48 | printf(" dbyte = 0x%x\n", dbyte); |
| davidjhoward | 58:a4422d19b2ea | 49 | printf(" addr0 = 0x%x\n", addr0); |
| davidjhoward | 58:a4422d19b2ea | 50 | printf(" addr1 = 0x%x", 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 | 58:a4422d19b2ea | 60 | if(i2c->write(dbyte, data, 2, true )) printf("no ack 1\n"); |
| davidjhoward | 58:a4422d19b2ea | 61 | if(i2c->read (dbyte, data, 1, false)) printf("no ack 2\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 | 58:a4422d19b2ea | 69 | if(eep_verbose) printf("[eep_set_byte] dev=%d, addr=%u, wbyte=%u\n\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 | 58:a4422d19b2ea | 81 | printf("[eep_set_byte] device error\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 | 58:a4422d19b2ea | 92 | printf("[eep_set_byte] address error\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 | 58:a4422d19b2ea | 100 | printf(" wbyte = 0x%x", 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 | 58:a4422d19b2ea | 111 | if(i2c->write(dbyte, data, ldata, false)) printf("no ack\n"); |
| davidjhoward | 58:a4422d19b2ea | 112 | } |
| davidjhoward | 58:a4422d19b2ea | 113 | |
| davidjhoward | 58:a4422d19b2ea | 114 | // ------------------------------------------------------------------------------------------------- |
