0.1.6 I2C_24LC1025

This commit is contained in:
rob tillaart 2021-12-19 17:08:13 +01:00
parent 5d65284e43
commit f91c304c9b
11 changed files with 59 additions and 39 deletions

View File

@ -2,6 +2,10 @@ compile:
# Choosing to run compilation tests on 2 different Arduino platforms
platforms:
- uno
- leonardo
- due
- zero
# - due
# - zero
# - leonardo
- m4
- esp32
# - esp8266
# - mega2560

View File

@ -1,7 +1,7 @@
//
// FILE: I2C_24LC1025.cpp
// AUTHOR: Rob Tillaart
// VERSION: 0.1.4
// VERSION: 0.1.6
// PURPOSE: I2C_24LC1025 library for Arduino with EEPROM I2C_24LC1025 et al.
//
// HISTORY:
@ -11,13 +11,14 @@
// 0.1.3 2021-02-02 add updateBlock();
// 0.1.4 2021-05-27 fix library.properties;
// 0.1.5 2021-08-30 fix #3 I2C_DEVICESIZE_24LC512 => I2C_DEVICESIZE_24LC1025
// 0.1.6 2021-12-19 update library.json, license, minor edits
#include "I2C_24LC1025.h"
// TWI buffer needs max 2 bytes for eeprom address
// 1 byte for eeprom register address is available in txbuffer
// TWI buffer needs max 2 bytes for EEPROM address
// 1 byte for EEPROM register address is available in TX buffer
#if defined(ESP32) || defined(ESP8266)
#define I2C_BUFFERSIZE 128
#else
@ -126,7 +127,7 @@ uint32_t I2C_24LC1025::readBlock(const uint32_t memoryAddress, uint8_t* buffer,
addr += cnt;
buffer += cnt;
len -= cnt;
yield(); // For OS scheduling etc
yield(); // For OS scheduling
}
return rv;
}
@ -158,7 +159,7 @@ int I2C_24LC1025::updateBlock(const uint32_t memoryAddress, const uint8_t* buffe
addr += cnt;
buffer += cnt;
len -= cnt;
yield(); // For OS scheduling etc
yield(); // For OS scheduling
}
return rv;
}
@ -214,7 +215,7 @@ void I2C_24LC1025::_beginTransmission(uint32_t memoryAddress)
delayMicroseconds(50);
}
uint16_t memAddr = (memoryAddress & 0xFFFF);
_wire->beginTransmission(_actualAddress); // device addres + bit 16
_wire->beginTransmission(_actualAddress); // device address + bit 16
_wire->write((memAddr >> 8) & 0xFF); // highByte
_wire->write(memAddr & 0xFF); // lowByte
}
@ -278,3 +279,4 @@ int I2C_24LC1025::_ReadBlock(uint32_t memoryAddress, uint8_t* buffer, const uint
// -- END OF FILE --

View File

@ -2,7 +2,7 @@
//
// FILE: I2C_24LC1025.h
// AUTHOR: Rob Tillaart
// VERSION: 0.1.5
// VERSION: 0.1.6
// PURPOSE: I2C_24LC1025 library for Arduino with EEPROM 24FC1025 et al.
// HISTORY: See I2C_24LC1025.cpp
// URL: https://github.com/RobTillaart/I2C_24LC1025
@ -12,7 +12,7 @@
#include "Wire.h"
#define I2C_24LC1025_VERSION (F("0.1.5"))
#define I2C_24LC1025_VERSION (F("0.1.6"))
#define I2C_DEVICESIZE_24LC1025 131072
@ -32,25 +32,25 @@ public:
bool isConnected();
// writes a byte to memaddr
// writes a byte to memoryAddress
int writeByte(const uint32_t memoryAddress, const uint8_t value);
// writes length bytes from buffer to EEPROM
// writes length bytes from buffer to EEPROM
int writeBlock(const uint32_t memoryAddress, const uint8_t *buffer, const uint32_t length);
// set length bytes in the EEPROM to the same value.
// set length bytes in the EEPROM to the same value.
int setBlock(const uint32_t memoryAddress, const uint8_t value, const uint32_t length);
// returns the value stored in memaddr
// returns the value stored in memoryAddress
uint8_t readByte(const uint32_t memoryAddress);
// reads length bytes into buffer
// reads length bytes into buffer
uint32_t readBlock(const uint32_t memoryAddress, uint8_t *buffer, const uint32_t length);
// updates a byte at memory address, writes only if there is a new value.
// return 0 if data is same or written OK, error code otherwise.
// updates a byte at memory address, writes only if there is a new value.
// return 0 if data is same or written OK, error code otherwise.
int updateByte(const uint32_t memoryAddress, const uint8_t value);
// updates a block in memory, writes only if there is a new value.
// only to be used when you expect to write same buffer multiple times.
// test your performance gains!
// updates a block in memory, writes only if there is a new value.
// only to be used when you expect to write same buffer multiple times.
// test your performance gains!
int updateBlock(const uint32_t memoryAddress, const uint8_t* buffer, const uint32_t length);
@ -62,10 +62,10 @@ public:
private:
uint8_t _deviceAddress;
uint8_t _actualAddress; // a.k.a. controlByte
uint32_t _lastWrite;
uint32_t _lastWrite = 0;
uint32_t _deviceSize = I2C_DEVICESIZE_24LC1025;
uint8_t _pageSize = I2C_PAGESIZE_24LC1025;
int _error; // TODO.
int _error = 0; // TODO.
void _beginTransmission(uint32_t memoryAddress);
@ -79,4 +79,6 @@ private:
bool _debug = true;
};
// -- END OF FILE --

View File

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2021-2021 Rob Tillaart
Copyright (c) 2021-2022 Rob Tillaart
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@ -8,7 +8,7 @@
# I2C_24LC1025 - I2C 1MB EEPROM
Arduino library for for external I2C EEPROM - 24LC1025 and equivalents e.g. 24AA1025/24FC1025
Arduino library for for external I2C EEPROM - 24LC1025 and equivalents e.g. 24AA1025/24FC1025.
## Description
@ -32,7 +32,7 @@ Most important change is 32 bit memory addresses.
### Constructor
- **I2C_24LC1025(uint8_t deviceAddress, TwoWire \*wire = &Wire)** constructor, optional Wire interface
- **I2C_24LC1025(uint8_t deviceAddress, TwoWire \*wire = &Wire)** constructor, optional Wire interface.
- **bool begin()** initializes the I2C bus and checks if the device is available on the I2C bus.
- **bool begin(uint8_t sda, uint8_t scl)** idem for ESP32 / ESP8266 and alike.
- **bool isConnected()** test to see if device is on the bus.
@ -41,7 +41,8 @@ Most important change is 32 bit memory addresses.
### Core functions
- **int writeByte(uint32_t memoryAddress, uint8_t value)** write a single byte to the specified memory address.
- **int updateByte(uint32_t memoryAddress, uint8_t value)** write a single byte, but only if changed. Returns 0 if value was same or write succeeded.
- **int updateByte(uint32_t memoryAddress, uint8_t value)** write a single byte, but only if changed.
Returns 0 if value was same or write succeeded.
- **int writeBlock(uint32_t memoryAddress, uint8_t \* buffer, uint32_t length)** write a buffer starting at the specified memory address.
- **int updateBlock(uint32_t memoryAddress, uint8_t \* buffer, uint32_t length)** write a buffer starting at the specified memory address, but only if changed
- **int setBlock(uint32_t memoryAddress, uint8_t value, uint32_t length)** writes the same byte to length places starting at the specified memory address. Returns 0 if OK.

View File

@ -11,6 +11,7 @@ I2C_24LC1025 ee(0x50);
uint32_t start, stop;
void setup()
{
Serial.begin(115200);
@ -37,8 +38,11 @@ void setup()
Serial.println("\nDone...");
}
void loop()
{
}
// -- END OF FILE --

View File

@ -1,9 +1,8 @@
//
// FILE: 24LC1025_test.ino
// AUTHOR: Rob Tillaart
// VERSION: 0.1.0
// PURPOSE: demo
// DATE: 2020
// DATE: 2020-??-??
// (c) : MIT
//
@ -44,6 +43,7 @@ void setup()
Serial.println("\nDone...");
}
void loop()
{
}
@ -92,5 +92,5 @@ void test(uint32_t offset)
}
// -- END OF FILE --

View File

@ -1,20 +1,18 @@
//
// FILE: 24LC1025_test_read.ino
// AUTHOR: Rob Tillaart
// VERSION: 0.1.0
// PURPOSE: demo
// DATE: 2020
// (c) : MIT
//
#include "I2C_24LC1025.h"
I2C_24LC1025 ee(0x50);
uint32_t start, stop;
void setup()
{
Serial.begin(115200);
@ -110,6 +108,7 @@ void setup()
Serial.println("\nDone...");
}
void loop()
{
}
@ -135,7 +134,6 @@ void dump(uint32_t from, uint32_t to)
}
void test(uint32_t offset)
{
Serial.println();
@ -158,5 +156,5 @@ void test(uint32_t offset)
}
// -- END OF FILE --

View File

@ -1,6 +1,6 @@
{
"name": "I2C_24LC1025",
"keywords": "24FC1025 24xx1025",
"keywords": "24FC1025,24xx1025",
"description": "24FC1025 I2C EEPROM",
"authors":
[
@ -15,8 +15,9 @@
"type": "git",
"url": "https://github.com/RobTillaart/I2C_24LC1025"
},
"version": "0.1.5",
"version": "0.1.6",
"license": "MIT",
"frameworks": "arduino",
"platforms": "*"
"platforms": "*",
"headers": "I2C_24LC1025.h"
}

View File

@ -1,5 +1,5 @@
name=I2C_24LC1025
version=0.1.5
version=0.1.6
author=Rob Tillaart <rob.tillaart@gmail.com>
maintainer=Rob Tillaart <rob.tillaart@gmail.com>
sentence=Library for 24FC1025 I2C EEPROM

View File

@ -38,6 +38,7 @@
unittest_setup()
{
fprintf(stderr, "I2C_24LC1025_VERSION: %s\n", (char *) I2C_24LC1025_VERSION);
}
unittest_teardown()
@ -45,6 +46,13 @@ unittest_teardown()
}
unittest(test_constants)
{
assertEqual(131072, I2C_DEVICESIZE_24LC1025);
assertEqual( 128, I2C_PAGESIZE_24LC1025);
}
unittest(test_constructor)
{
Wire.resetMocks();