IIC协议,一点小疑问

[复制链接]
2682|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时序要满足才能正常工作。
波板糖 发表于 2013-9-18 17:32 | 显示全部楼层
lubaodong 发表于 2013-6-15 20:53
要是调用IIC_ReadByte()之前没有释放数据总线,SDA为0,在if_else语句中系统会总是执行else部分,导致temp ...

我有的XS128,SDA的值是要看你定义的IO口是输入还是输出,这会卡读不出数据了,顺便请教:什么时候要释放总线??之类的
NE5532 发表于 2013-9-18 20:41 | 显示全部楼层
波板糖 发表于 2013-9-18 17:32
我有的XS128,SDA的值是要看你定义的IO口是输入还是输出,这会卡读不出数据了,顺便请教:什么时候要释放 ...

硬件I2C端口不存在释放的问题,因为本来就是OC的,用单片机端口模拟的I2C存在“释放”,当需要读入数据的时候就要“释放”或者说“设置为输入”。
lubaodong 发表于 2013-9-22 08:42 | 显示全部楼层
波板糖 发表于 2013-9-18 17:32
我有的XS128,SDA的值是要看你定义的IO口是输入还是输出,这会卡读不出数据了,顺便请教:什么时候要释放 ...

楼下老同志说的就很好:D
波板糖 发表于 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

粉丝
快速回复 在线客服 返回列表 返回顶部