关于CY8CMBR3110读值问题

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
user_4733751
Level 1
Level 1
First question asked First reply posted

本人第一次接触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}

谢谢!

0 点赞
1 解答
LinglingG_46
Moderator
Moderator
Moderator
500 solutions authored 1000 replies posted 10 questions asked

你好,

按照我的理解,这个错误的原因可能来自于你没有插入虚拟I2C读取操作。这一步操作,可以避免在写入配置数据时的NACK。

具体的理论你可以参考附件的中文文档page 69,和page70。I2C 的主机不同,但是控制逻辑是一样的,从理论上面分析这个错误的来源,完全可以参考下面的分析:

file:/C:/Users/ring/Desktop/001-91599_CY8CMBR3xxx_CapSense_sup_sup_Design_Guide_Chinese.pdf

pastedImage_1.png

希望我的回复能对你有帮助。

在原帖中查看解决方案

0 点赞
5 回复数
LinglingG_46
Moderator
Moderator
Moderator
500 solutions authored 1000 replies posted 10 questions asked

你好,

按照我的理解,这个错误的原因可能来自于你没有插入虚拟I2C读取操作。这一步操作,可以避免在写入配置数据时的NACK。

具体的理论你可以参考附件的中文文档page 69,和page70。I2C 的主机不同,但是控制逻辑是一样的,从理论上面分析这个错误的来源,完全可以参考下面的分析:

file:/C:/Users/ring/Desktop/001-91599_CY8CMBR3xxx_CapSense_sup_sup_Design_Guide_Chinese.pdf

pastedImage_1.png

希望我的回复能对你有帮助。

0 点赞

我是用stm32的iic和cy8cmbr3110通讯的,那具体我是通过发什么数据来进行虚拟iic读取操作呢?在官方的API里面相关函数吗?

谢谢!

0 点赞
LinglingG_46
Moderator
Moderator
Moderator
500 solutions authored 1000 replies posted 10 questions asked

你仔细看一下我截图中,用绿框标注出来的部分,r 37 x p delay10 r 37 x p delay 10.

你把这个翻译成C语言,写在你stm32的代码里面就可以了呢。

具体stm32的代码就就和你之前读的一样,你之前读127,现在改成读1个,delay 10 ms,在读一个数,delay10ms,这个读到的数不做任何处理。

虚拟读,简单的理解,就是你读到的这个数据,可能NACK,但是也可能不是NACK,你不处理就好了。

0 点赞

首先谢谢您回答我的问题。

现在我加快了读取速率,基本上不会有无效数据了。稍后我试一下您说的那个方法,看是否有效。

我现在读取数据时,发现0xdb和0xe7这两个寄存器值不相等,0xdb的值0x0-0xf,0xe7的值一直是0x80.

不知道这种状态下读到debug值,是否正确。

谢谢!

顺祝商祺

姓名:张澄

手机:180-1296-4407

 

0 点赞
LinglingG_46
Moderator
Moderator
Moderator
500 solutions authored 1000 replies posted 10 questions asked

您好:

链接对应的文档是:How to Monitor MBR3 CapSense Signal Through I2C

How to Monitor MBR3 CapSense Signal Through I2C – KBA225809

你看一下,如果有什么问题,你就在这个论坛里面更新。

0 点赞