128K Serial EEPROM read write erase chip erase functions SPI EEPROM Nucleo F767ZI
Diff: EE25LC1024.cpp
- Revision:
- 1:c389d5f4913d
- Parent:
- 0:81848bf6dd4a
--- a/EE25LC1024.cpp Fri Jun 01 12:54:02 2018 +0000
+++ b/EE25LC1024.cpp Tue Oct 23 09:39:31 2018 +0000
@@ -1,12 +1,12 @@
// EE25LC1024.cpp
-
+#include "includes.h"
#include"EE25LC1024.h"
// CONSTRUCTOR
EE25LC1024::EE25LC1024(PinName mosi, PinName miso, PinName sclk, PinName cs) : SPI(mosi, miso, sclk), _cs(cs)
{
this->format(SPI_NBIT, SPI_MODE);
- this->frequency(SPI_FREQ);
+ this->frequency(SPI_FREQ_EEPROM);
chipDisable();
}
// READING
@@ -22,7 +22,7 @@
int EE25LC1024::ReleaseDPD_ReadSign(void)
{
chipEnable();
- this->write(RDID);
+ this->write(ReadID);
this->write(DUMMY_ADDR);
this->write(DUMMY_ADDR);
this->write(DUMMY_ADDR);
@@ -55,9 +55,10 @@
this->write((addr & ADDR_BMASK0) >> ADDR_BSHIFT0);
for (int i = 0; i < count; i++) {
buf[i] = this->write(DUMMY_ADDR);
- printf("i= %d :%c \r\n",i,buf[i]);
+ // printf("i= %d :%c \r\n",i,buf[i]);
}
chipDisable();
+ // wait_ms(2);
}
// WRITING
@@ -72,15 +73,24 @@
this->write(data);
chipDisable();
writeDisable();
- wait_ms(6);
+ uint8_t busy=checkIfBusy();
+ while(busy)
+ {
+ busy=checkIfBusy();
+ }
// wait(WAIT_TIME);//instead of wait poll for WIP flag of status reg or use checkIfBusy() function...see main for more dtails
}
void EE25LC1024::writeStream(int addr, char* buf, int count)
{
+
if (count < 1)
return;
+
writeEnable();
+
+
+
chipEnable();
this->write(WRITE);
this->write((addr & ADDR_BMASK2) >> ADDR_BSHIFT2);
@@ -91,8 +101,15 @@
}
chipDisable();
writeDisable();
- wait_ms(6);
-}
+ wait_ms(2);
+ uint8_t busy= checkIfBusy();
+ while(busy==1)
+ {
+ //printf("Busy :%d\r\n",busy);
+ wait_ms(1);
+ busy= checkIfBusy();
+ }
+ }
void EE25LC1024::writeString(int addr, string str)
{
@@ -108,7 +125,11 @@
this->write(str.at(i));
chipDisable();
writeDisable();
- wait_ms(6);//instead of wait poll for WIP flag of status reg or use checkIfBusy() function...see main for more dtails
+ uint8_t busy=checkIfBusy();
+ while(busy)
+ {
+ busy=checkIfBusy();
+ }//instead of wait poll for WIP flag of status reg or use checkIfBusy() function...see main for more dtails
}
@@ -132,7 +153,11 @@
this->write(CE);
chipDisable();
writeDisable();
- wait_ms(10);//instead of wait poll for WIP flag of status reg or use checkIfBusy() function...see main for more dtails
+ uint8_t busy=checkIfBusy();
+ while(busy)
+ {
+ busy=checkIfBusy();
+ }//instead of wait poll for WIP flag of status reg or use checkIfBusy() function...see main for more dtails
}
@@ -146,21 +171,31 @@
this->write((addr & ADDR_BMASK0) >> ADDR_BSHIFT0);
chipDisable();
writeDisable();
- wait_ms(10);//instead of wait poll for WIP flag of status reg or use checkIfBusy() function...see main for more dtails
+ uint8_t busy=checkIfBusy();
+ while(busy)
+ {
+ busy=checkIfBusy();
+ }//instead of wait poll for WIP flag of status reg or use checkIfBusy() function...see main for more dtails
}
void EE25LC1024::pageErase(int addr)
{
writeEnable();
+
chipEnable();
+
this->write(SE);
this->write((addr & ADDR_BMASK2) >> ADDR_BSHIFT2);
this->write((addr & ADDR_BMASK1) >> ADDR_BSHIFT1);
this->write((addr & ADDR_BMASK0) >> ADDR_BSHIFT0);
chipDisable();
writeDisable();
- wait_ms(6);//instead of wait poll for WIP flag of status reg or use checkIfBusy() function...see main for more dtails
+ uint8_t busy=checkIfBusy();
+ while(busy)
+ {
+ busy=checkIfBusy();
+ }//instead of wait poll for WIP flag of status reg or use checkIfBusy() function...see main for more dtails
}
@@ -169,11 +204,17 @@
uint8_t EE25LC1024::checkIfBusy()
{
uint8_t value=readRegister();
- printf("Value of Status Reg=%X\r\n\r\n",value);
- if((value&0x01)==0x01)
+ // printf("\r\n Value of Status Reg=%X\r\n\r\n",value);
+ if((value & 0x01)==0x01 )
+ {
+ wait_ms(1);
return 1;
+ }
else
+ {
+ wait_ms(1);
return 0;
+ }
}
void EE25LC1024::writeRegister(uint8_t regValue)
@@ -210,10 +251,14 @@
this->write(one);
chipDisable();
writeDisable();
- wait_ms(6);
+ uint8_t busy=checkIfBusy();
+ while(busy)
+ {
+ busy=checkIfBusy();
+ }
}
-long EE25LC1024::raedLong(int addr)
+long EE25LC1024::readLong1(int addr)
{
//Read the 4 bytes from the eeprom memory.
chipEnable();