mirror of
https://github.com/RobTillaart/Arduino.git
synced 2024-09-20 00:55:58 -04:00
1.8.1 I2C_EEPROM
This commit is contained in:
parent
fc83b82d66
commit
380fb0b5c6
@ -6,12 +6,19 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
|||||||
and this project adheres to [Semantic Versioning](http://semver.org/).
|
and this project adheres to [Semantic Versioning](http://semver.org/).
|
||||||
|
|
||||||
|
|
||||||
|
## [1.8.1] - 2023-12-14
|
||||||
|
- add **uint32_t determineSizeNoWrite()**, kudos to roelandkluit
|
||||||
|
- add example
|
||||||
|
- minor edits
|
||||||
|
|
||||||
|
|
||||||
## [1.8.0] - 2023-11-24 (breaking change)
|
## [1.8.0] - 2023-11-24 (breaking change)
|
||||||
- simplify **begin()**, remove setting Wire pins from library.
|
- simplify **begin()**, remove setting Wire pins from library.
|
||||||
- add **getAddress()**
|
- add **getAddress()**
|
||||||
- update readme.md
|
- update readme.md
|
||||||
- update examples
|
- update examples
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
## [1.7.4] - 2023-09-06
|
## [1.7.4] - 2023-09-06
|
||||||
- solve #57 add support for WriteProtectPin
|
- solve #57 add support for WriteProtectPin
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// FILE: I2C_eeprom.cpp
|
// FILE: I2C_eeprom.cpp
|
||||||
// AUTHOR: Rob Tillaart
|
// AUTHOR: Rob Tillaart
|
||||||
// VERSION: 1.8.0
|
// VERSION: 1.8.1
|
||||||
// PURPOSE: Arduino Library for external I2C EEPROM 24LC256 et al.
|
// PURPOSE: Arduino Library for external I2C EEPROM 24LC256 et al.
|
||||||
// URL: https://github.com/RobTillaart/I2C_EEPROM.git
|
// URL: https://github.com/RobTillaart/I2C_EEPROM.git
|
||||||
|
|
||||||
@ -305,6 +305,35 @@ uint32_t I2C_eeprom::determineSize(const bool debug)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// new 1.8.1 #61
|
||||||
|
uint32_t I2C_eeprom::determineSizeNoWrite()
|
||||||
|
{
|
||||||
|
// try to read a byte to see if connected
|
||||||
|
if (!isConnected()) return 0;
|
||||||
|
|
||||||
|
bool addressSize = _isAddressSizeTwoWords;
|
||||||
|
byte dummyVal = 0;
|
||||||
|
uint32_t lastOkSize = 0;
|
||||||
|
|
||||||
|
for (uint32_t size = 128; size <= 65536; size *= 2)
|
||||||
|
{
|
||||||
|
_isAddressSizeTwoWords = (size > I2C_DEVICESIZE_24LC16); // == 2048
|
||||||
|
|
||||||
|
// Try to read last byte of the block, should return length of 0 when fails
|
||||||
|
if (readBlock(size - 1, &dummyVal, 1) == 0)
|
||||||
|
{
|
||||||
|
_isAddressSizeTwoWords = addressSize;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lastOkSize = size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return lastOkSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
uint32_t I2C_eeprom::getDeviceSize()
|
uint32_t I2C_eeprom::getDeviceSize()
|
||||||
{
|
{
|
||||||
return _deviceSize;
|
return _deviceSize;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
//
|
//
|
||||||
// FILE: I2C_eeprom.h
|
// FILE: I2C_eeprom.h
|
||||||
// AUTHOR: Rob Tillaart
|
// AUTHOR: Rob Tillaart
|
||||||
// VERSION: 1.8.0
|
// VERSION: 1.8.1
|
||||||
// PURPOSE: Arduino Library for external I2C EEPROM 24LC256 et al.
|
// PURPOSE: Arduino Library for external I2C EEPROM 24LC256 et al.
|
||||||
// URL: https://github.com/RobTillaart/I2C_EEPROM.git
|
// URL: https://github.com/RobTillaart/I2C_EEPROM.git
|
||||||
|
|
||||||
@ -104,6 +104,7 @@ public:
|
|||||||
|
|
||||||
// Meta data functions
|
// Meta data functions
|
||||||
uint32_t determineSize(const bool debug = false);
|
uint32_t determineSize(const bool debug = false);
|
||||||
|
uint32_t determineSizeNoWrite();
|
||||||
uint32_t getDeviceSize();
|
uint32_t getDeviceSize();
|
||||||
uint8_t getPageSize();
|
uint8_t getPageSize();
|
||||||
uint8_t getPageSize(uint32_t deviceSize);
|
uint8_t getPageSize(uint32_t deviceSize);
|
||||||
|
@ -0,0 +1,73 @@
|
|||||||
|
//
|
||||||
|
// FILE: I2C_eeprom_determineSizeNoWrite.ino
|
||||||
|
// AUTHOR: Rob Tillaart
|
||||||
|
// PURPOSE: test determineSizeNoWrite() function
|
||||||
|
|
||||||
|
|
||||||
|
#include "Wire.h"
|
||||||
|
#include "I2C_eeprom.h"
|
||||||
|
|
||||||
|
|
||||||
|
I2C_eeprom ee(0x50, I2C_DEVICESIZE_24LC256);
|
||||||
|
|
||||||
|
uint32_t start, diff;
|
||||||
|
|
||||||
|
|
||||||
|
void setup()
|
||||||
|
{
|
||||||
|
Serial.begin(115200);
|
||||||
|
while (!Serial); // wait for Serial port to connect. Needed for Leonardo only
|
||||||
|
Serial.println(__FILE__);
|
||||||
|
Serial.print("I2C_EEPROM_VERSION: ");
|
||||||
|
Serial.println(I2C_EEPROM_VERSION);
|
||||||
|
|
||||||
|
Wire.begin();
|
||||||
|
|
||||||
|
ee.begin();
|
||||||
|
if (! ee.isConnected())
|
||||||
|
{
|
||||||
|
Serial.println("ERROR: Can't find eeprom\nstopped...");
|
||||||
|
while (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.println("\nDetermine size no write");
|
||||||
|
delay(100);
|
||||||
|
|
||||||
|
start = micros();
|
||||||
|
uint32_t size = ee.determineSizeNoWrite();
|
||||||
|
diff = micros() - start;
|
||||||
|
Serial.print("TIME: ");
|
||||||
|
Serial.print(diff);
|
||||||
|
Serial.println(" us.");
|
||||||
|
if (size == 0)
|
||||||
|
{
|
||||||
|
Serial.println("SIZE: could not determine size");
|
||||||
|
}
|
||||||
|
else if (size > 1024)
|
||||||
|
{
|
||||||
|
Serial.print("SIZE: ");
|
||||||
|
Serial.print(size / 1024);
|
||||||
|
Serial.println(" KB.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Serial.print("SIZE: ");
|
||||||
|
Serial.print(size);
|
||||||
|
Serial.println(" bytes.");
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.print("PAGE: ");
|
||||||
|
uint8_t pageSize = ee.getPageSize(size);
|
||||||
|
Serial.print(pageSize);
|
||||||
|
Serial.println(" bytes.");
|
||||||
|
|
||||||
|
Serial.println("Done...");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// -- END OF FILE --
|
@ -30,6 +30,7 @@ updateByteVerify KEYWORD2
|
|||||||
updateBlockVerify KEYWORD2
|
updateBlockVerify KEYWORD2
|
||||||
|
|
||||||
determineSize KEYWORD2
|
determineSize KEYWORD2
|
||||||
|
determineSizeNoWrite KEYWORD2
|
||||||
getDeviceSize KEYWORD2
|
getDeviceSize KEYWORD2
|
||||||
getPageSize KEYWORD2
|
getPageSize KEYWORD2
|
||||||
getLastWrite KEYWORD2
|
getLastWrite KEYWORD2
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/RobTillaart/I2C_EEPROM.git"
|
"url": "https://github.com/RobTillaart/I2C_EEPROM.git"
|
||||||
},
|
},
|
||||||
"version": "1.8.0",
|
"version": "1.8.1",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"frameworks": "*",
|
"frameworks": "*",
|
||||||
"platforms": "*",
|
"platforms": "*",
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
name=I2C_EEPROM
|
name=I2C_EEPROM
|
||||||
version=1.8.0
|
version=1.8.1
|
||||||
author=Rob Tillaart <rob.tillaart@gmail.com>
|
author=Rob Tillaart <rob.tillaart@gmail.com>
|
||||||
maintainer=Rob Tillaart <rob.tillaart@gmail.com>
|
maintainer=Rob Tillaart <rob.tillaart@gmail.com>
|
||||||
sentence=Library for I2C EEPROMS
|
sentence=Library for I2C EEPROMS
|
||||||
|
@ -139,6 +139,8 @@ Same as write and update functions above. Returns true if successful, false indi
|
|||||||
- **uint8_t getPageSize()** idem
|
- **uint8_t getPageSize()** idem
|
||||||
- **uint8_t getPageSize(uint32_t deviceSize)** idem
|
- **uint8_t getPageSize(uint32_t deviceSize)** idem
|
||||||
- **uint32_t getLastWrite()** idem
|
- **uint32_t getLastWrite()** idem
|
||||||
|
- **uint32_t determineSizeNoWrite()** function that determines the size of the EEPROM
|
||||||
|
by detecting when a selected memory address is not readable. (new in 1.8.1).
|
||||||
- **uint32_t determineSize(bool debug = false)**
|
- **uint32_t determineSize(bool debug = false)**
|
||||||
function that determines the size of the EEPROM by detecting when a memory address
|
function that determines the size of the EEPROM by detecting when a memory address
|
||||||
is folded upon memory address 0.
|
is folded upon memory address 0.
|
||||||
@ -147,7 +149,7 @@ The debug flag prints some output to Serial.
|
|||||||
|
|
||||||
**Warning**: this function has changed (again) in 1.4.0
|
**Warning**: this function has changed (again) in 1.4.0
|
||||||
|
|
||||||
Test results
|
Test results **determineSize()**
|
||||||
|
|
||||||
| Type | returns | Memory | Page Size | Notes |
|
| Type | returns | Memory | Page Size | Notes |
|
||||||
|:--------|:--------|:---------|:---------:|:------|
|
|:--------|:--------|:---------|:---------:|:------|
|
||||||
|
Loading…
Reference in New Issue
Block a user