打印
[应用相关]

I2C读数据,最后一个字节第5位有问题

[复制链接]
1618|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
如附件图片所示,0x10 寄存器数据是0x24才正确,但现在读出来的是0x12,请教一下各位前辈是什么原因引起的呢?

现在情况如下:
1.有时候读到0x24,大多都到时是0x12错误值
2.SCL、SDA 空闲时电压是3.2V


222.png (29.91 KB )

222.png

1111.png (29.86 KB )

1111.png
沙发
kingkits| | 2017-6-29 13:08 | 只看该作者
看你的波形没有问题呀

使用特权

评论回复
板凳
chen472015439|  楼主 | 2017-6-29 13:56 | 只看该作者
kingkits 发表于 2017-6-29 13:08
看你的波形没有问题呀

DATA波形有问题的,0x24 应该是0010 0100才对,可现在波形却是0x12 (0001 0010)

3333.png (30.33 KB )

3333.png

使用特权

评论回复
地板
feelhyq| | 2017-6-29 14:06 | 只看该作者
楼主应该用的软件模拟吧,这个时序图不规范太多了,如图所示:

圈圈1:①从机的地址为0xc8,但是时钟CLK的信号不连续,圈圈3也是发送从地址0xc8加读取信号,但是很明显对应的时钟是连续的。
           ②数据发送完成后,也就是在第8个CLK完成后,应该还需要发送一个CLK,同时释放SDA总线,以此等待从机回复应答信号(拉低SDA总线),主机利用第九个时钟信号获取从机的应答信号。

圈圈2,圈圈3 都有相似的问题。

重点来了, 圈圈4:
                     第一个时钟信号,如果真的是时钟信号,应该有个小箭头才对,如果不是的话,那么数据为0010 0100,也就是0x24,但是如果该时钟真的是时钟信号的话那么数据为0001 0010,也就是0x12.

forum.png (34.08 KB )

forum.png

使用特权

评论回复
5
kingkits| | 2017-6-29 14:10 | 只看该作者
拜托,我看你那第一个时钟应该是 ack吧!(就是那个红色的bit7)

使用特权

评论回复
6
kingkits| | 2017-6-29 14:12 | 只看该作者
逻辑分析里都给你标注出来了,有数据的时钟都是带一个箭头的

使用特权

评论回复
7
feelhyq| | 2017-6-29 14:26 | 只看该作者
feelhyq 发表于 2017-6-29 14:06
楼主应该用的软件模拟吧,这个时序图不规范太多了,如图所示:

圈圈1:①从机的地址为0xc8,但是时钟CLK的 ...

建议用硬件实现I2C,如果觉得复杂,建议软件实现I2C后,查看下模型是不是标准的

使用特权

评论回复
8
chen472015439|  楼主 | 2017-6-29 14:46 | 只看该作者
kingkits 发表于 2017-6-29 14:12
逻辑分析里都给你标注出来了,有数据的时钟都是带一个箭头的


经过你的分析我现在理解了,如果第一个时钟是ack,那数据确实是是0x24了,可我通过串口打印出来的值却是0x12,这又是我想不明白的地方

555.png (33.9 KB )

555.png

使用特权

评论回复
9
Jay_1989| | 2017-6-29 15:38 | 只看该作者
老哥 你是在玩multi-master吗,  SCL都能成这样..  

使用特权

评论回复
10
kingkits| | 2017-6-29 16:40 | 只看该作者
你应该看看你的软件,有没有给出来ACK

使用特权

评论回复
11
kingkits| | 2017-6-29 16:42 | 只看该作者
不论你用不用IIC接口,都可能需要你显式的给出ACK/NACK信号

使用特权

评论回复
12
mmuuss586| | 2017-6-29 17:55 | 只看该作者
最好一个字节操作完后,加些延时看看

使用特权

评论回复
13
ningling_21| | 2017-7-1 11:13 | 只看该作者
chen472015439 发表于 2017-6-29 14:46
经过你的分析我现在理解了,如果第一个时钟是ack,那数据确实是是0x24了,可我通过串口打印出来的值却是 ...

是不是里面的数据本来就是0x12 ?

使用特权

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

本版积分规则

3

主题

52

帖子

1

粉丝