@@ -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
109111void 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
126129void 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
143147void 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
149154uint8_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
167173void 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+
221237void 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
247264void 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){
325343void EEPROM_SPI_WE::continuousPutDisable (){
326344 digitalWrite (csPin, HIGH);
327345 _spi->endTransaction ();
328- while (isBusy ());
346+ // while(isBusy());
347+ waitUntilReady ();
329348}
330349
331350void 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 }
0 commit comments