first publish

Dependents:   eeprom_test eeprom_test MCP3204_test

24LC1025.cpp

Committer:
sashida_h
Date:
2020-08-05
Revision:
1:41cf2e3bb7f3
Parent:
0:8047024a08c2

File content as of revision 1:41cf2e3bb7f3:

#include "24LC1025.h"

/*
ref.http://akizukidenshi.com/download/I-02525_24lc1025.pdf
Created by sassy,CORE

*/

//******************************************************************************
LC1025::LC1025(PinName sda, PinName scl)
{
    i2c_ = new I2C(sda, scl);
    i2c_->frequency(400000);
}

//******************************************************************************
LC1025::LC1025(I2C *i2c):i2c_(i2c){}

//******************************************************************************
LC1025::~LC1025()
{    
   delete i2c_;
}

void LC1025::writeByte(uint8_t address, uint16_t subAddress, uint8_t data)
{
   char data_write[3];
   data_write[0] = (subAddress >> 8) & 0xff ;
   data_write[1] = (subAddress) & 0xff ;
   data_write[2] = data;
   i2c_->write(address, data_write, 3);
}

void LC1025::PageWrite(uint8_t address, uint16_t subAddress, char *data, int num)
{
   char data_write[num+2];
   data_write[0] = (subAddress >> 8) & 0xff ;
   data_write[1] = (subAddress) & 0xff ;
   for(int i = 0; i < num; i++){
        data_write[i+2] = data[i];
   }
   i2c_->write(address, data_write, num+2);
}

char LC1025::RandomRead(uint8_t address, uint16_t subAddress)
{
    char data[1]; // `data` will store the register data     
    char data_write[2];
    data_write[0] = (subAddress>>8) & 0xff;
    data_write[1] = subAddress & 0xff;
    i2c_->write(address, data_write, 2, true);
    i2c_->read(address+1, data, 1, true);
    i2c_->stop();
    return data[0]; 
}

char LC1025::SequentialRead(uint8_t address, uint16_t subAddress)
{
    char data[1]; // `data` will store the register data     
    char data_write[2];
    data_write[0] = (subAddress>>8) & 0xff;
    data_write[1] = subAddress & 0xff;
    i2c_->write(address, data_write, 2, true);
    i2c_->read(address+1, data, 0xffff, true);
    i2c_->stop();
    return data[0];
}

void LC1025::readBytes(uint8_t address, uint8_t subAddress, uint8_t count, uint8_t * dest)
{     
    char data[14];
    char data_write[1];
    data_write[0] = subAddress;
    i2c_->write(address, data_write, 1, true); // no stop
    i2c_->read(address, data, count, 0); 
    for(int ii = 0; ii < count; ii++) {
     dest[ii] = data[ii];
    }
}