eeprom.c
//EEPROM-24c02底層驅動文件
#include <msp430f249.h>
#include "delay.h"
#include "iic.h"
#include "eeprom.h"
//EEPROM容量
//- 24C02, 256 X 8 (2K bits)
//- 24C04, 512 X 8 (4K bits)
//- 24C08, 1024 X 8 (8K bits)
//- 24C16, 2048 X 8 (16K bits)
//- 24C32, 4096 X 8 (32K bits)
//- 24C64, 8192 X 8 (64K bits)
//在EEPROM-24c02指定地址寫入一個數據
//Addr:寫入數據的目的地址 0~255 for AT24C02
//Data:要寫入的數據
void Write_Eeprom_OneData(u8 Addr,u8 Data)
{
IIC_Start();
Write_IIC_byte(WriteCom); //寫命令
IIC_Ack();
Write_IIC_byte(Addr);
IIC_Ack();
Write_IIC_byte(Data);
IIC_Ack();
IIC_Stop();
Delay_ms(10);//等待EEPROM寫入數據完成
}
//在EEPROM-24c02指定地址讀出一個數據
//Addr:開始讀數的目的地址 0~255 for AT24C02
//Data:讀到的數據
u8 Read_Eeprom_OneData(u8 Addr)
{
u8 Data;
IIC_Start();
Write_IIC_byte(WriteCom); //寫命令
IIC_Ack();
Write_IIC_byte(Addr);
IIC_Ack();
IIC_Start();
Write_IIC_byte(ReadCom); //讀命令
IIC_Ack();
Data = Read_IIC_byte();
IIC_NoAck();
IIC_Stop();
return Data;
}
//檢查EEPROM-24c02是否正常
//返回1:檢測成功,返回0:檢測失敗
//EEPROM-24c02的最后一個地址(255)來存儲標志字
u8 EEPROM_24C02_Check(void)
{
u8 temp;
IIC_Init();//初始化IIC總線
temp = Read_Eeprom_OneData(255);//先讀取數據
if(temp == 8) return 1;
else
{
Write_Eeprom_OneData(255,8);//24C02的255位置第一次寫入數據
temp = Read_Eeprom_OneData(255);
if(temp == 8) return 1;//讀取數據成功
}
return 0;
}
//在EEPROM-24c02里面的指定地址開始寫入0~4294967295的數據
//Addr:開始寫入的地址;Data:數據
//一個數據占用EEPROM-24c02四個地址
void Write_Eeprom_LenData(u16 Addr,u32 Data)
{
u8 t;
for(t=0; t<4; t++)
{
Write_Eeprom_OneData(Addr+t,(Data>>(8*t))&0xFF);
}
}
//在EEPROM-24c02里面的指定地址開始讀出0~4294967295的數據
//Addr:開始讀出的地址 Data:數據
//該函數用于讀出32bit的數據
u32 Read_Eeprom_LenData(u16 Addr)
{
u8 t;
u32 Data;
for(t=0; t<4; t++)
{
Data <<= 8;
Data += Read_Eeprom_OneData(Addr+4-t-1);
}
return Data;
}
//在EEPROM-24c02里面的指定地址開始寫入指定個數的字符串
//Addr:開始寫入的地址 對24c02為0~255;Buf:數據數組首地址;Num:要寫入數據的個數
void Write_Eeprom_NubStr(u16 Addr,u8 *Buf,u16 Num)
{
while(Num --)
{
Write_Eeprom_OneData(Addr,*Buf);
Addr ++;
Buf ++;
}
}
//在EEPROM-24c02里面的指定地址開始讀出指定個數的字符串
//Addr:開始讀出的地址 對24c02為0~255;Buf:數據數組首地址;Num:要讀出數據的個數
void Read_Eeprom_NubStr(u16 Addr,u8 *Buf,u16 Num)
{
while(Num)
{
*Buf ++= Read_Eeprom_OneData(Addr ++);
Num --;
}
}
|