打印

IIC的问题,请教高人,内容见内!

[复制链接]
1879|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
雁舞白沙|  楼主 | 2009-11-2 13:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
iic, AD, TE, se, dc
本人用430模拟了一个IIC

发现一个问题:

//-----***-无扇区读---多字节-***-----//
//读取指定器件无扇区指定地址多字节数据到指定地址
//Device=器件地址---单字节
//DataAdd=字节地址---单字节
void IicMuchByteRead(unsigned char DataAdd,unsigned char *DataDptr,unsigned char DataLend)
{
    unsigned char i;
    _DINT();
    WDT();
    IicInit();
    IicStart();
    IicSentByte(0xa0);
    IicSentByte(DataAdd);
    IicStart();
    IicSentByte(0xa1);
    for(i=DataLend-1;i>0;i--)
    {
          *DataDptr=IicReceiveByte();
          DataDptr++;
       SendAcknowledge(0);
    }
    *DataDptr=IicReceiveByte();
    SendAcknowledge(1);
    IicStop();
    WDT();
    Delay(500);
    _EINT();
}

当红色延时更改为:Delay(50);

不能读取第一次的数据,以后的都正常!

不清楚是那里的问题

自己分析:

可能是延时时间不够,IIC还没有来得及应答!

不过也很矛盾,这是读取数据的时序,应该不会出现所谓的应答时间

所以,还麻烦各位告诉小弟!

相关帖子

沙发
leolle| | 2009-11-2 16:13 | 只看该作者
Delay(50);
具体时间是多少?

使用特权

评论回复
板凳
雁舞白沙|  楼主 | 2009-11-3 15:10 | 只看该作者
5毫秒

使用特权

评论回复
地板
古道热肠| | 2009-11-3 15:31 | 只看该作者
读数据应该是不需要延时的吧,把Delay()调用拿掉,再看看结果,还有一点要注意,是共性还是个性?

使用特权

评论回复
5
古道热肠| | 2009-11-3 15:33 | 只看该作者
拿信得过的软件测硬件,拿信得过的硬件测软件,反正软硬件配合的东西,必段要有一个信得过,才能把精力重点放在另一个上面.

使用特权

评论回复
6
雁舞白沙|  楼主 | 2009-11-4 03:14 | 只看该作者
感谢古道热肠的提醒

此问题是个性

原因:由于是用到高频卡的读写,所以要求处理数据时间尽量断,故此缩小了读取时间,同时把写入时间控制在12毫秒以内10毫秒以上。但由于个别器件写入时间不够,造成读取数据的时候,总线还在忙状态,故此读出数据为零。

处理方式:IIC写入延时时间修改为20毫秒,立即读取数据完全正确!批量实验验证了这一点!

下一步准备把写入时间的延时调整到15毫秒。再验证100套,如果不行只能返回20的参数!

再次感谢古道热肠!:handshake

使用特权

评论回复
7
古道热肠| | 2009-11-4 10:13 | 只看该作者
为什么不用发送I2C启动信号后,I2C器件有响应来表有写操作完成呢?这样的兼容性和速度应该是比较好的.
当然要设长长的超时,否则一旦发生硬件故障,函数无法返回.

使用特权

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

本版积分规则

个人签名:学者会友QQ群:72137827 三人行,必有我师!

213

主题

789

帖子

243

粉丝