Skip to content

This code example demonstrates how to create a low-power CapSense design using PSoC 6 MCU. This example features a 5-segment CapSense slider and a Ganged Sensor, and displays the detected touch position over the serial terminal.

License

Infineon/mtb-example-psoc6-low-power-capsense-freertos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PSoC™ 6 MCU: Low-power CAPSENSE™ design (FreeRTOS)

This code example demonstrates how to create a low-power CAPSENSE™ design using PSoC™ 6 MCU. This example features a 5-segment CAPSENSE™ slider and a ganged sensor, and displays the detected touch position over the serial terminal. This example uses the CAPSENSE™ middleware library.

View this README on GitHub.

Provide feedback on this code example.

Requirements

Supported toolchains (make variable 'TOOLCHAIN')

  • GNU Arm® Embedded Compiler v11.3.1 (GCC_ARM) – Default value of TOOLCHAIN
  • Arm® Compiler v6.16 (ARM)
  • IAR C/C++ Compiler v9.30.1 (IAR)

Supported kits (make variable 'TARGET')

Hardware setup

This example uses the board's default configuration. See the kit user guide to ensure that the board is configured correctly.

Note: The PSoC™ 6 Bluetooth® LE Pioneer Kit (CY8CKIT-062-BLE) and the PSoC™ 6 Wi-Fi Bluetooth® Pioneer Kit (CY8CKIT-062-WIFI-BT) ship with KitProg2 installed. ModusToolbox™ requires KitProg3. Before using this code example, make sure that the board is upgraded to KitProg3. The tool and instructions are available in the Firmware Loader GitHub repository. If you do not upgrade, you will see an error like "unable to find CMSIS-DAP device" or "KitProg firmware is out of date".

Software setup

See the ModusToolbox™ tools package installation guide for information about installing and configuring the tools package. Install a terminal emulator if you don't have one. Instructions in this document use Tera Term.

This example requires no additional software or tools.

Using the code example

Create the project

The ModusToolbox™ tools package provides the Project Creator as both a GUI tool and a command line tool.

Use Project Creator GUI
  1. Open the Project Creator GUI tool.

    There are several ways to do this, including launching it from the dashboard or from inside the Eclipse IDE. For more details, see the Project Creator user guide (locally available at {ModusToolbox™ install directory}/tools_{version}/project-creator/docs/project-creator.pdf).

  2. On the Choose Board Support Package (BSP) page, select a kit supported by this code example. See Supported kits.

    Note: To use this code example for a kit not listed here, you may need to update the source files. If the kit does not have the required resources, the application may not work.

  3. On the Select Application page:

    a. Select the Applications(s) Root Path and the Target IDE.

    Note: Depending on how you open the Project Creator tool, these fields may be pre-selected for you.

    b. Select this code example from the list by enabling its check box.

    Note: You can narrow the list of displayed examples by typing in the filter box.

    c. (Optional) Change the suggested New Application Name and New BSP Name.

    d. Click Create to complete the application creation process.

Use Project Creator CLI

The 'project-creator-cli' tool can be used to create applications from a CLI terminal or from within batch files or shell scripts. This tool is available in the {ModusToolbox™ install directory}/tools_{version}/project-creator/ directory.

Use a CLI terminal to invoke the 'project-creator-cli' tool. On Windows, use the command-line 'modus-shell' program provided in the ModusToolbox™ installation instead of a standard Windows command-line application. This shell provides access to all ModusToolbox™ tools. You can access it by typing "modus-shell" in the search box in the Windows menu. In Linux and macOS, you can use any terminal application.

The following example clones the "mtb-example-psoc6-low-power-capsense-freertos" application with the desired name "CapsenseFreetos" configured for the CY8CPROTO-062S2-43439 BSP into the specified working directory, C:/mtb_projects:

project-creator-cli --board-id CY8CPROTO-062S2-43439 --app-id mtb-example-psoc6-low-power-capsense-freertos --user-app-name CapsenseFreetos --target-dir "C:/mtb_projects"

The 'project-creator-cli' tool has the following arguments:

Argument Description Required/optional
--board-id Defined in the field of the BSP manifest Required
--app-id Defined in the field of the CE manifest Required
--target-dir Specify the directory in which the application is to be created if you prefer not to use the default current working directory Optional
--user-app-name Specify the name of the application if you prefer to have a name other than the example's default name Optional

Note: The project-creator-cli tool uses the git clone and make getlibs commands to fetch the repository and import the required libraries. For details, see the "Project creator tools" section of the ModusToolbox™ tools package user guide (locally available at {ModusToolbox™ install directory}/docs_{version}/mtb_user_guide.pdf).

Open the project

After the project has been created, you can open it in your preferred development environment.

Eclipse IDE

If you opened the Project Creator tool from the included Eclipse IDE, the project will open in Eclipse automatically.

For more details, see the Eclipse IDE for ModusToolbox™ user guide (locally available at {ModusToolbox™ install directory}/docs_{version}/mt_ide_user_guide.pdf).

Visual Studio (VS) Code

Launch VS Code manually, and then open the generated {project-name}.code-workspace file located in the project directory.

For more details, see the Visual Studio Code for ModusToolbox™ user guide (locally available at {ModusToolbox™ install directory}/docs_{version}/mt_vscode_user_guide.pdf).

Keil µVision

Double-click the generated {project-name}.cprj file to launch the Keil µVision IDE.

For more details, see the Keil µVision for ModusToolbox™ user guide (locally available at {ModusToolbox™ install directory}/docs_{version}/mt_uvision_user_guide.pdf).

IAR Embedded Workbench

Open IAR Embedded Workbench manually, and create a new project. Then select the generated {project-name}.ipcf file located in the project directory.

For more details, see the IAR Embedded Workbench for ModusToolbox™ user guide (locally available at {ModusToolbox™ install directory}/docs_{version}/mt_iar_user_guide.pdf).

Command line

If you prefer to use the CLI, open the appropriate terminal, and navigate to the project directory. On Windows, use the command-line 'modus-shell' program; on Linux and macOS, you can use any terminal application. From there, you can run various make commands.

For more details, see the ModusToolbox™ tools package user guide (locally available at {ModusToolbox™ install directory}/docs_{version}/mtb_user_guide.pdf).

Operation

If using a PSoC™ 64 "Secure" MCU kit (like CY8CKIT-064B0S2-4343W), the PSoC™ 64 device must be provisioned with keys and policies before being programmed. Follow the instructions in the "Secure Boot" SDK user guide to provision the device. If the kit is already provisioned, copy-paste the keys and policy folder to the application folder.

  1. Connect the board to your PC using the provided USB cable through the KitProg3 USB connector.

  2. Open a terminal program and select the KitProg3 COM port. Set the serial port parameters to 8N1 and 115200 baud.

  3. Program the board using one of the following:

    Using Eclipse IDE
    1. Select the application project in the Project Explorer.

    2. In the Quick Panel, scroll down, and click <Application Name> Program (KitProg3_MiniProg4).

    In other IDEs

    Follow the instructions in your preferred IDE.

    Using CLI

    From the terminal, execute the make program command to build and program the application using the default toolchain to the default target. The default toolchain is specified in the application's Makefile but you can override this value manually:

    make program TOOLCHAIN=<toolchain>
    

    Example:

    make program TOOLCHAIN=GCC_ARM
    
  4. After programming, the application starts automatically. Confirm that "<CE Title>" is displayed on the UART terminal.

    Figure 1. Terminal output on program startup

  5. Slide your finger along the slider to view the touch position detected on the serial terminal as shown below:

    Figure 2. Terminal output on touching the slider

  6. The example switches to slow scan if touch is not detected for MAX_CAPSENSE_FAST_SCAN_COUNT fast scans. The example indicates the transition to slow scan on the serial terminal as shown below:

    Figure 3. Terminal output when shifting to slow scan

  7. Touch the slider again to shift to fast scan. The example indicates the transition to fast scan on the serial terminal as shown below:

    Figure 4. Terminal output when shifting to fast scan

  8. Measure the current as instructed in the Making current measurements for PSoC™ 6 MCU device section.

    Note: Power cycle the kit after programming to ensure that the kit enters into deep sleep mode.

Debugging

You can debug the example to step through the code.

In Eclipse IDE

Use the <Application Name> Debug (KitProg3_MiniProg4) configuration in the Quick Panel. For details, see the "Program and debug" section in the Eclipse IDE for ModusToolbox™ user guide.

Note: (Only while debugging) On the CM4 CPU, some code in main() may execute before the debugger halts at the beginning of main(). This means that some code executes twice – once before the debugger stops execution, and again after the debugger resets the program counter to the beginning of main(). See KBA231071 to learn about this and for the workaround.

In other IDEs

Follow the instructions in your preferred IDE.

Design and implementation

The example performs CAPSENSE™ scans at two different rates. It scans at CAPSENSE_FAST_SCAN_INTERVAL_MS intervals (fast scan) when there is a touch detected on the slider, and at CAPSENSE_SLOW_SCAN_INTERVAL_MS interval (slow scan) when there is no touch detected for MAX_CAPSENSE_FAST_SCAN_COUNT fast scans. CAPSENSE_FAST_SCAN_INTERVAL_MS, CAPSENSE_SLOW_SCAN_INTERVAL_MS, and MAX_CAPSENSE_FAST_SCAN_COUNT can be configured in source/capsense.c.

The example uses two CAPSENSE™ widgets; a linear slider, which is set up and scanned during the fast scan, and a GangedSensor (button widget), which is set up and scanned during the slow scan. The linear slider widget has five sensors, whereas the GangedSensor (combination of all sensors and scan them as a single sensor) widget has only one sensor which corresponds to a ganged connection of the five sensors used in the linear slider widget.

The main function initializes the UART and creates capsense_task before starting the FreeRTOS scheduler. The example disables support for CAPSENSE™ tuner by default. You can enable the tuner by defining the CAPSENSE_TUNER_ENABLE variable in the Makefile under DEFINES.

The capsense_task is responsible for initializing the CAPSENSE™ hardware block, tuner communication if enabled, and scanning and processing the touch information. It also creates and starts a FreeRTOS timer instance which is used to signal the start of a new scan at the end of every timer period. The task implements an FSM to scan, process touch, and schedule sleep/deepsleep.

Figure 5. FSM state diagram

The FSM comprises the following states:

  1. INITIATE_SCAN: In this state, the example checks if the CAPSENSE™ HW block is busy. If not, the example initiates a CAPSENSE™ scan and changes the state to WAIT_IN_SLEEP. If tuner is enabled, Cy_CapSense_ScanAllWidgets is called to scan the widgets. It is not called if tuner communication is disabled because it sets up and scans both the widgets used in this example which results in longer scan times. Instead, Cy_CapSense_Scan is called to scan the widget. The widget that is scanned is the one that was last set up using Cy_CapSense_SetupWidget.

  2. WAIT_IN_SLEEP: In this state, the example locks the deep sleep state and waits for task notification from capsense_callback, which signals that the CAPSENSE™ scan has completed. The task notification updates the state variable to PROCESS_TOUCH.

  3. PROCESS_TOUCH: In this state, the device processes the scan data. The widget that is processed depends on the type of scan performed i.e., fast scan or slow scan.

    In fast scan, if a new touch is detected, the value of capsense_fast_scan_count is reset to RESET_CAPSENSE_FAST_SCAN_COUNT, and the slider position is displayed on the serial terminal. If not, capsense_fast_scan_count is incremented until MAX_CAPSENSE_FAST_SCAN_COUNT after which the timer period is changed to CAPSENSE_SLOW_SCAN_INTERVAL_MS and the GangedSensor widget is set up for the next scan.

    In slow scan, if a touch is detected for the GangedSensor widget, the example switches to fast scan mode by setting up the linear slider widget, resetting the value of capsense_fast_scan_count to RESET_CAPSENSE_FAST_SCAN_COUNT, and changing the timer period to CAPSENSE_FAST_SCAN_INTERVAL_MS.

    After processing the touch data, the state variable is changed to WAIT_IN_DEEP_SLEEP.

  4. WAIT_IN_DEEP_SLEEP: In this state, the example unlocks the deep sleep state and waits for task notification from scan_timer_callback which signals that the timer period has elapsed and a new scan must be issued. The task notification updates the state variable to INITIATE_SCAN.

Low-power design considerations

The common techniques used for the low-power operation of PSoC™ 6 MCU are:

  1. Reducing the operating frequency of the CPU

  2. Selecting system ULP mode over system LP

  3. Selecting a buck regulator over LDO

  4. Retaining as less RAM as possible by disabling SRAM controllers and unused pages within a SRAM controller. Note that disabling portion of SRAM requires update to linker script capturing the used length of SRAM.

In addition to these, the following firmware changes are required to achieve a low-power CAPSENSE™ design:

  1. Select manual tuning against SmartSense auto-tuning - start from a lower resolution and higher modulator clock for the fastest scan possible until you achieve the desired performance. See AN85951 - PSoC™ 4 and PSoC™ 6 MCU CAPSENSE™ design guide for details on manual tuning.

  2. Reduce the scan resolution to reduce the scan time.

  3. Perform scans at a lower frequency when no touch has been detected. This enables the MCU to stay in deepsleep longer when no touch is detected. Increase the frequency when touch is detected to improve performance but at the cost of increase in current consumption.

  4. Use a widget in slow scan where the sensors of the widget used in fast scan are ganged together to constitute a single sensor for shorter scan times. Note that doing so increases the parasitic capacitance of the sensor.

Some of these configurations can be made using the device configurator and CAPSENSE™ configurator which are packaged with ModusToolbox™ software. See the Creating a custom device configuration for low-power operation section.

Resources and settings

Table 1. Application resources

Resource Alias/object Purpose
UART (HAL) cy_retarget_io_uart_obj UART HAL object used by retarget-io for debug UART port
I2C (HAL) sEzI2C Slave EZI2C used for CAPSENSE™ tuner communication. This object is not enabled by default.
CAPSENSE™ (Middleware) CSD0 CAPSENSE™ hardware used for scanning the position of touch on the linear slider.

Creating a custom device configuration for low-power operation

In ModusToolbox™ software v3.0, the BSPs will be placed locally in the project directory itself. This means that the Application owns the BSP and it is done so that the user can easily customize the BSP. To allow customization, the BSPs are delinked from the git repository. Tools delete the .git folder after creating the BSP. The libs/assets inside mtb_shared folder are not meant to be modified by user and they still carry the link to the git repo.

The custom configuration disables the phase-locked loop (PLL), selects system ULP power mode, selects Minimum Current Buck as the regulator, and provides a CAPSENSE™ configuration with a linear slider and a GangedSensor widget.

In this code example, we will use the Device Configurator (v4.0) to create a custom device configuration for low-power operation. The device configurator is bundled with the ModusToolbox™ software installation and can be found at <ModusToolbox_installed_location>/tools_*.*/device-configurator.

The example ships with the device configuration in which the CM4 CPU is clocked by FLL at 48 MHz, CLK_PERI at 24 MHz, CAPSENSE™ Mod clock at 24 MHz, and PSoC™ 6 MCU in ULP power mode.

Perform the following steps using the ModusToolbox™ tools like Device Configurator, CAPSENSE™ tuner and CAPSENSE™ Configurator to create a custom configuration for a new kit. The screenshots provided with the instructions use CY8CPROTO-062-4343W as an example.

Launch the Device Configurator tool (v4.0) using the Quick Panel link in the IDE. This opens the design.modus file from the bsps/TARGET_APP_<kit>/config folder.

  1. Under the Power resource, change the Power mode to ULP, and change the Core Regulator under General to Minimum Current Buck as shown below:

    Figure 6. Change power mode settings

  2. Switch to the System tab and expand the System Clocks resource. Disable all instances of the PLL by unchecking the box in the FLL+PLL section as shown below:

    Figure 7. Disable PLL

    PLL is disabled because it consumes higher current even though the noise performance is better than FLL.

    2.1. If you are using the FLL to source the clock to CPU:

    2.1.1. Enable the FLL in the FLL+PLL section if disabled. The maximum operating frequency is 50 MHz in ULP mode; the FLL supports a range of 24-100 MHz. Therefore, provide the value of frequency within 24-50 MHz. This example uses a frequency of 48 MHz as shown below:

    Figure 8. Enable FLL

    2.1.2. The CM4 CPU is clocked by CLK_FAST, which is derived from CLK_HF0. Ensure that CLK_HF0 is allotted CLK_PATH0 to connect CLK_HF0 to FLL as shown below:

    Figure 9. Change clock path

    2.1.3. CLK_PERI in ULP mode cannot exceed 25 MHz; therefore, ensure that CLK_PERI is not greater than 25 MHz by changing the divider appropriately as shown below. Optionally, if the FLL frequency is 24 MHz, you can change the divider for CLK_PERI to 1.

    Figure 10. Change divider for CLK_PERI

    2.2. If you are using the IMO to source the clock to CPU:

    2.2.1. You can also use the IMO to clock the CPU. Disable the FLL in the FLL+PLL section, if enabled as shown below:

    Figure 11. Disable FLL

    2.2.2. In the High Frequency section under System Clocks, select CLK_PERI and decrease the divider to '1' as shown below:

    Figure 12. Change divider for CLK_PERI

    Because the source clock is IMO, which is at 8 MHZ, CLK_PERI can also be configured to run at 8 MHZ. This helps in a better performance of the peripherals than when the divider is set as '2'.

  3. Save the file, switch to the Peripherals tab, and select CSD (CAPSENSE™) under System. Select Launch CAPSENSE™ configurator in the panel on the right as shown below:

    Figure 13. Launch CAPSENSE™ configurator

  4. In the Basic tab of CAPSENSE™ configurator, create a new self-capacitance button widget called "GangedSensor", delete the Button0 and Button1 widgets, and select Manual Tuning as shown below:

    Figure 14. Configure widgets

  5. Open the Advanced tab.

    5.1. If you are using FLL to source the clock to CPU:

    5.1.1. Open the CSD settings tab and set the modulator clock divider such that the modulator clock frequency is lower than 50 MHz. This example uses the modulator clock of 24 MHz for a FLL frequency of 48 MHz as shown below:

    Figure 15. Configure modulator clock

    5.1.2. Open the Widget Details tab, select LinearSlider0, and change the Widget hardware parameters and Widget threshold parameters as shown below:

    Figure 16. Configure linear slider widget parameters

    5.1.3. Select GangedSensor and change the Widget hardware parameters and Widget threshold parameters as shown below:

    Figure 17. Configure GangedSensor widget parameters

    5.2 If you are using IMO to source the clock to CPU:

    5.2.1. Open the CSD settings tab and set the modulator clock divider to 1 as shown below. Increasing the modulator clock divider will result in reduction in performance.

    Figure 18. Configure modulator clock

    5.2.2. Open the Widget Details tab, select LinearSlider0, and change the Widget hardware parameters and Widget threshold parameters as shown below:

    Figure 19. Configure linear slider widget parameters

    5.2.3. Select GangedSensor and change the Widget hardware parameters and Widget threshold parameters as shown below:

    Figure 20. Configure GangedSensor widget parameters

  6. Select GangedSensor_Sns0 under Widget Details of the Advanced tab and do the following:

    6.1. In the Sensor connections option on the panel on the right, unselect dedicated pin.

    6.2. Select the remaining ones as shown below to to create a ganged connection of the sensors of the linear slider:

    Figure 21. Configure GangedSensor connection parameters

  7. Save and close CAPSENSE™ configurator. Return to device configurator and save the file to generate the source files.

Considerations for widget parameters in CAPSENSE™ configurator

  1. The example reduces the scan resolution to 9 bits as shown in Figure 18-19 and Figure 21-22. Reducing the scan resolution reduces the scan time at the cost of accuracy.

  2. Because the accuracy of capacitance measurements at the sensors is reduced, the widget threshold parameters such as finger threshold and noise threshold need to be updated according to the observed values of raw counts.

    Enable tuner communication by defining the CAPSENSE_TUNER_ENABLE variable in the Makefile under DEFINES and program the example onto the device.

    Using CAPSENSE™ tuner to monitor data:

    1. Open CAPSENSE™ tuner from the IDE Quick Panel.

      You can also run the CAPSENSE™ tuner application standalone from {ModusToolbox™ software install directory}/ModusToolbox/tools_{version}/capsense-configurator/capsense-tuner. In this case, after opening the application, select File > Open and open the design.cycapsense file for the respective kit, which is present in the bsps/TARGET_APP_<BSP-NAME>/COMPONENT_BSP_DESIGN_MODUS.

    2. Ensure that the kit is in KitProg3 mode. See Firmware-loader to learn on how to update the firmware and switch to KitProg3 mode.

    3. In the tuner application, click Tuner Communication Setup or select Tools > Tuner Communication Setup. In the window that appears, select the I2C checkbox under KitProg3 and configure as follows:

      • I2C Address: 8
      • Sub-address: 2-Bytes
      • Speed (kHz): 400
    4. Click Connect or select Communication > Connect.

    5. Click Start or select Communication > Start.

    Under the Widget View tab, you can see the corresponding widgets highlighted in blue color when you touch the button or slider. You can also view the sensor data in the Graph View tab. For example, to view the sensor data for Button 0, select Button0_Rx0 under Button0.

    Figure 24 shows the CAPSENSE™ tuner displaying the status of CAPSENSE™ touch on LinearSlider 0 and GangedSensor.

    Figure 22. CAPSENSE™ tuner showing touch data

    The CAPSENSE™ tuner can also be used for CAPSENSE™ parameter tuning, and measuring signal-to-noise ratio (SNR). See the ModusToolbox™ CAPSENSE™ tuner guide (Help > View Help) and AN85951 – PSoC™ 4 and PSoC™ 6 MCU CAPSENSE™ design guide for more details on selecting the tuning parameters.

  3. In the widget threshold parameters, the ON debounce is set as '1', which can result in false positives for touch detection. Increase the value to '3' to reduce false positives; however, this will mean a poor reaction time in slow scan mode.

  4. The sensor clock divider for GangedSensor is increased to '8' when CAPSENSE™ modulator clock frequency of 24 MHz. This is because its sensor, which comprises a ganged connection of five sensors, has a high parasitic capacitance that requires more time for making measurements. Reducing the sensor clock divider can result in failure to initialize CAPSENSE™ due to a calibration error for the sensor.

  5. The sensor clock source for the GangedSensor is chosen as direct instead of PRS* or SS* clock. This is because SS* and PRS* modulate the clock, which results in varying pulse widths. This can cause errors when making measurements of the GangedSensor sensor due to its high parasitic capacitance.

Operation at a custom power supply voltage

The application is configured to work with the default operating voltage of the kit.

Table 1. Operating voltages supported by the kits

Kit Supported operating voltages Default operating voltage
CY8CPROTO-062S2-43439 3.3 V / 1.8 V 3.3 V
CY8CPROTO-062-4343W 3.3 V / 1.8 V 3.3 V
CY8CKIT-062-BLE 3.3 V / 1.8 V 3.3 V
CY8CKIT-062-WiFi-BT 3.3 V / 1.8 V 3.3 V
CY8CKIT-062S2-43012 3.3 V / 1.8 V 3.3 V
CYW9P62S1-43438EVB-01 3.3 V only 3.3 V
CYW9P62S1-43012EVB-01 1.8 V only 1.8 V
CY8CPROTO-062S3-4343W 3.3 V / 1.8 V 3.3 V

For kits that support multiple operating voltages, follow the instructions to use the example at a custom power supply, such as 1.8 V:

  1. Launch the Device configurator tool using the Quick Panel link in the IDE. This opens the design.modus file from the bsps/TARGET_APP_<kit>/config folder.

  2. Update the Operating Conditions parameters in Power settings with the desired voltage and select File > Save.

    Figure 23. Power settings to work with 1.8 V

  3. Change the jumper/switch setting as follows:

    Table 2. Jumper/switch position for 1.8 V operation

    Kit Jumper/switch position
    CY8CPROTO-062S2-43439 J3 (1-2)
    CY8CPROTO-062-4343W J3 (1-2)
    CY8CKIT-062-BLE SW5 (1-2)
    CY8CKIT-062-WIFI-BT SW5 (1-2)
    CY8CKIT-062S2-43012 J14 (1-2)
    CY8CPROTO-062S3-4343W J3 (1-2)
    CY8CKIT-064B0S2-4343W J14 (1-2)

  1. Rebuild and program the application to evaluate the application at the new power setting.

Making current measurements for PSoC™ 6 MCU device

  • CY8CKIT_062S2_43012, CYW9P62S1_43438EVB_01, and CYW9P62S1_43012EVB_01

    Measure the current at J15 across VTARG and P6_VDD. Ensure that J25 is removed to eliminate leakage currents across potentiometer R1.

  • CY8CPROTO_062_4343W and CY8CPROTO_062S2_43439

    Measure the current by removing R65 on the right of the board close to the USB connector of the PSoC™ 6 MCU USB (device) and connecting an ammeter between VTARG (J2.32) and P6_VDD (J2.24).

    The PSoC™ 6 MCU deepsleep current is approximately 350 uA because of the pull-up resistor (R24) attached to the WL_HOST_WAKE pin P0_4, which leaks around 330 uA. This is because P0_4 is driven LOW when there is no network activity. Therefore, remove R24 (at the back of the board, below J1.9).

  • CY8CPROTO_062S3_4343W

    Measure the current by removing R59 on the back of the board, towards the right and above J2.31, and connecting an ammeter between VTARG (J2.32) and P6_VDD (J2.31).

  • CY8CKIT_062_WIFI_BT

    Measure the current by connecting an ammeter to the PWR MON jumper J8.

  • CY8CKIT_062_BLE

    Measure the current by connecting an ammeter to the PWR MON jumper J8.

Current measurements

Table 3 provides the typical current measurement values where PSoC™ 6 MCU is operated with the Arm® Cortex®-M4 CPU (CM4) running at 48 MHz in ultra-low-power (ULP) mode with Minimum Current Buck selected as the regulator. The amount of SRAM retained is provided in the table below. CLK_PERI and CAPSENSE™ modulator clock run at 48 MHz.

Table 3. Typical current values when CPU clock is sourced by FLL

TargetAmount of SRAM retainedSlow scan (Scan GangedSensor at 5 Hz. The widget has only one sensor which is a ganged connection of five sensors fom the linear slider widget.)Fast scan (Scan LinearSlider widget at 50 Hz. The widget has five sensors.)
CY8CKIT-062-BLE 64 KB (Block 0 and Block 9 of SRAM0 are retained 26 µA 255 µA
CY8CKIT-062-WIFI-BT 64 KB (Block 0 and Block 9 of SRAM0 are retained 26 µA 300 µA
CY8CKIT-062S2-43012 288 KB (Block 0 of SRAM0 and 256 KB of SRAM2 are retained) 26 µA 315 µA
CY8CPROTO-062S2-43439 288 KB (Block 0 of SRAM0 and 256 KB of SRAM2 are retained) 12 µA 270 µA
CY8CPROTO-062-4343W 288 KB (Block 0 of SRAM0 and 256 KB of SRAM2 are retained) 26.6 µA 350 µA
CY8CPROTO-062S3-4343W 64 KB (Block 0 and Block 8 of SRAM0 are retained 20.7 µA 230 µA
CYW9P62S1-43012EVB-01 64 KB (Block 0 and Block 9 of SRAM0 are retained 25.2 µA 360 µA
CYW9P62S1-43438EVB-01 64 KB (Block 0 and Block 9 of SRAM0 are retained 23 µA 260 µA
CY8CKIT-064B0S2-4343W 288 KB (Block 0 of SRAM0 and 256 KB of SRAM2 are retained) 30.6 µA 365 µA

Table 4 provides the typical current measurement values where PSoC™ 6 MCU is operated with CM4 running at 8 MHz in ULP mode with Minimum Current Buck selected as the regulator. The amount of SRAM retained is provided in the table below. CLK_PERI and CAPSENSE™ modulator clock run at 8 MHz.

Table 4. Typical current values when CPU clock is sourced by IMO

TargetAmount of SRAM retainedSlow scan (Scan GangedSensor at 5 Hz. The widget has only one sensor which is a ganged connection of five sensors fom the linear slider widget.)Fast scan (Scan LinearSlider widget at 50 Hz. The widget has five sensors.)
CY8CKIT-062-BLE 64 KB (Block 0 and Block 9 of SRAM0 are retained 23 µA 165 µA
CY8CKIT-062-WIFI-BT 64 KB (Block 0 and Block 9 of SRAM0 are retained 23 µA 170 µA
CY8CKIT-062S2-43012 288 KB (Block 0 of SRAM0 and 256 KB of SRAM2 are retained) 23 µA 165 µA
CY8CPROTO-062S2-43439 288 KB (Block 0 of SRAM0 and 256 KB of SRAM2 are retained) 12 µA 153 µA
CY8CPROTO-062-4343W 288 KB (Block 0 of SRAM0 and 256 KB of SRAM2 are retained) 22.3 µA 190 µA
CY8CPROTO-062S3-4343W 64 KB (Block 0 and Block 8 of SRAM0 are retained 18.6 µA 146.6 µA
CYW9P62S1-43012EVB-01 64 KB (Block 0 and Block 9 of SRAM0 are retained 19.0 µA 185 µA
CYW9P62S1-43438EVB-01 64 KB (Block 0 and Block 9 of SRAM0 are retained 20 µA 170 µA
CY8CKIT-064B0S2-4343W 288 KB (Block 0 of SRAM0 and 256 KB of SRAM2 are retained) 27.6 µA 210.5 µA

Related resources

Resources Links
Application notes AN228571 – Getting started with PSoC™ 6 MCU on ModusToolbox™
AN215656 – PSoC™ 6 MCU: Dual-CPU system design
Code examples Using ModusToolbox™ on GitHub
Device documentation PSoC™ 6 MCU datasheets
PSoC™ 6 technical reference manuals
Development kits Select your kits from the Evaluation board finder.
Libraries on GitHub mtb-pdl-cat1 – PSoC™ 6 Peripheral Driver Library (PDL)
mtb-hal-cat1 – Hardware Abstraction Layer (HAL) library
retarget-io – Utility library to retarget STDIO messages to a UART port
Middleware on GitHub capsense – CAPSENSE™ library and documents
psoc6-middleware – Links to all PSoC™ 6 MCU middleware
Tools ModusToolbox™ – ModusToolbox™ software is a collection of easy-to-use libraries and tools enabling rapid development with Infineon MCUs for applications ranging from wireless and cloud-connected systems, edge AI/ML, embedded sense and control, to wired USB connectivity using PSoC™ Industrial/IoT MCUs, AIROC™ Wi-Fi and Bluetooth® connectivity devices, XMC™ Industrial MCUs, and EZ-USB™/EZ-PD™ wired connectivity controllers. ModusToolbox™ incorporates a comprehensive set of BSPs, HAL, libraries, configuration tools, and provides support for industry-standard IDEs to fast-track your embedded application development.

Other resources

Infineon provides a wealth of data at www.infineon.com to help you select the right device, and quickly and effectively integrate it into your design.

For PSoC™ 6 MCU devices, see How to design with PSoC™ 6 MCU - KBA223067 in the Infineon Developer community.

Document history

Document title: CE230968 - PSoC™ 6 MCU: Low-power CAPSENSE™ design (FreeRTOS)

Version Description of change
1.0.0 New code example
1.1.0 Updated to support ModusToolbox™ software v2.3.
Added support for CY8CKIT-062S4.
1.2.0 Added support for CY8CEVAL-062S2 and CY8CEVAL-062S2-LAI-4373M2.
2.0.0 Major update to support ModusToolbox™ software v3.0.
This version is not backward compatible with previous versions of ModusToolbox™.
Added support for CY8CEVAL-062S2-MUR-43439M2 and CY8CKIT-064S0S2-4343W
2.1.0 Update to support ModusToolbox™ v3.1 and CAPSENSE™ middleware v4.X
2.1.1 Minor Makefile change to disable the CAPSENSE Tuner by default
2.2.0 Added support for new BSPs

All referenced product or service names and trademarks are the property of their respective owners.

The Bluetooth® word mark and logos are registered trademarks owned by Bluetooth SIG, Inc., and any use of such marks by Infineon is under license.


© Cypress Semiconductor Corporation, 2020-2024. This document is the property of Cypress Semiconductor Corporation, an Infineon Technologies company, and its affiliates ("Cypress"). This document, including any software or firmware included or referenced in this document ("Software"), is owned by Cypress under the intellectual property laws and treaties of the United States and other countries worldwide. Cypress reserves all rights under such laws and treaties and does not, except as specifically stated in this paragraph, grant any license under its patents, copyrights, trademarks, or other intellectual property rights. If the Software is not accompanied by a license agreement and you do not otherwise have a written agreement with Cypress governing the use of the Software, then Cypress hereby grants you a personal, non-exclusive, nontransferable license (without the right to sublicense) (1) under its copyright rights in the Software (a) for Software provided in source code form, to modify and reproduce the Software solely for use with Cypress hardware products, only internally within your organization, and (b) to distribute the Software in binary code form externally to end users (either directly or indirectly through resellers and distributors), solely for use on Cypress hardware product units, and (2) under those claims of Cypress's patents that are infringed by the Software (as provided by Cypress, unmodified) to make, use, distribute, and import the Software solely for use with Cypress hardware products. Any other use, reproduction, modification, translation, or compilation of the Software is prohibited.
TO THE EXTENT PERMITTED BY APPLICABLE LAW, CYPRESS MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS DOCUMENT OR ANY SOFTWARE OR ACCOMPANYING HARDWARE, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. No computing device can be absolutely secure. Therefore, despite security measures implemented in Cypress hardware or software products, Cypress shall have no liability arising out of any security breach, such as unauthorized access to or use of a Cypress product. CYPRESS DOES NOT REPRESENT, WARRANT, OR GUARANTEE THAT CYPRESS PRODUCTS, OR SYSTEMS CREATED USING CYPRESS PRODUCTS, WILL BE FREE FROM CORRUPTION, ATTACK, VIRUSES, INTERFERENCE, HACKING, DATA LOSS OR THEFT, OR OTHER SECURITY INTRUSION (collectively, "Security Breach"). Cypress disclaims any liability relating to any Security Breach, and you shall and hereby do release Cypress from any claim, damage, or other liability arising from any Security Breach. In addition, the products described in these materials may contain design defects or errors known as errata which may cause the product to deviate from published specifications. To the extent permitted by applicable law, Cypress reserves the right to make changes to this document without further notice. Cypress does not assume any liability arising out of the application or use of any product or circuit described in this document. Any information provided in this document, including any sample design information or programming code, is provided only for reference purposes. It is the responsibility of the user of this document to properly design, program, and test the functionality and safety of any application made of this information and any resulting product. "High-Risk Device" means any device or system whose failure could cause personal injury, death, or property damage. Examples of High-Risk Devices are weapons, nuclear installations, surgical implants, and other medical devices. "Critical Component" means any component of a High-Risk Device whose failure to perform can be reasonably expected to cause, directly or indirectly, the failure of the High-Risk Device, or to affect its safety or effectiveness. Cypress is not liable, in whole or in part, and you shall and hereby do release Cypress from any claim, damage, or other liability arising from any use of a Cypress product as a Critical Component in a High-Risk Device. You shall indemnify and hold Cypress, including its affiliates, and its directors, officers, employees, agents, distributors, and assigns harmless from and against all claims, costs, damages, and expenses, arising out of any claim, including claims for product liability, personal injury or death, or property damage arising from any use of a Cypress product as a Critical Component in a High-Risk Device. Cypress products are not intended or authorized for use as a Critical Component in any High-Risk Device except to the limited extent that (i) Cypress's published data sheet for the product explicitly states Cypress has qualified the product for use in a specific High-Risk Device, or (ii) Cypress has given you advance written authorization to use the product as a Critical Component in the specific High-Risk Device and you have signed a separate indemnification agreement.
Cypress, the Cypress logo, and combinations thereof, ModusToolbox, PSoC, CAPSENSE, EZ-USB, F-RAM, and TRAVEO are trademarks or registered trademarks of Cypress or a subsidiary of Cypress in the United States or in other countries. For a more complete list of Cypress trademarks, visit www.infineon.com. Other names and brands may be claimed as property of their respective owners.