eeprom读写


#define EEP_MAX_PAGE_SIZE  32			// 最大页写字节数
#define EEP_MAX_ROM_SIZE   8192		// EEROM容量
#define EEP_ADDR_SIZE      2			// EEROM地址字节数

#define EEP_WRITE_DELAY_TIME   (OS_TICKS_PER_SEC/10)

#define SYS_HEAD_LEN				    7			// 参数版本号,如果EEPROM中的参数版本号和程序中不同则更新参数
// EEPROM各地址分配
#define SYS_HEAD_ADDR				0			// 是否第一次运行标志地址
#define SYS_INFO_ADDR				7			// 系统信息保存地址
//#define PHONE_VOLUME_ADDR			199			// 电话音量保存地址
#define CENTER_NUM_ADDR				200			// 中心号码保存地址
#define PHONE_BOOK_NUM				392			// 呼入呼出电话条数,前四位保存呼入条数,后四位保存呼出条数
#define RING_IN_ADDR				    393			// 呼入限制电话保存地址
#define RING_OUT_ADDR				852			// 呼出限制电话保存地址
#define VIRTUAL_PHONE_ADDR			1281		    // 虚拟号码保存地址
#define AREA_ALARM_ADDR				1292		    // 区域报警信息地址

/********************************************************************************************************* 
** 函数名称: EepromRead
** 功能描述: 读EEPROM处理函数,在使用前,必须定义最大页写字节数,并且定义EEPROM的容量
** 输 入: 
**			buf:读取数据存放地址
**			len:要读取的数据长度
**			ptr:EEPROM存储位置 
** 输 出: 实际读取的数据数目 
********************************************************************************************************/ 
uint16 EepromRead(uint8 *buf , uint16 len , uint16 ptr)
{
	uint8  EeromAddr[2];
	EeromAddr[0] = ptr >> 8;
	EeromAddr[1] = ptr & 0xff;
	return(I2cRead(AT24CXX , buf , EeromAddr , EEP_ADDR_SIZE , len));
}


/********************************************************************************************************* 
** 函数名称: EepromWrite
** 功能描述: 写EEPROM处理函数,在使用前,必须定义最大页写字节数,并且定义EEPROM的容量
** 输 入: 
**			buf:所要发的数据
**			len:要发的数据长度
**			ptr:EEPROM存储位置 
** 输 出: 实际所发的数据数目 
********************************************************************************************************/ 
uint16 EepromWrite(uint8 *buf , uint16 len , uint16 ptr)
{
	uint8 bufTemp[EEP_MAX_PAGE_SIZE + EEP_ADDR_SIZE] , i , j = 0;
	uint8 flowSize , flowLen;
	uint16 sizeTemp , lenTemp = 0;
	
	if((ptr + len) > (EEP_MAX_ROM_SIZE - 1))	// EEPROM溢出保护
		return 0;
        
	flowSize = ptr % EEP_MAX_PAGE_SIZE;
	if(flowSize)								// 如果不是在页的起点
	{
		flowLen = EEP_MAX_PAGE_SIZE - flowSize; // 当前页可写长度
		if(flowLen < len)						// 所要写的数据将跨页
		{
			bufTemp[0] = ptr >> 8;				// 地址高位
			bufTemp[1] = ptr;					// 地址低位
			for(i = 0;i < flowLen;i++)
				bufTemp[i + EEP_ADDR_SIZE] = buf[i];
			ptr += flowLen;                     // 下次将写入的地址
			len -= flowLen;                     // 剩余未写数据的长度
			sizeTemp = I2cWrite(AT24CXX , bufTemp , flowLen + EEP_ADDR_SIZE);//本次写入的长度
			OSTimeDly(EEP_WRITE_DELAY_TIME);    // 写入延时
			lenTemp = lenTemp + sizeTemp - EEP_ADDR_SIZE;
		}
		else//所要写的数据未能跨页
		{
			bufTemp[0] = ptr >> 8;				// 地址高位
			bufTemp[1] = ptr;					// 地址低位
			for(i = 0;i < len;i++)
				bufTemp[i + EEP_ADDR_SIZE] = buf[i];
			sizeTemp = I2cWrite(AT24CXX , bufTemp , len + EEP_ADDR_SIZE);
			OSTimeDly(EEP_WRITE_DELAY_TIME);
			return (sizeTemp - EEP_ADDR_SIZE);  // 完毕返回
		}
	}
	while(len / EEP_MAX_PAGE_SIZE)              //剩余未写数据长度仍大于整页长度
	{
		bufTemp[0] = ptr >> 8;					// 地址高位
		bufTemp[1] = ptr;						// 地址低位
		j = lenTemp;							
		for(i = 0;i < EEP_MAX_PAGE_SIZE;i++)
			bufTemp[i + EEP_ADDR_SIZE] = buf[j + i];
		ptr += EEP_MAX_PAGE_SIZE;
		j += EEP_MAX_PAGE_SIZE;                 // 
		len -= EEP_MAX_PAGE_SIZE;
		sizeTemp = I2cWrite(AT24CXX , bufTemp , EEP_MAX_PAGE_SIZE + EEP_ADDR_SIZE);
		OSTimeDly(EEP_WRITE_DELAY_TIME);
		lenTemp = lenTemp + sizeTemp - EEP_ADDR_SIZE;
	}
	if(len)                                 // 剩余未写数据长度不足整页长度 
	{
		bufTemp[0] = ptr >> 8;				// 地址高位
		bufTemp[1] = ptr;					// 地址低位
		j = lenTemp;							
		for(i = 0;i < len;i++)
			bufTemp[i + EEP_ADDR_SIZE] = buf[j + i];
		sizeTemp = I2cWrite(AT24CXX , bufTemp , len + EEP_ADDR_SIZE);
		OSTimeDly(EEP_WRITE_DELAY_TIME);
		lenTemp = lenTemp + sizeTemp - EEP_ADDR_SIZE;
	}
	return lenTemp;                         // 返回写入的数据数目
}




EEPROM读写软件是一种用于读取和写入EEPROM芯片数据的软件工具。EEPROM(Electrically Erasable Programmable Read-Only Memory)是一种可擦写可编程的只读存储器,它可以通过电信号进行擦除和编程操作。 EEPROM读写软件通常具有以下功能: 1. 读取数据:软件可以从EEPROM芯片中读取数据,并将其显示在用户界面上。用户可以选择读取特定地址范围的数据,或者将整个EEPROM芯片的数据读取到计算机。 2. 写入数据:软件允许用户将数据写入EEPROM芯片的特定地址。用户可以在界面上输入数据,并选择要写入的地址。软件将通过与EEPROM芯片通信,将数据写入指定的地址。 3. 编辑数据:软件还可以允许用户编辑EEPROM芯片中已存在的数据。用户可以选择要编辑的地址,并在界面上输入新的数据值。 4. 擦除数据:有时候需要将EEPROM芯片中的某些数据擦除。软件可以允许用户选择要擦除的地址范围,并将这些地址上的数据擦除为初始状态。 5. 校验数据:软件可以提供校验功能,用于验证EEPROM芯片中的数据是否正确。用户可以选择要校验的地址范围,并与期望值进行比较,以判断数据是否匹配。 EEPROM读写软件通常需要与专门的硬件设备配合使用,例如EEPROM编程器或读写器。软件通过与硬件设备进行通信,来实现EEPROM芯片的读写操作。该软件能够提高EEPROM芯片数据的读取和写入的效率和准确性,使得相关工作更加便捷。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值