本人第一次接触CYPRESS芯片,想做一个测试电容按键容值的设备。选用了CY8CMBR3110这款芯片。
我在读取CY8CMBR3110的(寄存器地址0xdb-0xe7)sensor值的时候,会出现读十几次只有一次能读到值,每次读取间隔为2秒左右,读不到值的时候debug_sensor_id(0xdc)=0xff,其余值都为0.
当把读取数据间隔调整为400ms时,每次都能读到数据了。
硬件环境:stm32作为主机通过iic与CY8CMBR3110通讯。
请问下,这是什么原因造成的?
这是我芯片配置寄存器(0x00-0x07E)的参数
{0x7f 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x3 0x0 0x0 0x0 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x7f 0x7f 0x7f 0x0 0x0 0x0 0x0 0x0 0x0 0x3 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x80 0x5 0x0 0x0 0x2 0x0 0x2 0x0 0x0 0x5 0x0 0x32 0x14 0x14 0x1e 0x1e 0x0 0x0 0x1e 0x1e 0x0 0x0 0x0 0x1 0x1 0x1 0xf 0xf 0xf 0xf 0xf 0x0 0x0 0x0 0x0 0x0 0x0 0x1 0x1 0x1 0x8 0x0 0x37 0x6 0x0 0x0 0xa 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0xea 0x0}
谢谢!
已解决! 转到解答。
你好,
按照我的理解,这个错误的原因可能来自于你没有插入虚拟I2C读取操作。这一步操作,可以避免在写入配置数据时的NACK。
具体的理论你可以参考附件的中文文档page 69,和page70。I2C 的主机不同,但是控制逻辑是一样的,从理论上面分析这个错误的来源,完全可以参考下面的分析:
file:/C:/Users/ring/Desktop/001-91599_CY8CMBR3xxx_CapSense_sup_sup_Design_Guide_Chinese.pdf
希望我的回复能对你有帮助。
你好,
按照我的理解,这个错误的原因可能来自于你没有插入虚拟I2C读取操作。这一步操作,可以避免在写入配置数据时的NACK。
具体的理论你可以参考附件的中文文档page 69,和page70。I2C 的主机不同,但是控制逻辑是一样的,从理论上面分析这个错误的来源,完全可以参考下面的分析:
file:/C:/Users/ring/Desktop/001-91599_CY8CMBR3xxx_CapSense_sup_sup_Design_Guide_Chinese.pdf
希望我的回复能对你有帮助。
我是用stm32的iic和cy8cmbr3110通讯的,那具体我是通过发什么数据来进行虚拟iic读取操作呢?在官方的API里面相关函数吗?
谢谢!
你仔细看一下我截图中,用绿框标注出来的部分,r 37 x p delay10 r 37 x p delay 10.
你把这个翻译成C语言,写在你stm32的代码里面就可以了呢。
具体stm32的代码就就和你之前读的一样,你之前读127,现在改成读1个,delay 10 ms,在读一个数,delay10ms,这个读到的数不做任何处理。
虚拟读,简单的理解,就是你读到的这个数据,可能NACK,但是也可能不是NACK,你不处理就好了。
首先谢谢您回答我的问题。
现在我加快了读取速率,基本上不会有无效数据了。稍后我试一下您说的那个方法,看是否有效。
我现在读取数据时,发现0xdb和0xe7这两个寄存器值不相等,0xdb的值0x0-0xf,0xe7的值一直是0x80.
不知道这种状态下读到debug值,是否正确。
谢谢!
顺祝商祺
姓名:张澄
手机:180-1296-4407
您好:
链接对应的文档是:How to Monitor MBR3 CapSense Signal Through I2C
How to Monitor MBR3 CapSense Signal Through I2C – KBA225809
你看一下,如果有什么问题,你就在这个论坛里面更新。