#include #include #include #include "eeprom.h" #include "debug.h" /* Source Code fuer 24C128 EEPROM (16Kbyte) * __ __ A0 -| |- VCC A1 -| |- WP --> unconnected low: write enabled A2 -| |- SCL VSS -|_____|- SDA */ #define EEPROM_I2C_BASE_ADDR (0xA0>>1) #define EEPROM_I2C_ADDR(mem_addr) EEPROM_I2C_BASE_ADDR #define EEPROM_I2C_CHANNEL I2C1 #define EEPROM_MAX_BUF 3 static uint8 msg_wr_data[EEPROM_MAX_BUF]; static i2c_msg msg[2]; static uint8 msg_rd_data[EEPROM_MAX_BUF]; static void writeDataByte(int device_address, byte memory_address, byte data) // write one byte of data 'data' to eeprom memory address 'memory_address' to chip with I2C address 'device_address' { /* Arduino Code Wire.beginTransmission(device_address); // device address Wire.write(memory_address ); // memory address Wire.write(data); // data to send Wire.endTransmission(); // end delay(10); */ msg[0].addr = device_address; msg[0].flags = 0; // write, 7 bit address msg[0].xferred = 0; msg[0].length = 3; msg[0].data = msg_wr_data; msg_wr_data[0] = (memory_address>>8)&0xFF; msg_wr_data[1] = memory_address&0xFF; msg_wr_data[2] = data; i2c_master_xfer(EEPROM_I2C_CHANNEL, msg, 1, 10); delay(10); } static byte readDataByte(int device_address, byte memory_address) // reads one byte of data from memory location 'memory_address' in chip at I2C address 'device_address' { /* Arduino Code byte result; // return value Wire.beginTransmission(device_address); // device address Wire.write(memory_address); // memory address Wire.endTransmission(); // end Wire.requestFrom(device_address,1); // get one byte of data from device if (Wire.available()) result = Wire.read(); return result; // return the read data byte delay(10); */ msg[0].addr = device_address; msg[0].flags = 0; // write, 7 bit address msg[0].xferred = 0; msg[0].length = 2; msg[0].data = msg_wr_data; msg_wr_data[0] = (memory_address>>8)&0xFF; msg_wr_data[1] = memory_address&0xFF; msg[1].addr = device_address; msg[1].flags = I2C_MSG_READ; msg[1].xferred = 0; msg[1].length = 1; msg[1].data = msg_rd_data; i2c_master_xfer(EEPROM_I2C_CHANNEL, msg, 2, 10); return msg_rd_data[0]; } //--------------------------------------------------------------------------------- int eepromWriteBytes(int addr, int len, unsigned char *pData) { for (int i = 0; i