TI中文支持网
TI专业的中文技术问题搜集分享网站

5509a 无法读取 eeprom 24c256 问题

我使用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挂起,后面就无法操作了

赞(0)
未经允许不得转载:TI中文支持网 » 5509a 无法读取 eeprom 24c256 问题
分享到: 更多 (0)