📄 eeprom.c
字号:
/***********************************************************************************
/----------------------Copyright (c) 2005 ~ 2008 Miartech. All Rights Reserved.-----------------------/
/***********************************************************************************
**-----------------------------------------File Info--------------------------------------------
** Last modified Date: 2007-09-04
** Descriptions: 24C02/24C128/24C512(EEPROM)'s Device's Primary Functions
**--------------------------------------------------------------------------------------------
** Created By: Kelven
** Created Date: 2007-04-17
**--------------------------------------------------------------------------------------------
** Modified by: Kelven
** Modified date: 2007-09-04
** Version: V3.2.0
** Descriptions:
**--------------------------------------------------------------------------------------------
** Modified by: Li Sufen
** Modified date: 2008-05-20
** Version: V3.2.3
** Descriptions: Updating Key Configrating Function, Added PLC Chip Register Value Setting Module
***********************************************************************************/
#include "..\inc\EEPROM.h"
/***********************************************************************************
** Function Name: EEPROM_Start
** Input Parameters:None
** Output Parameters:None
** Description:Start Condition Of EEPROM's Operation Cycle
***********************************************************************************/
void EEPROM_Start(void)
{
EEPROM_SDA = 1;
EEPROM_SCK = 1;
TOOL_Nop_N();
EEPROM_SDA = 0;
TOOL_Nop_N();
}
/***********************************************************************************
** Function Name: EEPROM_Stop
** Input Parameters:None
** Output Parameters:None
** Implement:Stop Condition Of EEPROM's Operation Cycle
***********************************************************************************/
void EEPROM_Stop(void)
{
EEPROM_SDA = 0;
EEPROM_SCK = 1;
TOOL_Nop_N();
EEPROM_SDA = 1;
TOOL_Nop_N();
}
/***********************************************************************************
** Function Name: EEPROM_ACK
** Input Parameters:None
** Output Parameters:None
** Implement:Acknowledge Send To EEPROM After EEPROM Received Each Word.
***********************************************************************************/
void EEPROM_ACK(void)
{
EEPROM_SDA = 0;
TOOL_Nop_N();
EEPROM_SCK = 1;
TOOL_Nop_N();
EEPROM_SCK = 0;
}
/***********************************************************************************
** Function Name: EEPROM_NoACK
** Input Parameters:None
** Output Parameters:None
** Implement:No Acknowledge Need to Send When Read the Data of Current Address
***********************************************************************************/
void EEPROM_NoACK(void)
{
EEPROM_SDA = 1;
TOOL_Nop_N();
EEPROM_SCK = 1;
TOOL_Nop_N();
EEPROM_SCK = 0;
}
/***********************************************************************************
** Function Name: EEPROM_Wirte
** Input Parameters:cData:The Data Need to Send
** Output Parameters:None
** Implement:Send Data Byte to EEPROM
***********************************************************************************/
void EEPROM_Wirte(BYTE cData)
{
BYTE cBit_Counter = 8;
BYTE cTmp_Data;
do
{
cTmp_Data = cData;
EEPROM_SCK = 0;
TOOL_Nop_N();
if( (cTmp_Data & 0x80) == 0x80 )
{
EEPROM_SDA = 1;
}
else
{
EEPROM_SDA = 0;
}
EEPROM_SCK = 1;
cTmp_Data = cData<<1;
cData = cTmp_Data;
cBit_Counter --;
}
while(cBit_Counter > 0);
EEPROM_SCK = 0;
}
/***********************************************************************************
** Function Name: EEPROM_Read
** Input Parameters:None
** Output Parameters:cData:The Data Need to Read
** Implement:Read Data Byte From EEPROM
***********************************************************************************/
BYTE EEPROM_Read(void)
{
BYTE cData = 0;
BYTE cTmp_Data = 0;
BYTE cBit_Counter = 8;
EEPROM_SDA = 1;
do
{ EEPROM_SCK = 0;
TOOL_Nop_N();
EEPROM_SCK = 1;
TOOL_Nop_N();
if(EEPROM_SDA)
cData = cData | 0x01;
else
cData = cData & 0xfe;
if(cBit_Counter - 1)
{
cTmp_Data = cData<<1;
cData = cTmp_Data;
}
cBit_Counter --;
}
while(cBit_Counter > 0);
return(cData);
}
/***********************************************************************************
** Function Name: EEPROM_Write_Data
** Input Parameters:cAddr:The Address of Data;cData:The Data Write to EEPROM;E2ROMType:EEPROM's Type
** Output Parameters:None
** Implement:Wirte Data to EEPROM
***********************************************************************************/
void EEPROM_Write_Data(WORD cAddr, BYTE cData, BYTE E2ROMType)
{
EEPROM_Start();
EEPROM_Wirte(AddrDevWr);
EEPROM_ACK();
if(E2ROMType == M24512)
{
EEPROM_Wirte((unsigned char)(cAddr>>8));
EEPROM_ACK();
}
EEPROM_Wirte((unsigned char)cAddr);
EEPROM_ACK();
EEPROM_Wirte(cData);
EEPROM_ACK();
EEPROM_Stop();
TOOL_Delay_MS(12);
}
/***********************************************************************************
** Function Name: EE_Read_From
** Input Parameters:cAddr:The Address of Data;E2ROMType:EEPROM's Type
** Output Parameters:cData:The Data Need to Read From EEPROM
** Implement:Read Data From EEPROM
***********************************************************************************/
BYTE EEPROM_Read_Data(WORD cAddr, BYTE E2ROMType)
{
BYTE cData;
EEPROM_Start();
EEPROM_Wirte(AddrDevWr);
EEPROM_ACK();
if(E2ROMType == M24512)
{
EEPROM_Wirte((unsigned char)(cAddr>>8));
EEPROM_ACK();
}
EEPROM_Wirte((unsigned char)cAddr);
EEPROM_ACK();
EEPROM_Start();
EEPROM_Wirte(AddrDevRd);
EEPROM_ACK();
cData = EEPROM_Read();
EEPROM_SCK = 0;
EEPROM_NoACK();
EEPROM_Stop();
return(cData);
}
/***********************************************************************************
** End Of File **
***********************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -