打印

IIC协议,一点小疑问

[复制链接]
2211|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Imakey|  楼主 | 2013-6-14 20:20 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
IIC协议里面,主机向从机读取数据前,要释放SDA(拉高SDA)总线吗?
写了一个测试程序,PCF8591的,发现DA转换部分没问题,但是AD就是读不回数据,一直是0x00; 后来在下面的读取函数部分加了那一段代码就能读出数据了!为什么会这样??
对照IIC资料研究几天没明白,来论坛请教来了,大家来看看









相关帖子

沙发
joyme| | 2013-6-15 08:52 | 只看该作者
肯定要释放总线,严格的说不是拉高,是需要将SDA设置为输入口
如果需要通过方向寄存器设置输入输出的IO口,拉高是无法读到从器件的数据,必须设置为输入口

使用特权

评论回复
板凳
lubaodong| | 2013-6-15 20:53 | 只看该作者
要是调用IIC_ReadByte()之前没有释放数据总线,SDA为0,在if_else语句中系统会总是执行else部分,导致temp一直为0。
个人浅见,仅供参考。
另外想咨询一个问题:if(SDA)语句来读取SDA的状态,请问这是读芯片引脚上的电平,还是读引脚锁存器中的值呢?(51单片机)

使用特权

评论回复
地板
天风立马| | 2013-6-25 17:08 | 只看该作者
看时序。i2c时序要满足才能正常工作。

使用特权

评论回复
5
波板糖| | 2013-9-18 17:32 | 只看该作者
lubaodong 发表于 2013-6-15 20:53
要是调用IIC_ReadByte()之前没有释放数据总线,SDA为0,在if_else语句中系统会总是执行else部分,导致temp ...

我有的XS128,SDA的值是要看你定义的IO口是输入还是输出,这会卡读不出数据了,顺便请教:什么时候要释放总线??之类的

使用特权

评论回复
6
NE5532| | 2013-9-18 20:41 | 只看该作者
波板糖 发表于 2013-9-18 17:32
我有的XS128,SDA的值是要看你定义的IO口是输入还是输出,这会卡读不出数据了,顺便请教:什么时候要释放 ...

硬件I2C端口不存在释放的问题,因为本来就是OC的,用单片机端口模拟的I2C存在“释放”,当需要读入数据的时候就要“释放”或者说“设置为输入”。

使用特权

评论回复
7
lubaodong| | 2013-9-22 08:42 | 只看该作者
波板糖 发表于 2013-9-18 17:32
我有的XS128,SDA的值是要看你定义的IO口是输入还是输出,这会卡读不出数据了,顺便请教:什么时候要释放 ...

楼下老同志说的就很好:D

使用特权

评论回复
8
波板糖| | 2013-9-25 09:36 | 只看该作者
NE5532 发表于 2013-9-18 20:41
硬件I2C端口不存在释放的问题,因为本来就是OC的,用单片机端口模拟的I2C存在“释放”,当需要读入数据的 ...

输入输出已经解决了,谢谢,用的ADXL345,平衡处液晶显示出来不是1,正常下Z轴会是1,xy是零,这会调不出标准来了

使用特权

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

本版积分规则

个人签名:联系邮箱 997494013@qq.com

76

主题

779

帖子

4

粉丝