|
|
/*------------------------------------------------------------------------------
|
|
|
-- This file is a part of the libuc, microcontroler library
|
|
|
-- Copyright (C) 2011, Alexis Jeandet
|
|
|
--
|
|
|
-- This program is free software; you can redistribute it and/or modify
|
|
|
-- it under the terms of the GNU General Public License as published by
|
|
|
-- the Free Software Foundation; either version 3 of the License, or
|
|
|
-- (at your option) any later version.
|
|
|
--
|
|
|
-- This program is distributed in the hope that it will be useful,
|
|
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
-- GNU General Public License for more details.
|
|
|
--
|
|
|
-- You should have received a copy of the GNU General Public License
|
|
|
-- along with this program; if not, write to the Free Software
|
|
|
-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
-------------------------------------------------------------------------------
|
|
|
-- Author : Alexis Jeandet
|
|
|
-- Mail : alexis.jeandet@member.fsf.org
|
|
|
-------------------------------------------------------------------------------*/
|
|
|
#include <24LC0X.h>
|
|
|
#include <core.h>
|
|
|
/*
|
|
|
struct 24LC0X_str
|
|
|
{
|
|
|
i2cDev iicdev;
|
|
|
unsigned char devAddress;
|
|
|
unsigned char size;
|
|
|
};
|
|
|
*/
|
|
|
|
|
|
|
|
|
void eeprom24lc0xopen(eeprom24lc0xDev* dev, i2c_t iicdev, unsigned char A0_A1_A2_val, unsigned int size)
|
|
|
{
|
|
|
dev->iicdev = iicdev;
|
|
|
dev->devAddress = 0x50 | (A0_A1_A2_val & 0x7);
|
|
|
if(size == 2048) dev->size = 2;
|
|
|
if(size == 1024) dev->size = 1;
|
|
|
}
|
|
|
|
|
|
void eeprom24lc0xpagewrite(eeprom24lc0xDev* dev,unsigned char address,unsigned char* page)
|
|
|
{
|
|
|
int cmdcnt=1,datacnt=8;
|
|
|
//i2cwrite(dev.iicdev,address,page)
|
|
|
//i2cwrite2(dev.iicdev,dev.devAddress,&address,&cmdcnt,page,&datacnt);
|
|
|
}
|
|
|
|
|
|
|
|
|
void eeprom24lc0xpageread(eeprom24lc0xDev* dev,unsigned char address,unsigned char* page)
|
|
|
{
|
|
|
int cmdcnt=1,datacnt=8;
|
|
|
/*i2cwrite(dev.iicdev,dev.devAddress,&address,&cmdcnt);
|
|
|
i2cread(dev.iicdev,dev.devAddress,page,&datacnt);*/
|
|
|
}
|
|
|
|
|
|
void eeprom24lc0xbytewrite(eeprom24lc0xDev* dev,unsigned char address,unsigned char data)
|
|
|
{
|
|
|
int cmdcnt=1,datacnt=1;
|
|
|
//i2cwrite2(dev.iicdev,dev.devAddress,&address,&cmdcnt,&data,&datacnt);
|
|
|
}
|
|
|
|
|
|
|
|
|
unsigned char eeprom24lc0xbyteread(eeprom24lc0xDev* dev,unsigned char address)
|
|
|
{
|
|
|
int cmdcnt=1,datacnt=1;
|
|
|
unsigned char data = 0;
|
|
|
/* i2cwrite(dev.iicdev,dev.devAddress,&address,&cmdcnt);
|
|
|
i2cread(dev.iicdev,dev.devAddress,&data,&datacnt);*/
|
|
|
return data;
|
|
|
}
|
|
|
|
|
|
|
|
|
void eeprom24lc0xreadn(eeprom24lc0xDev* dev,unsigned char address,unsigned char* data, unsigned int count)
|
|
|
{
|
|
|
int cmdcnt=1,datacnt=count;
|
|
|
/* i2cwrite(dev.iicdev,dev.devAddress,&address,&cmdcnt);
|
|
|
i2cread(dev.iicdev,dev.devAddress,data,&datacnt);*/
|
|
|
|
|
|
}
|
|
|
|
|
|
void eeprom24lc0xwriten(eeprom24lc0xDev* dev,unsigned char address,unsigned char* data, unsigned int count)
|
|
|
{
|
|
|
int cmdcnt=1,datacnt=8;
|
|
|
while(count >8)
|
|
|
{
|
|
|
cmdcnt=1;datacnt=8;
|
|
|
// while(i2noerr!=i2cwrite2(dev.iicdev,dev.devAddress,&address,&cmdcnt,data,&datacnt)){cmdcnt=1;datacnt=8;}
|
|
|
count-=8;
|
|
|
address+=8;
|
|
|
data+=8;
|
|
|
}
|
|
|
cmdcnt=1;datacnt=count;
|
|
|
// while(i2noerr!=i2cwrite2(dev.iicdev,dev.devAddress,&address,&cmdcnt,data,&datacnt)){cmdcnt=1;datacnt=count;}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|