ADC转换时间按默认1.1ms设置,4ms一个周期。一个周期内先读电压寄存器,然后读功耗寄存器。连续读1000次,中间会有一两次读取失败。通过分析仪发现,具体失败是在设置电压寄存器后,发restart无法发送。
软件中在写寄存器与读寄存器之间加2ms延时后,再循环读取无问题。
请看下是否因为不停在两个寄存器切换,导致系统反应不过来。
ADC转换时间按默认1.1ms设置,4ms一个周期。一个周期内先读电压寄存器,然后读功耗寄存器。连续读1000次,中间会有一两次读取失败。通过分析仪发现,具体失败是在设置电压寄存器后,发restart无法发送。
软件中在写寄存器与读寄存器之间加2ms延时后,再循环读取无问题。
请看下是否因为不停在两个寄存器切换,导致系统反应不过来。
如上图在最后SDA无法拉低,必须等2ms后才能拉低。
如果把转换时间1.1ms调低,仍无效。
您好,
您这里具体说的是哪个电压寄存器?您是在连续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..........,按照这样循环,就不会有问题
原始问题中您描述说4ms一个周期,您是怎样保证4ms一个周期的?
您说的对。
看下STOP和START之间的时间要求是否满足:
看您所附时序图,是想将Register Pointer设置到03寄存器,如下时序截图:
然后再restart 启动读03寄存器值吗?即restart 开启如下时序:
如果是这样的话,看您时序图,在将Register Pointer设置到03寄存器时,最后并没有STOP信号:
我们是采用上述操作格式,读写在一个命令里面,没有stop。INA226是否支持这种操作模式?
之前也用过你发的分开操作,中间加STOP,但是在1000个循环里面也会有同样错误。
至于STOP和START之间要求,看是ns级别,我们这个指令都在us级别,不会有问题
不确定INA226是否支持这种模式,但是建议您按照INA226 datasheet 中的时序来操作,以免后期出现异常。
您可以抓一个有STOP的异常波形吗?您是否有办法用示波器抓一个异常波形,我想看下SDA无法拉低时,其SCL波形是怎样的?
I2C总线上挂了几个设备?是否其他设备的原因
这是我做操纵的整体一个图。可以看到循环之间的间隔在7-8ms.
这是正确时候的波形
这是错误的波形。
都是按照你说的,写和读分开,写后加STOP。图中绿色部分是STOP。最后一个错误就是无法start。I2C总线上还有个电源芯片,应该和其没关系。
您怎样排除了和这个电源芯片没有关系的?
我是把电压芯片的输入电压给断掉了。这个电源芯片不工作。此时测试故障依然存在,跑几百次之后出错。
读出失败的数据发生的位置一样吗?比如说连续读取1000次,每次失败都发生在第700次左右读取?还是说读取失败发生的位置是随机的?
如果是每次发生的位置都差不多,可能与程序有关,建议您仔细检查程序。
如果是发生的位置是随机的,我个人感觉可能与程序关系不大。这种情况建议您在E2E英文技术论坛上咨询资深的英文论坛工程师,看他们是否有更好的排查建议。英文论坛对应子论坛链接:https://e2e.ti.com/support/amplifiers-group/amplifiers/f/amplifiers-forum
我看到您很长时间没有跟进您发布的E2E英文论坛,我认为您的问题已解决:
https://e2e.ti.com/support/amplifiers-group/amplifiers/f/amplifiers-forum/1203752/ina226-an-error-occurred-while-reading-the-registers-in-loop?tisearch=e2e-sitesearch&keymatch=INA226#