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.

INA226: 循环读取寄存器时出现错误

Part Number: INA226

ADC转换时间按默认1.1ms设置,4ms一个周期。一个周期内先读电压寄存器,然后读功耗寄存器。连续读1000次,中间会有一两次读取失败。通过分析仪发现,具体失败是在设置电压寄存器后,发restart无法发送。

软件中在写寄存器与读寄存器之间加2ms延时后,再循环读取无问题。

请看下是否因为不停在两个寄存器切换,导致系统反应不过来。

  • 如上图在最后SDA无法拉低,必须等2ms后才能拉低。

    如果把转换时间1.1ms调低,仍无效。

  • 您好,

    通过分析仪发现,具体失败是在设置电压寄存器后,发restart无法发送。

    您这里具体说的是哪个电压寄存器?您是在连续1000次读取转换结果的哪个节点设置的寄存器?寄存器具体设置的是什么?

  • 就是在bus voltage register(0x02)和power register(03)循环的获取,除了calibration register(05)按照电路的实际配置,其它寄存器都是默认配置。 set(02) read set(03) read->set(02) read set(03) read->set(02) read set(03) read..........,这样不断循环,发现会fail在某次的set(02)和read之间,通过逻辑分析仪查看fail在紧接set(02)之后的restart上,SDA数据线不能从高到低切换。
    如果是set(02) wait(2ms) read set(03) read->set(02) wait(2ms) read set(03) read->set(02) wait(2ms) read set(03) read..........,按照这样循环,就不会有问题
  • ADC转换时间按默认1.1ms设置,4ms一个周期。

    原始问题中您描述说4ms一个周期,您是怎样保证4ms一个周期的?

  • 我是循环执行读写,没有做其他操作。通过逻辑分析仪看周期是4ms。

    1、如果大于4ms,对INA226应该没影响吧

    2、如果小于4ms,甚至小于2.2ms,那也可以读到寄存器上一个周期的值。

  • 1、如果大于4ms,对INA226应该没影响吧

    2、如果小于4ms,甚至小于2.2ms,那也可以读到寄存器上一个周期的值。

    您说的对。

    看下STOP和START之间的时间要求是否满足:

  • 看您所附时序图,是想将Register Pointer设置到03寄存器,如下时序截图:

    然后再restart 启动读03寄存器值吗?即restart 开启如下时序:

    如果是这样的话,看您时序图,在将Register Pointer设置到03寄存器时,最后并没有STOP信号:

  • 我们是采用上述操作格式,读写在一个命令里面,没有stop。INA226是否支持这种操作模式?

    之前也用过你发的分开操作,中间加STOP,但是在1000个循环里面也会有同样错误。

    至于STOP和START之间要求,看是ns级别,我们这个指令都在us级别,不会有问题

  • INA226是否支持这种操作模式?

    不确定INA226是否支持这种模式,但是建议您按照INA226 datasheet 中的时序来操作,以免后期出现异常。

    您可以抓一个有STOP的异常波形吗?您是否有办法用示波器抓一个异常波形,我想看下SDA无法拉低时,其SCL波形是怎样的?

    I2C总线上挂了几个设备?是否其他设备的原因

  •  这是我做操纵的整体一个图。可以看到循环之间的间隔在7-8ms.

     这是正确时候的波形

     这是错误的波形。

    都是按照你说的,写和读分开,写后加STOP。图中绿色部分是STOP。最后一个错误就是无法start。I2C总线上还有个电源芯片,应该和其没关系。

  • I2C总线上还有个电源芯片,应该和其没关系。

    您怎样排除了和这个电源芯片没有关系的?

  • 我是把电压芯片的输入电压给断掉了。这个电源芯片不工作。此时测试故障依然存在,跑几百次之后出错。

  • 连续读1000次,中间会有一两次读取失败。

    读出失败的数据发生的位置一样吗?比如说连续读取1000次,每次失败都发生在第700次左右读取?还是说读取失败发生的位置是随机的?

    如果是每次发生的位置都差不多,可能与程序有关,建议您仔细检查程序。

    如果是发生的位置是随机的,我个人感觉可能与程序关系不大。这种情况建议您在E2E英文技术论坛上咨询资深的英文论坛工程师,看他们是否有更好的排查建议。英文论坛对应子论坛链接:https://e2e.ti.com/support/amplifiers-group/amplifiers/f/amplifiers-forum

x 出现错误。请重试或与管理员联系。