EEPROM with 64kByte Memory

AT24C64D.h

Committer:
x1dmoesc
Date:
2019-03-05
Revision:
4:660801ce718c
Parent:
3:8a0bfc787463

File content as of revision 4:660801ce718c:

#ifndef AT24C64D_H
#define  AT24C64D_H

#include "mbed.h"
#include "AT24C.h"

class  AT24C64D : public AT24C
{

    public:
        static const uint16_t ADDR_MASK = 0x1FFF;
        
        //variable
        bool bAck;
        static const uint16_t READY_TIME_US = 5000;                             // Write time in us
        static const uint16_t READY_TIME_MS = 5;
        
    
        // function
        AT24C64D(I2C *_i2c, uint8_t uiAddr);
        virtual uint8_t getAddrBus();
        virtual uint8_t getAddrUser();
        
        virtual bool write(char * cData);
        virtual bool write(uint16_t uiAddr, char *cData);
        virtual bool write(uint16_t uiAddr, char * cData, uint16_t uiLength);
        
        
        virtual bool read(char * cData);
        virtual bool read(uint16_t uiAddr, char *cData);
        virtual bool read(uint16_t uiAddr, char * cData, uint16_t uiLength);
        
        virtual void reset();
        virtual bool erase();        
        virtual bool isReady();
        
        
        
        virtual void setAddrWrite(uint16_t Addr);
        virtual uint16_t getAddrWrite();
        virtual void incAddrWrite();
        virtual void decAddrWrite();
         
         
        virtual void setAddrRead(uint16_t Addr);
        virtual uint16_t getAddrRead();
        virtual void incAddrRead();
        virtual void decAddrRead();

         
    private:
    
        // constants

        const uint8_t AT24C64D_W;
        const uint8_t AT24C64D_R;
        static const int HARD_ADDR           = 0xA0;                                 
        static const int USER_ADDR_MASK      = 0x07;

            
        
        static const uint8_t SIZE_PAGE      = 32;                               // 32-Byte Page Write Mode (Partial Page Writes Allowed)
        static const uint16_t MEM_ADDR_MAX  = 8192;                             // 0...4095
        static const uint16_t TIMEOUT_VAL   = 1000;
        
        // variable
        bool bReady;
        bool bTimerRun;
        uint16_t uiTimeOut;
        
        uint16_t uiAddrWrite;
        uint16_t uiAddrRead;
        uint16_t uiAddrTemp; 
         
        uint8_t uiAddrQuotient;                                                  // 
        uint8_t uiAddrRemainder;                                                 //         
        
        char cBuffer[2 + SIZE_PAGE];                                            // 2 Address Bytes + 32 Byte Data
        
        // Class
        I2C *i2c;
        Timer *timer;
        
        
        // functions
        //virtual void setReady();
        void startTimer();
        bool ACKpolling(uint8_t uiAdr);
        //virtual void abortTransmition();

};

#endif