OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3045|回复: 1

iic的软件模拟驱动为什么不对返回的有效应答进行检验

[复制链接]

1

主题

4

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2015-12-25
在线时间
0 小时
发表于 2015-12-25 17:36:58 | 显示全部楼层 |阅读模式
5金钱
正点原子的iic的软件模拟驱动,为什么不对返回的有效应答进行检验,
等待应答:u8 IIC_Wait_Ack(void)
{
    u8 ucErrTime=0;
    SDA_IN();   
    IIC_SDA=1;delay_us(1);       //第5行
    IIC_SCL=1;delay_us(1);     //第六行
    while(READ_SDA)
    {
        ucErrTime++;
        if(ucErrTime>250)
        {
            IIC_Stop();
            return 1;
        }
    }
    IIC_SCL=0; 
    return 0; 

读函数:u8 AT24CXX_ReadOneByte(u16 ReadAddr)
{                  
    u8 temp=0;                                                                                  
    IIC_Start();  
    if(EE_TYPE>AT24C16)
    {
        IIC_Send_Byte(0XA0);  
        IIC_Wait_Ack();
        IIC_Send_Byte(ReadAddr>>8);    
    }else IIC_Send_Byte(0XA0+((ReadAddr/256)<<1));        
    IIC_Wait_Ack();
    IIC_Send_Byte(ReadAddr%256);  
    IIC_Wait_Ack();        
    IIC_Start();              
    IIC_Send_Byte(0XA1);                
    IIC_Wait_Ack();    
    temp=IIC_Read_Byte(0);           
    IIC_Stop();      
    return temp;
}

问题一:读函数中的等待应答,除了占用了cpu的时间,就算没有收到应答,似乎也没关系,程序也继续执行。为什么不在读函数中加上对等待应答返回值的判断呢?
问题二:等待应答函数的第5行(已经标识)是否可以删除呢?因为上一行已经把数据脚设为输入,那么第5行再对数据引脚赋值并等待1毫秒,有什么意义?
问题三:等待应答函数的第六行,等待1毫秒,是怎么确定的等待时间呢?能保证在进入if语句之前,被访问的器件能够准备好有效应答的低电平吗?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2012-11-17
在线时间
18 小时
发表于 2015-12-25 18:18:00 | 显示全部楼层
问题一:我觉得呢,这里的程序是建立在正常运行的情况下的,如果真有错误产生,是不应该这样简单处理的。在实际产品中当然不会这么使用,没收到应答肯定要提示,没应答时在发送停止条件后就不再执行后面的时序动作,必要时还可以处理其他相关动作,这就看你是怎么处理了。在这里,只是提供给你学习用,想要健壮的程序要依靠你自己去码代码

问题二:人家这里是明确释放SDA线。之前有已经释放了SDA的话当然可以不用添加这句,但是这样处理是依赖于前一步骤,万一前面没有释放而又没有这一句,你就悲剧了

问题三:标准的I2C通信是有具体的时序要求的,实际信号上的时序必须满足I2C时序要求,只要满足了这个条件,等待时间可长一点短一点都无所谓。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 16:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表