E2271CS021 EInk Controller (display-eink-e2271cs021)¶
-
group
index
Overview
This library provides functions for supporting the 2.7” EPD Display (E2271CS021). This is the same display as used on the CY8CKIT-028-EPD shield.
https://www.electronicsdatasheets.com/download/59018c25e34e2457312cc1ab.pdf?format=pdf
Quick Start
EINK emWin application
Follow the steps below in order to create a simple emWin application and display some text on it.
Create an empty application
Add this library to the application
Add emWin library to the application
Enable EMWIN_NOSNTS emWin library option by adding it to the Makefile COMPONENTS list:
COMPONENTS=EMWIN_NOSNTS
place the following code in the main.c file:
#include "cyhal.h" #include "cybsp.h" #include "GUI.h" #include "mtb_e2271cs021.h" #include "LCDConf.h" cyhal_spi_t spi; // The pins used here work with the CY8CKIT-028-EPD shield and the CY8CKIT-062-BLE // or CY8CKIT-062-WIFI-BT kit. // If the display is being used on different hardware the mappings will be different. const mtb_e2271cs021_pins_t pins = { .spi_mosi = CYBSP_D11, .spi_miso = CYBSP_D12, .spi_sclk = CYBSP_D13, .spi_cs = CYBSP_D10, .reset = CYBSP_D2, .busy = CYBSP_D3, .discharge = CYBSP_D5, .enable = CYBSP_D4, .border = CYBSP_D6, .io_enable = CYBSP_D7 }; uint8_t previous_frame[PV_EINK_IMAGE_SIZE] = {0}; uint8_t *current_frame; int main(void) { cy_rslt_t result; // Initialize the device and board peripherals result = cybsp_init(); CY_ASSERT(result == CY_RSLT_SUCCESS); __enable_irq(); // Initialize SPI and EINK display result = cyhal_spi_init(&spi, pins.spi_mosi, pins.spi_miso, pins.spi_sclk, NC, NULL, 8, CYHAL_SPI_MODE_00_MSB, false); if (CY_RSLT_SUCCESS == result) { result = cyhal_spi_set_frequency(&spi, 20000000); } result = mtb_e2271cs021_init(&pins, &spi); CY_ASSERT(result == CY_RSLT_SUCCESS); current_frame = (uint8_t*)LCD_GetDisplayBuffer(); GUI_Init(); GUI_SetTextMode(GUI_TM_NORMAL); GUI_SetFont(GUI_FONT_32B_1); GUI_SetBkColor(GUI_WHITE); GUI_SetColor(GUI_BLACK); GUI_SetTextAlign(GUI_ALIGN_HCENTER | GUI_ALIGN_HCENTER); GUI_Clear(); GUI_DispStringAt("Hello World", LCD_GetXSize() / 2, (LCD_GetYSize() / 2) - (GUI_GetFontSizeY() / 2)); // update the display mtb_e2271cs021_show_frame(previous_frame, current_frame, MTB_E2271CS021_FULL_4STAGE, true); while (1); }
Build the application and program the kit.
EINK driver usage without emWin
The EINK library can be also used standalone. Follow the steps below to create a simple application which shows an interesting pattern on the display.
Create an empty application
Add this library to the application
Place the following code in the main.c file:
#include "cyhal.h" #include "cybsp.h" #include "mtb_e2271cs021.h" cyhal_spi_t spi; // The pins used here work with the CY8CKIT-028-EPD shield and the CY8CKIT-062-BLE // or CY8CKIT-062-WIFI-BT kit. // If the display is being used on different hardware the mappings will be different. const mtb_e2271cs021_pins_t pins = { .spi_mosi = CYBSP_D11, .spi_miso = CYBSP_D12, .spi_sclk = CYBSP_D13, .spi_cs = CYBSP_D10, .reset = CYBSP_D2, .busy = CYBSP_D3, .discharge = CYBSP_D5, .enable = CYBSP_D4, .border = CYBSP_D6, .io_enable = CYBSP_D7 }; uint8_t previous_frame[PV_EINK_IMAGE_SIZE] = {0}; uint8_t current_frame[PV_EINK_IMAGE_SIZE] = {0}; int main(void) { cy_rslt_t result; uint32_t i; // Initialize the device and board peripherals result = cybsp_init(); CY_ASSERT(result == CY_RSLT_SUCCESS); __enable_irq(); // Initialize SPI and EINK display result = cyhal_spi_init(&spi, pins.spi_mosi, pins.spi_miso, pins.spi_sclk, NC, NULL, 8, CYHAL_SPI_MODE_00_MSB, false); if (CY_RSLT_SUCCESS == result) { result = cyhal_spi_set_frequency(&spi, 20000000); } result = mtb_e2271cs021_init(&pins, &spi); // Fill the EINK buffer with an interesting pattern for (i = 0; i < PV_EINK_IMAGE_SIZE; i++) { current_frame[i] = i % 0xFF; } // Update the display mtb_e2271cs021_show_frame(previous_frame, current_frame, MTB_E2271CS021_FULL_4STAGE, true); while (1); }
Build the application and program the kit.
EINK emWin FreeRTOS application
Follow the steps bellow in order to create a simple emWin application and display some text.
Create an empty application
Add this library to the application
Add the emwin, abstraction-rtos, and freertos libraries to the application
Enable EMWIN_OSNTS emWin library option by adding it to the Makefile COMPONENTS list:
COMPONENTS=EMWIN_OSNTS FREERTOS
Edit the FreeRTOSConfig.h file in the freertos library. Or make a copy of it in the top level of your project directory. Comment out the #warning statement and update these definitions.
#define configUSE_MUTEXES (1u) #define configUSE_RECURSIVE_MUTEXES (1u) #define configUSE_COUNTING_SEMAPHORES (1u) #define configSUPPORT_STATIC_ALLOCATION (1u) #define configSUPPORT_DYNAMIC_ALLOCATION (1u) #define configTOTAL_HEAP_SIZE (1024*48u) #define configUSE_TRACE_FACILITY (1u)
Place the following code in the main.c file:
#include "FreeRTOS.h" #include "GUI.h" #include "LCDConf.h" #include "cybsp.h" #include "cyhal.h" #include "mtb_e2271cs021.h" #include "task.h" cyhal_spi_t spi; // The pins used here work with the CY8CKIT-028-EPD shield and the CY8CKIT-062-BLE // or CY8CKIT-062-WIFI-BT kit. // If the display is being used on different hardware the mappings will be different. const mtb_e2271cs021_pins_t pins = { .spi_mosi = CYBSP_D11, .spi_miso = CYBSP_D12, .spi_sclk = CYBSP_D13, .spi_cs = CYBSP_D10, .reset = CYBSP_D2, .busy = CYBSP_D3, .discharge = CYBSP_D5, .enable = CYBSP_D4, .border = CYBSP_D6, .io_enable = CYBSP_D7 }; uint8_t previous_frame[PV_EINK_IMAGE_SIZE] = {0}; uint8_t *current_frame; void guiTask(void *arg) { current_frame = (uint8_t*)LCD_GetDisplayBuffer(); GUI_Init(); GUI_SetTextMode(GUI_TM_NORMAL); GUI_SetFont(GUI_FONT_32B_1); GUI_SetBkColor(GUI_WHITE); GUI_SetColor(GUI_BLACK); GUI_SetTextAlign(GUI_ALIGN_HCENTER | GUI_ALIGN_HCENTER); GUI_Clear(); GUI_DispStringAt("Hello World!", LCD_GetXSize() / 2, (LCD_GetYSize() / 2) - (GUI_GetFontSizeY() / 2)); // update the display mtb_e2271cs021_show_frame(previous_frame, current_frame, MTB_E2271CS021_FULL_4STAGE, true); } int main(void) { cy_rslt_t result; // Initialize the device and board peripherals result = cybsp_init(); CY_ASSERT(result == CY_RSLT_SUCCESS); __enable_irq(); // Initialize SPI and EINK display result = cyhal_spi_init(&spi, pins.spi_mosi, pins.spi_miso, pins.spi_sclk, NC, NULL, 8, CYHAL_SPI_MODE_00_MSB, false); if (CY_RSLT_SUCCESS == result) { result = cyhal_spi_set_frequency(&spi, 20000000); } result = mtb_e2271cs021_init(&pins, &spi); CY_ASSERT(result == CY_RSLT_SUCCESS); xTaskCreate(guiTask, "GUI Task", 1024*10, 0, 1, 0); vTaskStartScheduler(); while (1); // Will never get here }
Build the application and program the kit.
EINK emWin mbed application
Follow the steps bellow in order to create a simple emWin application and display some text.
Create a new application
mbed new tft_app cd tft_app
Add this library to the application
mbed add http://devops-git.aus.cypress.com/repo-staging/display-eink-e2271cs021.git
Add the emwin library to the application
mbed add http://devops-git.aus.cypress.com/repo-staging/emwin.git
Enable EMWIN_OSNTS emWin library option by adding it to the mbed_app.json file
"target_overrides": { "*":{ "target.components_add": ["EMWIN_OSNTS"],
Place the following code in the main.cpp file:
#include "GUI.h" #include "LCDConf.h" #include "cy_pdl.h" #include "cy_utils.h" #include "cybsp.h" #include "cycfg.h" #include "mbed.h" #include "mtb_e2271cs021.h" cyhal_spi_t spi; // The pins used here work with the CY8CKIT-028-EPD shield and the CY8CKIT-062-BLE // or CY8CKIT-062-WIFI-BT kit. // If the display is being used on different hardware the mappings will be different. const mtb_e2271cs021_pins_t pins = { .spi_mosi = CYBSP_D11, .spi_miso = CYBSP_D12, .spi_sclk = CYBSP_D13, .spi_cs = CYBSP_D10, .reset = CYBSP_D2, .busy = CYBSP_D3, .discharge = CYBSP_D5, .enable = CYBSP_D4, .border = CYBSP_D6, .io_enable = CYBSP_D7 }; uint8_t previous_frame[PV_EINK_IMAGE_SIZE] = {0}; uint8_t *current_frame; int main(void) { cy_rslt_t result; // Initialize the device and board peripherals cybsp_init(); __enable_irq(); // Initialize SPI and EINK display result = cyhal_spi_init(&spi, pins.spi_mosi, pins.spi_miso, pins.spi_sclk, NC, NULL, 8, CYHAL_SPI_MODE_00_MSB, false); if (CY_RSLT_SUCCESS == result) { result = cyhal_spi_set_frequency(&spi, 20000000); } result = mtb_e2271cs021_init(&pins, &spi); CY_ASSERT(result == CY_RSLT_SUCCESS); current_frame = (uint8_t*)LCD_GetDisplayBuffer(); GUI_Init(); GUI_SetTextMode(GUI_TM_NORMAL); GUI_SetFont(GUI_FONT_32B_1); GUI_SetBkColor(GUI_WHITE); GUI_SetColor(GUI_BLACK); GUI_SetTextAlign(GUI_ALIGN_HCENTER | GUI_ALIGN_HCENTER); GUI_Clear(); GUI_DispStringAt("Hello World!", LCD_GetXSize() / 2, (LCD_GetYSize() / 2) - (GUI_GetFontSizeY() / 2)); // update the display mtb_e2271cs021_show_frame(previous_frame, current_frame, MTB_E2271CS021_FULL_4STAGE, true); ThisThread::sleep_for(osWaitForever); }
Build the application and program the kit.
mbed compile --target CY8CKIT_062_BLE --toolchain GCC_ARM --flash or mbed compile --target CY8CKIT_062_WIFI_BT --toolchain GCC_ARM --flash
More information
PSoC 6 Resources - KBA223067 © Cypress Semiconductor Corporation, 2019-2021.