Source code for EEPROM
#!/usr/bin/python
__author__ = "D.Qendri"
__copyright__ = "Copyright 2015 Sensorian"
__license__ = "GPL V3"
__version__ = "1.0"
import sys
import smbus
import time
bus = smbus.SMBus(1)
EEPROMaddress = 0x57	  # EEPROM address
EEPROM_WRITE  = 0xae      #  DEVICE ADDR for EEPROM (writes)   
EEPROM_READ  = 0xaf       #  DEVICE ADDR for EEPROM (reads)  
RTCC_WRITE   = 0xde       #  DEVICE ADDR for RTCC MCHP  (writes) 
RTCC_READ    = 0xdf       #  DEVICE ADDR for RTCC MCHP  (reads)
SRAM_PTR     = 0x20       #  pointer of the SRAM area (RTCC) 
EEPROM_SREG  = 0xff       #  STATUS REGISTER in the  EEPROM
BP0    =  0x04
BP1    =  0x08
[docs]class PROTECTION_t:
	"""Class type for EEPROM protection settings."""
	QUARTER = 1
	HALF = 2
	ALL = 3
 
[docs]class EEPROM(object):
	"""Class object of the MCP79410 EEPROM chip."""
	
	EEPROM_START = 0x00
	EEPROM_END   = 0x7F
	EEPROM_PROTECTED_START 	= 0xF0
	EEPROM_PROTECTED_END    = 0xF7
	EEPROM_SREG  = 0xff       #  STATUS REGISTER in the  EEPROM
	def __init__(self):
		"""
		Initializes the EEPROM object.
		
		
		:param none: 
		:returns: none
		"""
		self._address = EEPROMaddress		
		
[docs]	def EEPROM_Write(self,mem_address,ee_data):
		"""
		Write a single byte in the I2C EEPROM.
		
		
		:param mem_address:  Memory register to write to.
		:returns: ee_data - Byte data to write.
		"""
		self.writeRegister(mem_address,ee_data)
		 
[docs]	def EEPROM_WriteProtected(self,mem_address,ee_data):
		"""
		Writes to the special protected EEPROM space.
		
		
		:param mem_address:  Memory register to write to.
		:returns: ee_data - Byte data to write.
		"""
		self.writeRegister(mem_address,ee_data)
		 
[docs]	def EEPROM_Read(self,mem_address):
		"""
		The function reads a data byte from the EEPROM.
		
		
		:param mem_address: Address of register.
		:returns: reg - Register content.
		"""
		return self.readRegister(mem_address)
			 
[docs]	def EEPROM_SetBlockProtection(self,protSetting):
		"""
		This function sets the EEPROM Block protection settings.
		
		
		:param mem_address: EEPROM address to write to.
		:returns: reg - Page buffer.
		"""
		self.writeRegister(EEPROM_SREG,protSetting) 
		 
[docs]	def EEPROM_ReadPage(self,mem_address):
		"""
		This function reads a single page from the RTCC EEPROM.
		
		
		:param mem_address: EEPROM address to write to
		:returns: buffer - Page buffer
		"""
		buffer = bus.read_i2c_block_data(self._address,mem_address,8)
		return buffer
		 
[docs]	def EEPROM_WritePage(self,mem_address,buffer):
		"""
		This function writes a single page to the RTCC EEPROM.
		
		
		:param mem_address: EEPROM address to write to
		:returns: buffer - Page buffer
		"""
		bus.write_i2c_block_data(self._address,mem_address,buffer)							#Enable clock
 
[docs]	def writeRegister(self,rtcc_reg,dat):
		"""
		Write a new value on the register.
		
		
		:param rtcc_reg: Address of the register.
		:param dat:  Byte value to be written on the register.
		:returns: none
		"""
		bus.write_byte_data(self._address, rtcc_reg, dat)
 
[docs]	def readRegister(self,rtcc_reg):
		"""
		Read the value of the register.
		
		
		:param rtcc_reg: Address of the register.
		:returns: Register byte content 
		"""
		result = bus.read_byte_data(self._address, rtcc_reg) & 0xFF
		return result