Skip to content

Commit 863755f

Browse files
committed
fix eeprom spi lib to not loop forever
1 parent 49b42a9 commit 863755f

File tree

2 files changed

+31
-10
lines changed

2 files changed

+31
-10
lines changed

lib/EEPROM_SPI_WE/src/EEPROM_SPI_WE.cpp

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ uint8_t EEPROM_SPI_WE::powerUpAndReadID(){
8383
id = _spi->transfer(0x00);
8484
digitalWrite(csPin, HIGH);
8585
_spi->endTransaction();
86-
while(isBusy()){}
86+
// while(isBusy()){}
87+
waitUntilReady();
8788
return id;
8889
}
8990

@@ -103,7 +104,8 @@ void EEPROM_SPI_WE::erasePage(uint32_t addr){
103104
digitalWrite(csPin, HIGH);
104105
_spi->endTransaction();
105106

106-
while(isBusy()){}
107+
// while(isBusy()){}
108+
waitUntilReady();
107109
}
108110

109111
void EEPROM_SPI_WE::eraseSector(uint32_t addr){
@@ -120,7 +122,8 @@ void EEPROM_SPI_WE::eraseSector(uint32_t addr){
120122
digitalWrite(csPin, HIGH);
121123
_spi->endTransaction();
122124

123-
while(isBusy()){}
125+
// while(isBusy()){}
126+
waitUntilReady();
124127
}
125128

126129
void EEPROM_SPI_WE::eraseCompleteEEPROM(){
@@ -136,14 +139,16 @@ void EEPROM_SPI_WE::eraseCompleteEEPROM(){
136139
_spi->transfer(EEP_CE);
137140
digitalWrite(csPin, HIGH);
138141
_spi->endTransaction();
139-
while(isBusy()){}
142+
// while(isBusy()){}
143+
waitUntilReady();
140144
}
141145
}
142146

143147
void EEPROM_SPI_WE::write(uint32_t addr, uint8_t val){
144148
if (read(addr) != val)
145149
writeEEPROM(addr, &val, 1);
146-
while(isBusy()){}
150+
// while(isBusy()){}
151+
waitUntilReady();
147152
}
148153

149154
uint8_t EEPROM_SPI_WE::read(uint32_t addr){
@@ -161,7 +166,8 @@ void EEPROM_SPI_WE::writeProtect(eeprom_writeProtect sectors){
161166
_spi->transfer((sectors << 2) | 0x80);
162167
digitalWrite(csPin, HIGH);
163168
_spi->endTransaction();
164-
while(isBusy()){}
169+
// while(isBusy()){}
170+
waitUntilReady();
165171
}
166172

167173
void EEPROM_SPI_WE::protectStatusRegister(bool protect){
@@ -218,6 +224,16 @@ bool EEPROM_SPI_WE::isBusy(){
218224
return (statusReg & 0x01);
219225
}
220226

227+
bool EEPROM_SPI_WE::waitUntilReady(){
228+
for (uint16_t i = 0; i < 256; i++) {
229+
if ((eepromReadStatusReg() & 0x01) == 0) {
230+
return true;
231+
}
232+
delayMicroseconds(50);
233+
}
234+
return false;
235+
}
236+
221237
void EEPROM_SPI_WE::setSPIClockSpeed(unsigned long clock){
222238
mySPISettings = SPISettings(clock, MSBFIRST, SPI_MODE0);
223239
}
@@ -241,7 +257,8 @@ void EEPROM_SPI_WE::eepromWriteStatusReg(uint8_t cmd){
241257
digitalWrite(csPin, HIGH);
242258
_spi->endTransaction();
243259

244-
while(isBusy()){}
260+
// while(isBusy()){}
261+
waitUntilReady();
245262
}
246263

247264
void EEPROM_SPI_WE::writeEEPROM(uint32_t addr, const uint8_t *buf, uint16_t sizeOfBuf){
@@ -294,7 +311,8 @@ void EEPROM_SPI_WE::writeEEPROM(uint32_t addr, const uint8_t *buf, uint16_t size
294311
addr += chunk;
295312
arrayIndex += chunk;
296313
noOfBytesStillToWrite -= chunk;
297-
while(isBusy()){}
314+
// while(isBusy()){}
315+
waitUntilReady();
298316
}
299317
}
300318

@@ -325,7 +343,8 @@ void EEPROM_SPI_WE::continuousPutEnable(uint32_t addr){
325343
void EEPROM_SPI_WE::continuousPutDisable(){
326344
digitalWrite(csPin, HIGH);
327345
_spi->endTransaction();
328-
while(isBusy());
346+
// while(isBusy());
347+
waitUntilReady();
329348
}
330349

331350
void EEPROM_SPI_WE::continuousWriteEEPROM(const uint8_t *buf, uint16_t sizeOfBuf){
@@ -353,7 +372,8 @@ void EEPROM_SPI_WE::continuousWriteEEPROM(const uint8_t *buf, uint16_t sizeOfBuf
353372
if(pageEnd){
354373
digitalWrite(csPin, HIGH);
355374
_spi->endTransaction();
356-
while(isBusy()){}
375+
// while(isBusy()){}
376+
waitUntilReady();
357377
continuousPutEnable(contAddr);
358378
pageEnd = false;
359379
}

lib/EEPROM_SPI_WE/src/EEPROM_SPI_WE.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ class EEPROM_SPI_WE
110110
}
111111

112112
bool isBusy();
113+
bool waitUntilReady();
113114
uint8_t eepromReadStatusReg();
114115
void setSPIClockSpeed(unsigned long clock);
115116
void setSmallEEPROM();

0 commit comments

Comments
 (0)