This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

INA219寄存器低8位读不到的问题

低8位读的全是0
高8位完全没问题

配置寄存器,BUS电压,差分电压,电流这些寄存器,全是低8位读不到,高8位倒是正常

应该按照时序来了啊

读第一个主机应答的话,低8位一直出来的是  0x00

读第一个主机不应答的话,低8位一直出来的是0xff

  • 低8位读的全是0
    高8位完全没问题

    配置寄存器,BUS电压,差分电压,电流这些寄存器,全是低8位读不到,高8位倒是正常

    应该按照时序来了啊

    读第一个主机应答的话,低8位一直出来的是  0x00

    读第一个主机不应答的话,高8位一直出来的是0xff

    究竟可能哪里出问题了呢?

  • 纠正:都是低8位读不出动态数据
  • 应该还是时序问题啊,写的时候,高八位之后要有应答信号,然后再写低8位呢。

    您能否把测试的时序图发上来看下呢?

  • ID,Time[s],0:I²C: Address/Data
    0,0.340342,Start
    1,0.340348,Address write: 40
    2,0.340381,Write
    3,0.340385,ACK
    4,0.340395,Data write: 00
    5,0.340432,ACK
    6,0.340442,Data write: 07
    7,0.340479,ACK
    8,0.34049,Data write: FF
    9,0.340527,ACK
    10,0.340534,Stop
    11,0.34054,Start
    12,0.340546,Address write: 40
    13,0.340579,Write
    14,0.340583,ACK
    15,0.340593,Data write: 00
    16,0.34063,ACK
    17,0.340638,Start repeat
    18,0.340644,Address read: 40
    19,0.340677,Read
    20,0.340681,ACK
    21,0.34069,Data read: 07
    22,0.340724,ACK
    23,0.340732,Data read: 00
    24,0.340766,NACK
    25,0.340773,Stop
    26,0.341787,Start
    27,0.341793,Address write: 40
    28,0.341827,Write
    29,0.34183,ACK
    30,0.34184,Data write: 05
    31,0.341878,ACK
    32,0.341888,Data write: 10
    33,0.341925,ACK
    34,0.341935,Data write: 00
    35,0.341972,ACK
    36,0.34198,Stop

    这是我逻辑分析仪的结果,我像配置寄存器(地址0)写0X07FF,然后接着把它读出来,高8位能读出07,低8位却是0XFF
    读其他寄存器(分流电压、BUS电压、功率、电流、校准)也是这样的情况,已经是严重怀疑是不是我读驱动错了。。。因为在淘宝买过两个模块都是这样,应该不是硬件问题吧
  • 更正一下:主机在高8位后应答的话,低8位是0X00
    如果主机收高8位不应答,收的低8位是0XFF
  • 引脚A0和A2都接的是GND是吗?我看您这里slave address为0X40, 也就是说7bit 从机地址为1000000, 这样的话,从机地址0X40<<1, 即为0X80 才对,所以将地址改为0X80 再看看读取的data是否准确?
  • 对的,引脚A0和A2都是接的GND
    写的是0x80, 他这个分析仪显示的是7位地址+最低位是读写方向
    所以是0x01000000

  • 7bit address + 读写位是没问题的,所以start 之后为1000000 0,即为0X80.
  • 已经解决了,感谢Kailyn Chen
    确实是时序的问题,因为我第一个高字节后的应答后,没有释放SDA(拉高),导致总线占用了,无论读啥都是0,在读字节开始先释放SDA即可