# ESP-IDF-InkPlate Library Version 0.9.3 (March 2, 2021) A porting effort to the ESP-IDF framework for the e-Radionica InkPlate software that can be find [here](https://github.com/e-radionicacom/Inkplate-Arduino-library). --> Work in progress. It is usable, but testing remains to be completed. <-- Look in the `examples` folder for ready-made applications. This library is conform to the PlatformIO IDE extension. All examples can be compiled using PlatformIO. Information about the modifications is located in file **CHANGES.md** ## ESP-IDF configuration specifics for InkPlate devices An InkPlate application requires some functionalities to be properly set up within the ESP-IDF. The following elements have been done for this project and can be used as a reference for other projects: - **PSRAM memory management**: The PSRAM is an extension to the ESP32 memory that offers 4MB+4MB of additional RAM. The first 4MB is readily available to integrate into the dynamic memory allocation of the ESP-IDF SDK. To do so, some parameters located in the `sdkconfig` file must be set accordingly. This must be done using the menuconfig application that is part of the ESP-IDF. The following command will launch the application (the current folder must be the main folder of EPub-InkPlate): ``` $ idf.py menuconfig ``` The application will show a list of configuration aspects. To configure PSRAM: - Select `Component Config` > `ESP32-Specific` > `Support for external, SPI-Connected RAM` - Select `SPI RAM config` > `Initialize SPI RAM during startup` - Select `Run memory test on SPI RAM Initialization` - Select `Enable workaround for bug in SPI RAM cache for Rev 1 ESP32s` - Select `SPI RAM access method` > `Make RAM allocatable using malloc() as well` Leave the other options as they are. - **ESP32 processor speed**: The processor must be run at 240MHz. The following line in `platformio.ini` request this speed: ``` board_build.f_cpu = 240000000L ``` You can also select the speed in the sdkconfig file: - Select `Component config` > `ESP32-Specific` > `CPU frequency` > `240 Mhz` - **FAT Filesystem Support**: If the application requires the usage of the micro SD card. This card must be formatted on a computer (Linux or Windows) with a FAT 32 partition. The InkPlate6Ctrl class requires this in its current configuration. The following parameters must be adjusted in `sdkconfig`: - Select `Component config` > `FAT Filesystem support` > `Max Long filename length` > `255` - Select `Number of simultaneously open files protected by lock function` > `5` - Select `Prefer external RAM when allocating FATFS buffer` - **Flash memory partitioning (optional)**: the file `partitions.csv` contains the table of partitions definition for the 4MB flash memory, required to support the largest applications size in an OTA context. The partitions OTA_0 and OTA_1 have been set to be 1.3MB in size. In the `platformio.ini` file, the line `board_build.partitions=...` is directing the use of these partitions configuration.