📄 24c512.c
字号:
#include "i2c.h"
#define READ_CONFIG 0xA1
#define WRITE_CONFIG 0xA0
/**************************************
*配置程序的E2改为128K
***************************************/
/*前64K字节*/
#define READ_FIRMWARE_FRONT64K 0xA5
#define WRITE_FIRMWARE_FRONT64K 0xA4
/*后64K字节*/
#define READ_FIRMWARE_BACK64K 0xA7
#define WRITE_FIRMWARE_BACK64K 0xA6
void c512_config_write(unsigned int addr, char *ptr, unsigned char len)
{
unsigned char tmp;
unsigned char i;
char *tmpPtr;
i2c_wp(0);
i2c_start();
i2c_writeByte(WRITE_CONFIG);
i2c_get_ack();
tmp = addr>>8;
i2c_writeByte(tmp); /*send high address*/
i2c_get_ack();
tmp = addr;
i2c_writeByte(tmp); /*send low address*/
i2c_get_ack();
tmpPtr = ptr;
for(i=0; i<len; i++)
{
tmp = *tmpPtr ++;
i2c_writeByte(tmp);
i2c_get_ack();
}
i2c_stop();
i2c_wp(1);
}
void c512_config_read(unsigned int addr, char *ptr, unsigned char len)
{
unsigned char tmp;
unsigned char i;
char *tmpPtr;
i2c_wp(1);
i2c_start();
i2c_writeByte(WRITE_CONFIG);
i2c_get_ack();
tmp = addr>>8;
i2c_writeByte(tmp); /*send high address*/
i2c_get_ack();
tmp = addr;
i2c_writeByte(tmp); /*send low address*/
i2c_get_ack();
i2c_start();
i2c_writeByte(READ_CONFIG);
i2c_get_ack();
tmpPtr = ptr;
for(i=0; i<len; i++)
{
tmp = i2c_readByte();
*tmpPtr ++ = tmp;
if( i != (len-1) )
i2c_send_ack();
}
i2c_stop();
}
/****************************************************
*flag:0 前64K,1 后64K//in
****************************************************/
void c512_firmware_write(unsigned char flag, unsigned int addr, char *ptr, unsigned char len)
{
unsigned char tmp;
unsigned char i;
char *tmpPtr;
i2c_wp(0);
i2c_start();
if (0 == flag)
i2c_writeByte(WRITE_FIRMWARE_FRONT64K);
else
i2c_writeByte(WRITE_FIRMWARE_BACK64K);
i2c_get_ack();
tmp = addr>>8;
i2c_writeByte(tmp); /*send high address*/
i2c_get_ack();
tmp = addr;
i2c_writeByte(tmp); /*send low address*/
i2c_get_ack();
tmpPtr = ptr;
for(i=0; i<len; i++)
{
tmp = *tmpPtr ++;
i2c_writeByte(tmp);
i2c_get_ack();
}
i2c_stop();
i2c_wp(1);
}
void c512_firmware_read(unsigned char flag, unsigned int addr, char *ptr, unsigned char len)
{
unsigned char tmp;
unsigned char i;
char *tmpPtr;
i2c_wp(1);
i2c_start();
if (0 == flag)
i2c_writeByte(WRITE_FIRMWARE_FRONT64K);
else
i2c_writeByte(WRITE_FIRMWARE_BACK64K);
i2c_get_ack();
tmp = addr>>8;
i2c_writeByte(tmp); /*send high address*/
i2c_get_ack();
tmp = addr;
i2c_writeByte(tmp); /*send low address*/
i2c_get_ack();
i2c_start();
if (0 == flag)
i2c_writeByte(READ_FIRMWARE_FRONT64K);
else
i2c_writeByte(READ_FIRMWARE_BACK64K);
i2c_get_ack();
tmpPtr = ptr;
for(i=0; i<len; i++)
{
tmp = i2c_readByte();
*tmpPtr ++ = tmp;
if( i != (len-1) )
i2c_send_ack();
}
i2c_stop();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -