gongxd 发表于 2012-3-26 20:46:28

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的,请专家解答一下吧????????

黄花梨闹钟 发表于 2012-11-13 11:49:32

这个问题,我也期待答案,5509 写 i2c 的eeprom太少了。谁搞定了分享一下。
页: [1]
查看完整版本: 5509a 使用I2c 无法读取 eeprom 24c256 问题,求助