⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eeprom.c

📁 Lpc2214读写EEPROM到某一指定的存储空间
💻 C
字号:
#include "config.h"

#define MC24LC01ADDR    0xA0

I2C_Param *I2C_Pam;

/*********************************************************************************************************
** 函数名称: 	M24C01_Write
** 功能描述: 	写24C01命令
** 输 入:		SendBuf: 指向将要写的数据Buf的指针
**				Len:写的数据数目,不包括地址字节
** 输 出:		发送的数据字节数
** 全局变量:	无
** 调用模块: 	
********************************************************************************************************/
uint8 M24C01_Write(uint8 MemAddr,uint8 *SendBuf,uint8 Len)
{
    uint8	k;
    uint32	j;

	IO0CLR = EEPROM_WP;							// 写保护无效,引脚输出低电平 
	I2C_Pam=(I2C_Param *)I2C_Param_Addr;
	for(k=0;k<Len;k++){
		I2C_Pam->Buf[0] = MemAddr++;
		I2C_Pam->Buf[1] = *SendBuf;
		I2C_Pam->Addr = MC24LC01ADDR;
		I2C_Pam->WrLen=2;
		I2C_Pam->RTBuf=I2C_Pam->Buf;
		if(I2cWrite()!=2) break;
		SendBuf++;
		for(j=0;j<30000;j++);	// 延时3.2mS,最少>2.5mS
	}
	IO0SET = EEPROM_WP;							// 写保护有效,引脚输出高电平 
    return k;
}

/*********************************************************************************************************
** 函数名称: 	M24C01_Read
** 功能描述: 	写24C01命令
** 输 入:		RxdBuf: 指向读取数据Buf的指针
**				Len:将要读取的数据数目
** 输 出:		读取的数据字节数
** 全局变量:	无
** 调用模块: 	
********************************************************************************************************/
uint8 M24C01_Read(uint8 MemAddr,uint8 *RxdBuf,uint8 Len)
{
	I2C_Pam=(I2C_Param *)I2C_Param_Addr;
	*RxdBuf = MemAddr;
	I2C_Pam->Addr = MC24LC01ADDR;
	I2C_Pam->WrLen=1;
	I2C_Pam->RdLen=Len;
	I2C_Pam->RTBuf=RxdBuf;
	return(I2cRead());
}

void SaveSecurityCode(uint8 *SecuBuf)
{
	uint16	sum;
	uint16	i;

	sum=0;
	for (i=0;i<30;i++) {
		sum += *(SecuBuf+i);
	}
	sum=-sum;
	*(SecuBuf+30)=sum;
	*(SecuBuf+31)=sum>>8;

	M24C01_Write(0x30,SecuBuf,0x20);	// 0x30- 0x4F,后2个为累加和
	M24C01_Write(0x58,SecuBuf,0x20);	// 0x58 - 0x78
}

void LoadSecurityCode(uint8 *SecuBuf)
{
	uint16	sum;
	uint8	i;

	M24C01_Read(0x30,SecuBuf,0x20);

	sum=0;
	for (i=0;i<30;i++) {
		sum += *(SecuBuf+i);
	}
	sum += *(SecuBuf+30);
	sum += *(SecuBuf+31) << 8;
	if(sum==0) return;

	M24C01_Read(0x58,SecuBuf,0x20);

	sum=0;
	for (i=0;i<30;i++) {
		sum += *(SecuBuf+i);
	}
	sum += *(SecuBuf+30);
	sum += *(SecuBuf+31) << 8;
	if(sum != 0) {	// 密码无效
		*SecuBuf=0x78;
		*(SecuBuf+1)=0x56;
		*(SecuBuf+2)=0x34;
		*(SecuBuf+3)=0x12;
		*(SecuBuf+28)=0x0;
	}
}

void SaveSerialNo(char *SeriBuf)
{
	M24C01_Write(0x08,(uint8 *)SeriBuf,0x20);	// 0x08 - 0x28
}

void LoadSerialNo(char *SeriBuf)
{
	M24C01_Read(0x08,(uint8 *)SeriBuf,0x20);
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -