标签:style blog http color os io ar 数据 2014
// 秉着 授人之鱼 不如授人之渔的态度。 本人决定 在以后的日子里,着重讲思想。问题的源头, 以后写程序一定要小心。。
以上是我在半年前写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:IIC的应答信号:无论主从,每接收1个字节都要给出1个应答信号
3:IIc的读写:只有在SCL置低时,方可改变SDA的值,在SCL高电平期间,SDA需保持不变
B.连续写入字节,当写入到该页最后一个地址单元时,再从该页的起始单元写入,如此反复。
C.AT24C02当前指针地址读一个字节
D.指定iic的内存地址读取一个字节
E.在当前iic的地址指针位置开始,顺序读取多个字节,读取到该页最后一个字节时,再从该页的第一个字节循环读取
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------以下内容为转载。讲的很详细。波形很完整
1.首先是起始操作(图中红色线条处)
2.接下来是设备地址,共9个时钟,前面7个是地址,然后是读写标志,最后是MPU6050/MPU9150应答标志。我们看到,前面7个数是:1101000,换算成16进制,就是0x68。第8个是0,表明是写传输(前八个数0xd0 ),第9个是0,是由MPU6050/MPU9150芯片驱动的,表明MPU6050/MPU9150芯片应答了这个地址。如果MPU6050/MPU9150芯片没有应答这个0x68地址信号,那么第9个数会显示1。
3.接下来是STM32发送要读的MPU6050/MPU9150芯片寄存器地址,共9个时钟。前面8个依次是:01110101,换算成16进制,就是0x75(该寄存器为 地址识别码who am i ,读出来的数据 为 0x68)。第9个是0,是由MPU6050/MPU9150芯片驱动的,表明MPU6050/MPU9150芯片应答了这个操作。
4.前面STM32发送完MPU6050/MPU9150芯片设备地址0x68,,寄存器地址0x75后,要告诉MPU6050/MPU9150芯片,接下来STM32要读数据了。所以STM32重新发送了一个起始操作,表示在上图中的一个时钟。
5.接下来,STM32重复发送MPU6050/MPU9150芯片地址,在图中,我们看到9个数据位,前面7个依次是1101000,即0x68,第8个数据位变成了1,表明接下来的是读操作。第9个是0,表明MPU6050/MPU9150芯片应答了这个地址。
6.接下来总线上出现了9个时钟,前面8个时钟对应的数据01101000,换算成16进制,就是0x68。这个刚好是MPU6050/MPU9150芯片的ID.即MPU6050/MPU9150芯片的WHOAMI寄存器。第9个时钟对应的数据是1,表明STM32不再需要读数据,即I2C总线中的NACK.(注意,该位一定要加上)
7.由于数据读取结束,STM32发送结束标志。至此,通讯完成
标签:style blog http color os io ar 数据 2014
原文地址:http://blog.csdn.net/zbb564833642/article/details/38845207