打印

PIC单片接I2C通信问题请教

[复制链接]
2012|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
46621295|  楼主 | 2009-2-12 22:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PIC18F6720通过I2C总线对一片外部数据存储芯片进行数据写入和读出,但现在程序在一种情况下就出错,即如果连续写入的字节数目大于64时,从第65个字节开始数据根本没有被写入。比如,我要从地址0x100开始写入共67个字节的数据,1~64都是正确的(即0x100~0x139),第65、66、67字节是没有写入的(即0x140、0x141、0x142)。

另外,发现如果我在第64个字节时关闭I2C,然后马上再次开启I2C,将起始定义地址赋值为0x140,执行剩余的三次写入,则0x140、0x141、0x142的数据可被正确写入。

存储地址是没有超出边界,并且我如果不用连续写入,而是单字节对上述出错的地址写入就没任何问题。

原来不能正确写入的程序如下:

void EEPageWrite(unsigned int address,unsigned char number) 


 unsigned int temp;
 unsigned char j;
 temp=address;
 IICEEHADDR=temp>>8;
 IICEELADDR=temp&0xFF;
 IICEEDATA=*data;
 p_LC515WP=0;

 IdleI2C();

 StartI2C();
 
 WakeI2C(0xA0|I2C_CS);
 
 WriteI2C(IICEEHADDR);
 
 WriteI2C(IICEELADDR);
 
 for(j=1;j<=number;j++)
 {
  WriteI2C(0x4a);
  data++;
 } 
 
 StopI2C();
 p_LC515WP=1;

}

能正确写入的程序如下:

void EEPageWrite(unsigned int address,unsigned char number) 


 unsigned int temp;
 unsigned char j;
 temp=address;
 IICEEHADDR=temp>>8;
 IICEELADDR=temp&0xFF;
 IICEEDATA=*data;
 p_LC515WP=0;

 IdleI2C();

 StartI2C();
 
 WakeI2C(0xA0|I2C_CS);
 
 WriteI2C(IICEEHADDR);
 
 WriteI2C(IICEELADDR);
 
 for(j=1;j<=number-3;j++)
 {
  WriteI2C(0x4a);
  data++;
 } 
 
 StopI2C();
 p_LC515WP=1;
 
 //
 temp=address+64;
 IICEEHADDR=temp>>8;
 IICEELADDR=temp&0xFF;
 IICEEDATA=0x4a;
 p_LC515WP=0;

 IdleI2C();

 StartI2C();
 
 WakeI2C(0xA0|I2C_CS);
 
 WriteI2C(IICEEHADDR);
 
 WriteI2C(IICEELADDR);
 
 for(j=1;j<=3;j++)   //如果循环条件改成(j=number-2;j<=number;j++)也能正确写入数据!!
 {
  WriteI2C(0x4a);
  data++;
 } 
 
 StopI2C();
 p_LC515WP=1;
}

相关帖子

沙发
sz_kd| | 2009-2-12 22:32 | 只看该作者

是不是超边界了,看看DateSheet吧

使用特权

评论回复
板凳
46621295|  楼主 | 2009-2-12 23:23 | 只看该作者

实验新发现问题

实验新发现问题:如果起始地址address在0x100~0x10f之间,则从0x140开始就不能正确写入。我为了检查0x140地址是否有问题,将起始地址address设置为0x140,结果是0x140可正确写入,但从0x180开始又出现不能正确写入的情况。这是怎么回事,我用的存储芯片是24lc515.

使用特权

评论回复
地板
呆板书生| | 2009-2-13 08:27 | 只看该作者

跨页问题

建议楼主再看看eeprom的datasheet

使用特权

评论回复
5
yewuyi| | 2009-2-13 08:37 | 只看该作者

你用什么都一样

使用特权

评论回复
6
ayb_ice| | 2009-2-13 09:04 | 只看该作者

LZ有没有页操作概念

使用特权

评论回复
7
zhaoyu2005| | 2009-2-13 10:39 | 只看该作者

有24C515么?

没听说过!看下资料都能解决的问题也来问,有这个时间早就解决了

使用特权

评论回复
8
雁舞白沙| | 2009-2-13 11:25 | 只看该作者

64字节一页

需要自己判断是否跨页的问题!

使用特权

评论回复
9
46621295|  楼主 | 2009-2-13 11:38 | 只看该作者

如果跨页的话,需要关闭I2C后再次开启执行写入操作吗?

谢谢!

使用特权

评论回复
10
zg_z| | 2009-2-13 11:56 | 只看该作者

不需要

使用特权

评论回复
11
46621295|  楼主 | 2009-2-13 15:14 | 只看该作者

除了上面分两次写如的方法,还有其他简单实现的方法吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

56

主题

100

帖子

1

粉丝