一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 1580|回复: 4

[其他综合] 关于IIC总线应答的疑问

[复制链接]
发表于 2014-3-17 10:28 | 显示全部楼层 |阅读模式
    协议上规定当主机向从机发送8位数据后需要从机做应答。我写的程序是判断N次SDA线是否为低电平,如果有一次是低电平就退出判断(认为有应答)。当超过N次都没检测到低电平时也退出判断(未做其他处理,相当于也是认为有应答)。目前看来此程序的运行也是正常的。
    我的疑问是万一真的是器件因某种原因没应答,那肯定会出问题的。我想是不是当没检测到应答时做某种处理?比如说主机重复发一次数据。上网查看了很多别人写的例子也没看到有对无应答信号时做相应处理的。不知道大家是怎么做的?

发表于 2014-3-17 11:09 | 显示全部楼层
首先要判断scl电平是否为低,这是总线被被的器件占用了。
如果发生start信号没有ack,等待后可以先发stop信号,等待一段时间后,再发start信息。多次发生start如果没有反应,应该可以判断是从器件失效了,放弃吧。
回复

使用道具 举报

发表于 2014-3-17 12:02 | 显示全部楼层
你都没判断从机是否占用,就发数据,然后判断从机是否应答这是不对的。如果就是一个器件的话,可以先发送停止信号稍等后在发送开始信号,我认为这样比较可靠。
回复

使用道具 举报

发表于 2014-3-17 13:06 | 显示全部楼层
应答肯定要检测到的,本来i2c就相对容易干扰了 还不去认真对待。我个人认为:如果无应答,那就发送i2c结束信号,复位从机总线,然后再发送起始信号 重新发送一次刚才没有应答的数据帧,如果还没应答 就认为器件故障 显示出错代码
回复

使用道具 举报

 楼主| 发表于 2014-3-17 15:21 | 显示全部楼层
谢谢大家!
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-10-31 18:28 , Processed in 0.033822 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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