4-GPIO controlled EEPROM AT93C46

EEPROM_AT93C46.h

Committer:
king33jp
Date:
2014-05-09
Revision:
2:bf02c4f42b15
Parent:
1:c846ecbfe067

File content as of revision 2:bf02c4f42b15:

/** AT93C46
 * AT93C46A x16 mode(7pin OC mean NC ,maybe)
 * AT93C46E x16 mode(7pin NC)
 * AT93C46D x16 mode(7pin ORG,H=x16,L=x8)
 * Cap=1Kbits 64words @ x16
 * SB(start bit)=1bit OP-code=2bits Addr=6bits(64word)
 * controll use gpib port(Outoutx3,Inputx1)
 * 
 */
#ifndef MBED_EEPROM_AT93C46_H
#define MBED_EEPROM_AT93C46_H
 
#include "mbed.h"

/** define
 * Command code define
 * 
 */
#define EE_READ  0x80   // 10 xxxxxx(A5-A0)
#define EE_WRITE 0x40   // 01 xxxxxx(A5-A0)
#define EE_EWEN  0x3F   // 00 11XXXX(X is DONT CARE)
#define EE_EWDS  0x00   // 00 00XXXX(X is DONT CARE)
#define EE_ERASE 0xC0   // 11 xxxxxx(A5-A0)

/** EEPROM controll class
 *
 * Example:
 * @code
 * // AT93C46 GPIO use
 
   #include "mbed.h"
   #include "EEPROM_AT93C46.h"
 
   EEPROM_AT93C46 eeprom(PTE20,PTE21,PTE22,PTE23);

   int main() {
 
    eeprom.write_enable();
    eeprom.erase(0);
    eeprom.write(0,0xABCD);
    eeprom.write_disable();
    for(char jj=0;jj<64++){
        printf("%04X(%d,",eeprom.read(jj),jj);
    }
   }
 * @endcode
 */
class EEPROM_AT93C46 {
    public:

  /** Create a EEPROM_AT93C46 object connected to four pins
   *
   * @param eccs pin connected to CS of AT93C46
   * @param eeck pin connected to CLK of AT93C46
   * @param eedi pin connected to DI of AT93C46 
   * @param eedo pin connected to DO of AT93C46
   */ 
    EEPROM_AT93C46(PinName eecs,PinName eeck,PinName eedi,PinName eedo);

/** data=8bit
 * I send to AT93C46 with 9bit data(start bit added )
 * bit send with wait_us(1),so 
 * @param addr Sending data to AT93C46
 */
    void send(char data);

/** Data read ftom AT93C46
 * send( OP-code|addr )
 * @param addr address(6bit)
 */
    unsigned short read(char addr);

/** Data read ftom AT93C46
 * send( OP-code|addr )
 * @param addr address(6bit)
 * @return data( unsigned short 1 word )
 */
    void write_enable();
/** Do write-enable to AT93C46
 * send( OP-code )
 * @param addr address(6bit)
 */
    void write_disable();
/** Do write-disable to AT93C46
 * send( OP-code )
 * @param addr address(6bit)
 */
    void erase(char addr);

/** Data erase to AT93C46
 * send( OP-code|addr )
 * @param addr address(6bit)
 * @param data write data(16bit=short)
 */
    void write(char addr,unsigned short data);
    
    private:
    DigitalOut _eecs; //AT93C46 CS ,active H
    DigitalOut _eeck; //AT93C46 CLK,rise-edge is write,fall-edge is read
    DigitalOut _eedi; //AT93C46 DataIn (mbed is output)
    DigitalIn  _eedo; //AT93C46 DataOut(mbed is input)
};
#endif