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();