/*! \file spieeprom.h \brief Interface for standard SPI EEPROM memories. */
//*****************************************************************************
//
// File Name	: 'spieeprom.h'
// Title		: Interface for standard SPI EEPROM memories
// Author		: Pascal Stang - Copyright (C) 2004
// Created		: 2004.10.07
// Revised		: 2004.10.07
// Version		: 0.1
// Target MCU	: Atmel AVR series
// Editor Tabs	: 4
//
///	\ingroup driver_hw
/// \defgroup spieeprom Interface for standard SPI EEPROM memories (spieeprom.c)
/// \code #include "spieeprom.h" \endcode
/// \par Overview
///		This library provides functions for reading and writing standard
///	25Cxxx/25LCxxx SPI EEPROM memories.  Memory sizes up to 64Kbytes are
///	supported.  Future revisions may include page-write support.
///
/// \Note Library not fully tested!
//
// This code is distributed under the GNU Public License
//		which can be found at http://www.gnu.org/licenses/gpl.txt
//
//*****************************************************************************

#ifndef SPIEEPROM_H
#define SPIEEPROM_H

#include "global.h"

// defines and constants
// commands
#define SPIEEPROM_CMD_READ		0x03	///< Read byte(s)
#define SPIEEPROM_CMD_WRITE		0x02	///< Write byte(s)
#define SPIEEPROM_CMD_WREN		0x06	///< Write Enable
#define SPIEEPROM_CMD_WRDI		0x04	///< Write Disable
#define SPIEEPROM_CMD_RDSR		0x05	///< Read Status Register
#define SPIEEPROM_CMD_WRSR		0x01	///< Write Status Register

// status register bit defines
#define SPIEEPROM_STATUS_WIP	0x01	///< Write in progress
#define SPIEEPROM_STATUS_WEL	0x01	///< Write enable
#define SPIEEPROM_STATUS_BP0	0x01	///< Block Proection 0
#define SPIEEPROM_STATUS_BP1	0x01	///< Block Proection 1
#define SPIEEPROM_STATUS_WPEN	0x01	///< Write Protect Enable

// functions

//! Initialize SPI EEPROM interface
void spieepromInit(void);

//! In the SPI EEPROM read a byte from memory location [memAddr]
u08 spieepromReadByte(u32 memAddr);

//! In the SPI EEPROM write a byte [data] to the memory location [memAddr]
void spieepromWriteByte(u32 memAddr, u08 data);

void spieepromWriteEnable(void);
void spieepromWriteDisable(void);
u08 spieepromReadStatus(void);

#endif
