AnsweredAssumed Answered

MPR121: Is my part broken?

Question asked by Janosch on May 4, 2014

Hello Community,


i have a difficult situation around my prototypes, regarding the MPR121 touch sensors. On one prototype board, i have two MPR121 sensors. When i was evaluating, the sensors worked correct and as expected. Now i have enclosed THREE of my prototypes in a fixture, and i will not get to them again without breaking it. Very shortly after that, ONE of the six sensors seems to not work properly anymore. So because the boards are in the fixture now, i cannot acces the sensor parts anymore to measure signal levels and I2C logic and so on. The only access i have is via the programmer/debugger of the microprocessor, which drives them.


So here is the situation:

On one board, there are two identically designed MPR121 devices, each connected to 8 electrodes (ELE0-7). #1 has the I2C address 0x5A, and #2 has the I2C address 0x5B. #1 doesn't seem to work properly anymore, and i fear that the device itself may be broken. However, i can actually communicate with the device over I2C very normally! That is, i reset it via $0x80=0x63, and succesfully verify that $0x5C=0x10 and $0x5D=0x24. I then configure the both sensors as usual (my current routine is very similar to the one that was suggested to me in this thread: MPR121 Auto-Calibration time), and verify the configuration by reading from the registers.


So the sensors do seem to work, communication-wise.


However when i read the sensor data (0x04~0x1D), i get only zeros. I also get only zeros when i read the baseline values (0x1E~0x2A), i also get only zeros. I have not ever seen the OVCF flag set in the status register 0x01. Similar malfunction was also reported in Re: Writing to MPR121 register 0x5E appears to reset the device, and it was pointed out to check that flag. However, it always reads as 0 in my sensors.


I am attaching the schematic of the MPR121 part of my design. Both parts have different I2C addresses through connection to GND and VCC. For the 75k resistor on REXT i'm using two 150k's in parallel. VREG is only connected to the 100nF capacitor to VSS, as recommended for >2.75V operation.


I am also attaching the register readout, which i do with following lines:


    uint8_t reg, buf1, buf2;     printf("REG      VAL1     VAL2       DIFF\n");     for (reg = 0; reg <= 0x80; reg++) {         i2c_readRegister(0x5A, reg, &buf1, 1);         i2c_readRegister(0x5B, reg, &buf2, 1);         printf("0x%02X     0x%02X     0x%02X       %s\n", reg, buf1, buf2, buf1 != buf2 ? "<--" : "");     }  

(the left column shows the register address, then the value for the broken part, then the value for the properly operating part. The last column shows the differences).


Is it possible to judge, if my part may be broken, regarding the information that i have provided? May the internal regulator be broken?


I'd be really glad if you guys could help me on this one!

Thanks a lot,



Original Attachment has been moved to: