IIC 之深入理解原理

//  秉着  授人之鱼 不如授人之渔的态度。 本人决定 在以后的日子里,着重讲思想。   
/*通过写iic ,得出以后调协议类 程序的方法。
1: 如果该协议不能够工作 ,首先需要一台示波器,将其两个通道分别挂在 时钟线和数据线上。注意:在挂示波器的同时 
也要讲你的从机挂载上,便于从机的应答信号和数据可以在示波器上显示出来 。(如果io口输出不接任何设备,只接了示波器,则从示波器中只能检测到发射数据)
2: 先从最简单的函数开始, 就拿模拟iic 来说, 将 I2c_Start() 放入主函数中, 主函数 除了 喂狗(防止单片机重复复位)
 以外,再加一个 delay延时函数(为了方便示波器观察数据)
3: 将起始信号的时序图找出来(网上iic协议介绍里边都有),对比示波器上的 波形,如果完全吻合,ok,这个函数没有问题,然后依次对比以后的函数。
4: 一般情况下,在测试的过程中,时钟线上  不管发射信号还是接收信号还是应答信号 都能够在示波器上显示出来(前提是你的硬件接法没有错误)
5:  修正上述测试出现的问题后。 从新运行程序,读取 从设备的 地址位(一般该位 为一个定值,如mpu6050的默认地址为0x68)。如果能够读出数据,则说明iic
已经正常工作了。 
6:另外: 由于本人之前的粗心,将读字节 函数中检测的io口误写成了 别的管脚,导致示波器看抓取的波形是正常的,但单片机io口捕获不到数据,后来经过推理找到了

问题的源头, 以后写程序一定要小心。。


以上是我在半年前写mpu6050驱动时用iic 的调试感悟 。  但是 在半年后的今天, 在另一块单片机上又要用到iic 需要自己写(用另一种语言)的时候又出现问题 通信不成功的现象 ,我 用示波器看了下波形,波形是正常的,但是SDA 的 高电平脉冲在2V左右 (被6050拉低了)。而且也读取不出来信号 如左图所示。当前示波器一格为2V  ,蓝色的线为 SDA ,黄色的线为SCL,从上图看出,按照时序检查跳变沿,发现 时钟数据 都是正确的,但就是读不出数据 (如上图所示,如果画圈部分的电平拉高到正常就读取正常了)。(用的是mpu6050模块 ,iic的上拉电阻为4.7K。 把sda线跟6050断开 ,电平又能回到3.3V) 。刚开始一直以为是因为软件的原因 。 然后就一直再看协议,在改时序 。。到最后还是不能通信 。最后 感觉真没办法了,就又弄了一个mpu6050换上试了下,正常工作了。。 从而得出结论:SDA线被拉低到2V,明显是 硬件原因 。 说明之前的mpu6050 已坏。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

iic协议知识讲解

注意 :iic  协议的 时序即器件地址+应答信号 +。。。。。+停止码  , 这是iic的物理协议,即 只要用iic 都要遵循 该时序要求。

1:iic的开始和结束信号

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值