打印

软件i2c读多字节只能读出第一个字节

[复制链接]
404|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1. 我用的是cypress芯片,用IO模拟软件i2c,读取单个字节没有问题,读取多个字节时,只有第一个字节是对的,后面的字节都是0
2. 波形图中左边是电脑端读i2c的波形,是没有问题的,排除硬件问题
3. 波形图中右边是单片机io模拟读i2c的波形,第一个字节对,第二个字节是0,看波形图,ACK(0)之前SDA被拉高(红色箭头处),可能slave误以为发了ACK(1)所以结束了
4. 请问那个SDA被拉高是什么原因?

波形对比.jpg (365.81 KB )

波形对比.jpg

部分代码.jpg (165.89 KB )

部分代码.jpg

SDA配置.png (25.86 KB )

SDA配置.png

使用特权

评论回复
沙发
cr315| | 2023-12-26 16:01 | 只看该作者
SDA被拉高可能是起始条件设置不正确

使用特权

评论回复
板凳
两只袜子| | 2023-12-26 16:02 | 只看该作者
SDA被拉高可能是时序匹配问题

使用特权

评论回复
地板
jcky001| | 2023-12-26 16:02 | 只看该作者
在I2C通信中,每个字节传输完毕后需要发送停止条件(P),即SDA线由低电平变为高电平,SCL线保持高电平。如果字节结束条件设置不正确或者没有正确发送,可能导致数据传输错误。请确保字节结束条件被正确发送。

使用特权

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

本版积分规则

12

主题

41

帖子

0

粉丝