单片机论坛

标题: 关于用51单片机模拟IIC总线通信(主机给从机发信号,从机无应答时应该终止发送数据) [打印本页]

作者: blossom99    时间: 2018-9-3 19:51
标题: 关于用51单片机模拟IIC总线通信(主机给从机发信号,从机无应答时应该终止发送数据)
最近认真的学习了IIC总线通信,并看了郭天祥老师的书和视频讲解。
但是我有一点疑问:在IIC总线协议里规定当主机给从机发信号,从机无应答时应该终止发送数据,但是郭老师的例程里并没有这一内容,在其他的IIC通信例程中也没有看到类似内容。这是说明这个部分不重要吗?如果要实现是不是需要用到goto语句?



作者: 人中狼    时间: 2018-9-3 22:36
这部分应该都有的,这里的从机应答应该不是应答相应的数据,而是在协议里主机发送一个字节数据后,从机都会返回一个应答的位,只有一个BIT,注意看协议
作者: 马帅    时间: 2018-9-4 00:27
低电平应答ACK,高电平NACK
作者: blossom99    时间: 2018-9-4 01:30
你们都没有理解我的意思。我是说,主机给从机发数据,从机没有给主机应答,即没有在SCK高电平时把SDA拉低(1bit)时,主机应该中断传输才对。但是我看的所有例程里(包括不少12864LCD例程)都没有相关语句,大多只是后面加了一个时钟,都不管SDA是什么,只为了能够顺利进行数据传输。还有AT24C02中读完一节数据应该先非应答,再停止之类的小细节……可能是我抠的太仔细了……
作者: blossom99    时间: 2018-9-4 01:31
人中狼 发表于 2018-9-3 22:36
这部分应该都有的,这里的从机应答应该不是应答相应的数据,而是在协议里主机发送一个字节数据后,从机都会 ...

看楼下我的解释
作者: blossom99    时间: 2018-9-4 01:32
马帅 发表于 2018-9-4 00:27
低电平应答ACK,高电平NACK

看楼下我的解释
作者: 726434632    时间: 2018-9-4 08:31
可以不去理从机、主机自己模拟一个应答位就好了。
类似这种
即应答信号由主机自己模拟、不理会从机。只要芯片没有坏、不影响使用。
void iic_slave_NOACK()//默认非应答信号
{
        SDA=1;
        _nop_();
        SCL=1;
        _nop_();
        SCL=0;       
        _nop_();
}

void MSA300_WriteBytes(unsigned char RegAddr,unsigned char Data)
{
            I2C_Start();//主机准备好了
        I2C_Write(G_SlaveAddr_W);//主机要给从机发数据,知会从机一下
        iic_Ack();//主机当从机默认知道了
        I2C_Write(RegAddr);//主机告诉从机要操纵的地址
        iic_Ack();//主机当从机默认知道了
        I2C_Write(Data);//主机告诉从机要修改的地址中内容
        iic_Ack();//主机当从机默认知道了
        I2C_Stop();//主机挂断了电话
}
作者: 726434632    时间: 2018-9-4 08:37
blossom99 发表于 2018-9-4 01:30
你们都没有理解我的意思。我是说,主机给从机发数据,从机没有给主机应答,即没有在SCK高电平时把SDA拉低( ...

从机如果没有给主机应答、即说明从机坏了或者时序不对。读出来的数据肯定是不对的。所以一般简单用途都不去理会从机是否应答。如果要去理会从机应答那就while等待从机应答、然后加个超时机制,规定时间内while没有检测到从机应答、就return 错误标志,如果成功发送就return 成功标志。主程序里判断是错误标志就输出错误信息即可,比如“通信错误、请更换芯片”
作者: 人中狼    时间: 2018-9-4 10:19
最好可以贴上你所看的例程,或许有的例程为了方便并没有去检测应答,我也是看例程学的IIC,里面就有对从机应答的检测和处理。多看一些例程,现在都用C语言写程序,所以有的例程不需要局限在51,也可以看看如STM32中相关操作的例程
作者: zyaq123    时间: 2018-9-4 11:41
你可以加延时判断啊。定时过后如果没有收到应答,则退出此次发送
作者: zyaq123    时间: 2018-9-4 11:43
从机无应答,可能总线有问题哦,你可以在主机上加延时判断。尽可能少用while,或者while中做一个技术,不然很容易卡机
作者: 温加饱    时间: 2018-10-24 23:44
郭老师的教材只能入门,有很多东西是粗糙的,不严谨的。




欢迎光临 单片机论坛 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1