Lib. for Atmel 1Mbits Serial EEPROM, AT24C1024B

Dependents:   LPC1114_data_logger dmx_to_stepper BSM02 LPC1114_barometer_with_data_logging

Committer:
kenjiArai
Date:
Sun Jun 29 06:52:37 2014 +0000
Revision:
1:05012e75c050
Parent:
0:b9f5cf0309af
Child:
2:36339fd174d0
small modofocation

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:b9f5cf0309af 1 /*
kenjiArai 0:b9f5cf0309af 2 * mbed library program
kenjiArai 0:b9f5cf0309af 3 * Control AT24C1024 EEPROM
kenjiArai 0:b9f5cf0309af 4 *
kenjiArai 0:b9f5cf0309af 5 * Copyright (c) 2014 Kenji Arai / JH1PJL
kenjiArai 0:b9f5cf0309af 6 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 0:b9f5cf0309af 7 * http://mbed.org/users/kenjiArai/
kenjiArai 0:b9f5cf0309af 8 * Created: June 17th, 2014
kenjiArai 1:05012e75c050 9 * Revised: June 25th, 2014
kenjiArai 0:b9f5cf0309af 10 *
kenjiArai 0:b9f5cf0309af 11 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
kenjiArai 0:b9f5cf0309af 12 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
kenjiArai 0:b9f5cf0309af 13 * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
kenjiArai 0:b9f5cf0309af 14 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kenjiArai 0:b9f5cf0309af 15 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
kenjiArai 0:b9f5cf0309af 16 */
kenjiArai 0:b9f5cf0309af 17
kenjiArai 0:b9f5cf0309af 18 #ifndef AT24C1024_H
kenjiArai 0:b9f5cf0309af 19 #define AT24C1024_H
kenjiArai 0:b9f5cf0309af 20
kenjiArai 0:b9f5cf0309af 21 #include "mbed.h"
kenjiArai 0:b9f5cf0309af 22
kenjiArai 0:b9f5cf0309af 23 /** Interface for 1Mbit Serial EEPROM (I2C Interface) Atmel Corp. AT24C1024B
kenjiArai 0:b9f5cf0309af 24 *
kenjiArai 0:b9f5cf0309af 25 * @code
kenjiArai 0:b9f5cf0309af 26 * #include "mbed.h"
kenjiArai 0:b9f5cf0309af 27 *
kenjiArai 0:b9f5cf0309af 28 * // I2C Communication
kenjiArai 0:b9f5cf0309af 29 * AT24C1024 at24c1024(dp5,dp27);// SDA, SCL
kenjiArai 0:b9f5cf0309af 30 * // If you connected I2C line not only this device but also other devices,
kenjiArai 0:b9f5cf0309af 31 * // you need to declare following method.
kenjiArai 0:b9f5cf0309af 32 * I2C i2c(dp5,dp27); // SDA, SCL
kenjiArai 0:b9f5cf0309af 33 * AT24C1024 at24c1024(i2c); // Atmel 1Mbit EE-PROM
kenjiArai 0:b9f5cf0309af 34 *
kenjiArai 0:b9f5cf0309af 35 * int main() {
kenjiArai 0:b9f5cf0309af 36 * at24c1024.write(0,dt); // write addr=0 data=dt
kenjiArai 0:b9f5cf0309af 37 * dt = at24c1024.read(0); // read addr=0
kenjiArai 0:b9f5cf0309af 38 * // page write mode, addr top=0x1ff00, 256bytes data (save it in eep_buf[])
kenjiArai 0:b9f5cf0309af 39 * status = at24c1024.write_page(0x1ff00, eep_buf, sizeof(eep_buf));
kenjiArai 0:b9f5cf0309af 40 * }
kenjiArai 0:b9f5cf0309af 41 * @endcode
kenjiArai 0:b9f5cf0309af 42 */
kenjiArai 0:b9f5cf0309af 43
kenjiArai 0:b9f5cf0309af 44 // EEPROM Atmel AT24C1024
kenjiArai 0:b9f5cf0309af 45 // Address b7=1,b6=0,b5=1,b4=0,b3=A2pin,b2=A1pin,b1=page addr, b0=R/W
kenjiArai 0:b9f5cf0309af 46 #define AT24C1024ADDR 0xa0 // as initial data (A2=A1=GND)
kenjiArai 0:b9f5cf0309af 47
kenjiArai 0:b9f5cf0309af 48 typedef enum {
kenjiArai 0:b9f5cf0309af 49 AT24C_OK = 0,
kenjiArai 0:b9f5cf0309af 50 AT24C_BUSY,
kenjiArai 0:b9f5cf0309af 51 AT24C_WRONG_BF_SIZE,
kenjiArai 0:b9f5cf0309af 52 AT24C_WRONG_TOP_ADDR,
kenjiArai 0:b9f5cf0309af 53 AT24C_ERROR
kenjiArai 0:b9f5cf0309af 54 } AT24C_STATUS;
kenjiArai 0:b9f5cf0309af 55
kenjiArai 0:b9f5cf0309af 56 class AT24C1024
kenjiArai 0:b9f5cf0309af 57 {
kenjiArai 0:b9f5cf0309af 58 public:
kenjiArai 0:b9f5cf0309af 59 /** Configure data pin
kenjiArai 0:b9f5cf0309af 60 * @param data SDA and SCL pins
kenjiArai 0:b9f5cf0309af 61 */
kenjiArai 0:b9f5cf0309af 62 AT24C1024(PinName p_sda, PinName p_scl);
kenjiArai 0:b9f5cf0309af 63
kenjiArai 0:b9f5cf0309af 64 /** Configure data pin (with other devices on I2C line)
kenjiArai 0:b9f5cf0309af 65 * @param I2C previous definition
kenjiArai 0:b9f5cf0309af 66 */
kenjiArai 0:b9f5cf0309af 67 AT24C1024(I2C& p_i2c);
kenjiArai 0:b9f5cf0309af 68
kenjiArai 0:b9f5cf0309af 69 /** Read one data from EEPROM
kenjiArai 0:b9f5cf0309af 70 * @param dat_address (0 to 0x1ffff)
kenjiArai 0:b9f5cf0309af 71 * @return read data
kenjiArai 0:b9f5cf0309af 72 */
kenjiArai 0:b9f5cf0309af 73 uint8_t read(int addr);
kenjiArai 0:b9f5cf0309af 74
kenjiArai 0:b9f5cf0309af 75 /** Write one data to EEPROM
kenjiArai 0:b9f5cf0309af 76 * @param data_address (o to 0x1ffff), data (byte)
kenjiArai 0:b9f5cf0309af 77 * @return none
kenjiArai 0:b9f5cf0309af 78 */
kenjiArai 0:b9f5cf0309af 79 void write(int addr, uint8_t dt);
kenjiArai 0:b9f5cf0309af 80
kenjiArai 0:b9f5cf0309af 81 /** Page read (256 bytes) from EEPROM
kenjiArai 0:b9f5cf0309af 82 * @param top_address (o to 0x1ffxx) e.g. 0x00,0x100,0x200 --- 0x1fe00, 0x1ff00
kenjiArai 0:b9f5cf0309af 83 * @param dt -> buffer (at least need to keep 258 bytes), data top = buffer[0]
kenjiArai 0:b9f5cf0309af 84 * @param size -> sizeof(buffer)
kenjiArai 0:b9f5cf0309af 85 * @return status 0=OK, others=Error
kenjiArai 0:b9f5cf0309af 86 */
kenjiArai 0:b9f5cf0309af 87 AT24C_STATUS read_page(uint32_t addr_page_top, uint8_t *dt, int size);
kenjiArai 0:b9f5cf0309af 88
kenjiArai 0:b9f5cf0309af 89 /** Page write (256 bytes) to EEPROM
kenjiArai 0:b9f5cf0309af 90 * @param top_address (o to 0x1ffxx) e.g. 0x00,0x100,0x200 --- 0x1fe00, 0x1ff00
kenjiArai 0:b9f5cf0309af 91 * @param dt -> buffer (at least need to keep 258 bytes), data top = buffer[0]
kenjiArai 0:b9f5cf0309af 92 * @param size -> sizeof(buffer)
kenjiArai 0:b9f5cf0309af 93 * @return status 0=OK, others=Error
kenjiArai 0:b9f5cf0309af 94 */
kenjiArai 0:b9f5cf0309af 95 AT24C_STATUS write_page(uint32_t addr_page_top, uint8_t *dt, int size);
kenjiArai 0:b9f5cf0309af 96
kenjiArai 0:b9f5cf0309af 97 protected:
kenjiArai 0:b9f5cf0309af 98 void i2c_read_n_bytes(int, char*, int);
kenjiArai 0:b9f5cf0309af 99 void i2c_write_n_bytes(int, char*, int);
kenjiArai 0:b9f5cf0309af 100
kenjiArai 0:b9f5cf0309af 101 I2C i2c;
kenjiArai 0:b9f5cf0309af 102
kenjiArai 0:b9f5cf0309af 103 private:
kenjiArai 0:b9f5cf0309af 104 uint8_t AT24C1024_addr;
kenjiArai 0:b9f5cf0309af 105 };
kenjiArai 0:b9f5cf0309af 106
kenjiArai 1:05012e75c050 107 #endif // AT24C1024_H