找回密码
 立即注册
查看: 1341|回复: 4

关于mpu6050的应答信号,整不明白了

[复制链接]

该用户从未签到

4

主题

7

回帖

146

积分

注册会员

积分
146
QQ
发表于 2023-3-2 01:02:51 | 显示全部楼层 |阅读模式

其功能是51向mpu写入一个字节,然后有mpu在串行数据线(SDA)给51一个应答信号;
根据文档的说明:如下:


我对应答信号的理解是:
51向mpu发送完8位数据,如果mpu应答,会在第9个时钟时,拉低数据线SDA.所以我的应答代码如下:
void Write_ACK()
{
     SCL=1;
     SDA=1;
     while(SDA);   //用while判断SDA有没有被拉低,
}



void Write_ACK()
{
     SCL=1;
     while(SCL);   //如果从设备忙,他会使SCL保持在低电平.用while判断mpu是不是在忙,
}


事实情况是这两种都不理想;第一个进入死循环,第二个没收到过反馈;



这是在网上找的51与mpu6050通信代码的一段.
他是用PSW寄存器的进位标志位CY进行数据发出的,

他接收应答用的还是CY,返回CY后,并没有对CY做任何判断,

他是怎么判断有没有收到mpu的应答信号的?
还是CY有什么特性?(我在网上没找到相关知识);

1.png
2.png
3.png
回复 送花

使用道具 举报

该用户从未签到

45

主题

2847

回帖

6402

积分

超级版主

积分
6402
发表于 2023-3-2 10:07:03 | 显示全部楼层
这是标准的I2C通信,接收方都会给一个应答或非应答。
I2C通信,时钟总是由主机产生,不管是主机、从机,应答总是由接收方发出。

该用户从未签到

4

主题

7

回帖

146

积分

注册会员

积分
146
QQ
 楼主| 发表于 2023-3-2 15:16:06 | 显示全部楼层
梁工 发表于 2023-3-2 10:07
这是标准的I2C通信,接收方都会给一个应答或非应答。
I2C通信,时钟总是由主机产生,不管是主机、从机,应 ...

发射方发完数据,不是要检测到接收方发出的应答信号,再发送下一字节数据吗,

现在我是没看懂他是怎么判断应答信号的,他把CY=SDA,返回CY,又没对CY做判断,他这等于做了个空SCL,接收方有没有完成接收,发射方根本就不知道啊.

点评

没有判断而已,但是接收方一定会应答或非应答。 严格的程序是要判断的,这样才知道接收方是否收到。  详情 回复 发表于 2023-3-2 18:47

该用户从未签到

45

主题

2847

回帖

6402

积分

超级版主

积分
6402
发表于 2023-3-2 18:47:30 | 显示全部楼层
v115488 发表于 2023-3-2 15:16
发射方发完数据,不是要检测到接收方发出的应答信号,再发送下一字节数据吗,

现在我是没看懂他是怎么判断 ...

没有判断而已,但是接收方一定会应答或非应答。
严格的程序是要判断的,这样才知道接收方是否收到。
  • TA的每日心情
    慵懒
    3 天前
  • 签到天数: 79 天

    [LV.6]常住居民II

    3

    主题

    28

    回帖

    265

    积分

    中级会员

    积分
    265
    发表于 2023-3-18 21:07:15 | 显示全部楼层
    我看到的很多程序也没有这个应答信号的判断,一度怀疑这个规则是否有用,网上大多数mpu6050程序是读取地址寄存器,判断得到应答值是否正确,从而判断整个I2C的时序和通讯是不是正常。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-4-20 12:28 , Processed in 0.060275 second(s), 49 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表