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