我使用csl对24c256操作
写了下面两个函数,一个保存,一个读取
//保存设置 0失败 1成功 最快写入速度5ms 调用后要延时!!!!
int SaveSetting(unsigned char * buf,unsigned int len)
{
Uint16 datareceive[2];
int x,i;
//1.要写的地址
datareceive[0]=0;
datareceive[1]=0;
x=I2C_write(datareceive,2,1,0×50,3,30000);
//2写数据内容
for(i=0;i<len;i++)
{
while (!I2C_xrdy());
I2C_writeByte (buf[i]);
}
//3.写停止
I2C_sendStop();
return x;
}
//读取设置 0失败 1成功
int LoadSetting(unsigned char * buf,unsigned int len)
{
Uint16 datareceive[2];
int z;
//1. 要读取的地址
datareceive[0]=0;
datareceive[1]=0;
z=I2C_write(datareceive,2,1,0×50,3,30000);
//2.读取
z=I2C_read((Uint16 *)buf,len,1,0×50,1,30000,0);
return z;
}
系统时钟按照论坛里面的修正了,写数据没有问题(用编程器读取的),用示波器看速度50K
但是用 LoadSetting 就无法读取,第一个执行
z=I2C_write(datareceive,2,1,0×50,3,30000);
返回z=0
执行下面一句 返回z=2 时钟线一直拉低 后面就无法用了
看文档说 在主接收 用模式1 应该没问题啊
按照SPRA785A的例子也只能读一次,也是时钟线一直拉低
已经卡了很久了,希望专家予以解答,谢谢
YtXwz:
将读 改为
void I2C_NACKMy()
{
ioport unsigned int *I2C_I2CMDR =(unsigned int *)0x3C09u;
//开NACK
*I2C_I2CMDR= 0x8000| (*I2C_I2CMDR);
}
//====================================
z=I2C_write(datareceive,2,1,0×50,2,30000);
//2.读取
z=I2C_read((Uint16 *)buf,len,1,0×50,3,30000,0);
I2C_NACKMy();
I2C_readByte();
I2C_sendStop();
倒是可以把时钟线拉高但是读得字节不对
在网上找了一圈 发现很少用5509A的i2c读eeprom的,请专家解答一下吧
YtXwz:
回复 RAY CHEN:
初始化没有问题
用I2C_writeByte I2C_readByte 能读写字节
但是最后的NACK没法发送,会导致eeprom挂起,后面就无法操作了