CY8CMBR3108 - sensors stop working and cannot recover with (CNTRL_CMD with 0xFF) RESET

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

cross mob
setec_869301
Level 1
Level 1
First reply posted First question asked Welcome!

Hi: I am using CY8CMBR3108 and, because the touch sensors become too sensitive after some time, I periodically send a RESET (CNTRL_CMD with 0xFF) command to it. However, for some reason (ESD?) I already had the situation that one (twice) or all (3 times) sensors of my product stopped working. The automatic RESET doesn't recover it. Only if I turn off the power and restart the unit, the sensors are back and all works.

After power-up I send the configuration that you see below in this post.

I find it very strange that, if after RESET (without power-off) I repeat the same configuration sequence (that is always performed after power-up), then no sensor is working. It is strange that the IC only accepts the configuration once after power-up!!!

The Power-up sequence is:

WriteToCs(SENSOR_EN, 0x001B, 2);
WriteToCs(FSS_EN, 0x0000, 2); 
WriteToCs(GPO_OUTPUT_STATE, 0x1B, 1); 
WriteToCs(BASE_THRESHOLD0, 200, 1);
WriteToCs(BASE_THRESHOLD1, 200, 1);
WriteToCs(FINGER_THRESHOLD2, 200, 1);
WriteToCs(FINGER_THRESHOLD4, 200, 1);
WriteToCs(DEVICE_CFG0, 0x00, 1);
WriteToCs(DEVICE_CFG2, 0x14, 1); 
WriteToCs(SENSITIVITY0, 0xCF, 1);
WriteToCs(SENSITIVITY1, 0x03, 1);
WriteToCs(REFRESH_CTRL, 1, 1);
WriteToCs(CTRL_CMD, 3, 1);
nack = 1;
Delay(C100_MS);
while (nack)
{
nack = CsdRead(CALC_CRC,buff,2);
Noop();
}
val = buff[1];
val <<= 8;
val += buff[0];
WriteToCs(CONFIG_CRC, val, 2);
WriteToCs(CTRL_CMD, 2, 1);
Delay(C100_MS);
nack = CsdRead(CTRL_CMD_STATUS, buff, 1);

Can somebody help?

0 Likes
1 Solution
Hari
Moderator
Moderator
Moderator
750 replies posted 500 replies posted 250 solutions authored

Hi @setec_869301 

 

The execution flow that you have followed is right, and there is no difference between power cycle, XRES or software reset. 

 

Can you try running this flow after a delay whenever SW_Reset is performed so that the device boots up and registers are loaded to RAM correctly?

Also, is the logic confirming if CTRL_CMD_STATUS is returning '0' after the flash write?

You need to issue a software reset, by sending FF to CTRL_CMD register once the data is saved to flash (CTRL_CMD_STATUS returning '0') before the code starts executing. Please confirm if this is being done.

 

Best regards, 
Hari

View solution in original post

0 Likes
1 Reply
Hari
Moderator
Moderator
Moderator
750 replies posted 500 replies posted 250 solutions authored

Hi @setec_869301 

 

The execution flow that you have followed is right, and there is no difference between power cycle, XRES or software reset. 

 

Can you try running this flow after a delay whenever SW_Reset is performed so that the device boots up and registers are loaded to RAM correctly?

Also, is the logic confirming if CTRL_CMD_STATUS is returning '0' after the flash write?

You need to issue a software reset, by sending FF to CTRL_CMD register once the data is saved to flash (CTRL_CMD_STATUS returning '0') before the code starts executing. Please confirm if this is being done.

 

Best regards, 
Hari

0 Likes